回答編集履歴

1

回答を洗練

2018/12/12 12:06

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -4,23 +4,23 @@
4
4
 
5
5
  まぁ、シビアな世界の話をすればそうですね。
6
6
 
7
- パフォーマンス気にするならなんでPHPなんて使ってるの?ginとか使えくね?みたいには思います。
7
+ パフォーマンス気にするならなんでPHPなんて使ってるの?全部Golang(gin)でやれくね?思います。
8
8
 
9
9
 
10
10
 
11
- 実際の現場だったらPHPのエンジニアが多いから基本的にはPHPいきたい
11
+ ですが実際の現場だったらよくある光景すね
12
12
 
13
- 、この機能だけはどうしても速度が欲しいからNode.jsやGolang使いましょうみたいな話はよくあります。
13
+ PHPのエンジニアが多いから基本的にはPHPいきたいが、この機能だけはどうしても速度が欲しいからNode.jsやGolang使いましょうとか、
14
14
 
15
- フロント(JS+Ajax)、バック(PHP)の両方から問合わせる両対応サーい要件ではGolangみたいな高速な言語出番ってのはあります
15
+ PHPやRubyで書たWebサービス大当たりた、ScalaやGolangで書き直そう!でもリソース問題あるから、URLのパス文字列で区切って、今月はここ部分だけ書き直します
16
16
 
17
17
 
18
18
 
19
- またPHPやPythonのWebサーバも、重検索ロジックはMySQLやC言語のライブラリに丸投げする想定です。
19
+ また、高速でフロント(JS+Ajax)、バック(PHP)両方から問い合わせる両対応なWebサーバが欲しよねー
20
20
 
21
- DB周もPHPで作ればいじゃんんてう人はエンジニア100人呼んできて1人も居ないでしょ?それと同じです。
21
+ ・・・という要件もあGolangみたいな高速な語に白羽の矢が立つ事があります。
22
22
 
23
- 今回話のキモそう思います。
23
+ 沢山しなけど1個のは超上手くやるWebサーバ…これをマイクロサービスアーキテクチャ呼びます。
24
24
 
25
25
 
26
26
 
@@ -28,25 +28,25 @@
28
28
 
29
29
 
30
30
 
31
- 一般的にはリバプロですかね〜
31
+ 一般的にはリバプロですかね〜
32
+
33
+ Nginxが得意です。
32
34
 
33
35
 
34
36
 
35
- nginxに80番ポートを紐付け、代表的なWebサーバとして構築します。
37
+ 大量のリクエストを捌いてくれるNginxに80番ポートを紐付け、代表的なWebサーバとして構築します。
36
38
 
37
39
  PHPは適当に3000番ポート、Golangは4000番ポートに紐づけて動かします。
38
40
 
39
- リクエストがやってきたらパス文字列を確認しながら、内部動いていPHPとGolangWebサーバに受け流します。
41
+ リクエストがやってきたらパス文字列を確認しながら、`/api`始まから4000番ポート、それ以外は3000番ポート、静的ファイルはNginxがそのまま返という構成が人気ありますね
40
42
 
41
- こういった仕組みをリバースプロキシと呼びます。
43
+ こういったリバースプロキシ目的でNginxを採用する企業は数多くあります。
42
44
 
43
45
 
44
46
 
45
- したらJavaScriptからAjaxで直接GolangにGraphQL問い合わせが出来るの
47
+ うすればJavaScriptからAjaxで直接GolangにGraphQL問い合わせができますね。
46
48
 
47
- Golangの良さを100%活かせそうですね。
48
-
49
- PHPもGolangサーバ問い合わせたい内容はGolangに気軽に問い合わせれば良いのです。
49
+ PHPもGolangに気軽に問い合わせるようになります。
50
50
 
51
51
 
52
52
 
@@ -54,21 +54,27 @@
54
54
 
55
55
 
56
56
 
57
- 速度だけでいうならうまいやり方あります。
57
+ 速度だけでいうなら色々と選択肢があります。
58
-
59
- [UNIXドメインソケット](https://ja.wikipedia.org/wiki/UNIX%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88)を調べて下さい。
60
-
61
- [TCP localhostとUnix Domain Socketはどちらが速いのか?](https://qiita.com/ma2shita/items/154ad8f55d75051234c6)の方の検証では19倍の速度差があったようです。
62
58
 
63
59
 
64
60
 
65
- ですが、自分の中で閉じるlocalhostのHTTP通信十分速いです。
61
+ - [UNIXドメインソケット](https://ja.wikipedia.org/wiki/UNIX%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88): [TCP localhostとUnix Domain Socketはどちらが速いか?](https://qiita.com/ma2shita/items/154ad8f55d75051234c6)の方の検証で19倍の度差があったらし
62
+
63
+ - UDP: TCPより明らかに速いが、実装で死ぬ
64
+
65
+ - TCP: WebSocketと同じくコネクション繋ぎっぱなし運用が可能、実装で死ぬのはUDP同様
66
+
67
+ - WebSocket: Node.jsが得意、コネクション繋ぎっぱなしにすれば超速いでしょ?という理屈
68
+
69
+
70
+
71
+ しかし、自分の中で閉じるlocalhostのHTTP通信は十分速いです。
66
72
 
67
73
  Twitterのような売れっ子サイトになる前の今悩むのは捕らぬ狸の皮算用だと思いますがいかが?
68
74
 
69
75
 
70
76
 
71
- そしてlocalhostを使った場合は外部へ公開するWebサーバとして存在出来すが、UNIXドメインソケットはWebサーバじゃないです
77
+ これらの代替手段を使った場合、それHTTP通信を待ち受けるWebサーバではありせん
72
78
 
73
79
  PHPの裏で走るだけのアプリなら速度を求めてUNIXドメインソケットで実装すれば良いのですが、
74
80
 
@@ -76,7 +82,7 @@
76
82
 
77
83
 
78
84
 
79
- なので全体的に見てlocalhostにHTTP通信投げるやり方は無難で良い案だと思います
85
+ なので全体的に見てlocalhostにHTTP通信投げるやり方は最も良い案の一つではあります。
80
86
 
81
87
 
82
88
 
@@ -84,16 +90,18 @@
84
90
 
85
91
 
86
92
 
87
- GraphQLに関してちゃんと理解した訳はありませんが、
93
+ GraphQLは単なる会話の規約すよね。
88
94
 
89
- リンク先の記事の実装にはnet/httpモジュールを使っている跡があるってことは
95
+ リンク先の記事の実装にはnet/httpモジュールを使っている跡がありますし
90
96
 
91
- あくまでGraphQLでの通信はHTTPサーバのリクエストを受け付けた先のやり取りの話すよね?
97
+ あくまでGraphQLでの通信はHTTPサーバのリクエストを受け付けた先のやり取りの話を指してますよね?
92
98
 
93
99
 
94
100
 
95
- Webサーバでしょう
101
+ でしたそれはWebサーバで
102
+
103
+
96
104
 
97
105
  そしてWebサーバもそっからRestfulサーバ、APIサーバ・・・などなど色々派生していくわけで、
98
106
 
99
- Webサーバ、APIサーバいな感じになんじゃないでしょうか?
107
+ Webサーバでもあり、APIサーバでもあり、マイクロサービスアーキテクチャで作られアプリケーションサーバでもあったところでしょう