回答編集履歴
1
回答を洗練
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
|
-
実際の現場だったら
|
11
|
+
ですが実際の現場だったらよくある光景ですね。
|
12
12
|
|
13
|
-
で
|
13
|
+
PHPのエンジニアが多いから基本的にはPHPでいきたいが、この機能だけはどうしても速度が欲しいからNode.jsやGolang使いましょうとか、
|
14
14
|
|
15
|
-
|
15
|
+
PHPやRubyで書いたWebサービスが大当たりした、ScalaやGolangで書き直そう!でもリソースの問題あるから、URLのパス文字列で区切って、今月はここの部分だけ書き直します!
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
また
|
19
|
+
また、高速でフロント(JS+Ajax)、バック(PHP)の両方から問い合わせる両対応なWebサーバが欲しいよねー
|
20
20
|
|
21
|
-
|
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
|
-
|
37
|
+
大量のリクエストを捌いてくれるNginxに80番ポートを紐付け、代表的なWebサーバとして構築します。
|
36
38
|
|
37
39
|
PHPは適当に3000番ポート、Golangは4000番ポートに紐づけて動かします。
|
38
40
|
|
39
|
-
リクエストがやってきたらパス文字列を確認しながら、
|
41
|
+
リクエストがやってきたらパス文字列を確認しながら、`/api`で始まるから4000番ポート、それ以外は3000番ポート、静的ファイルはNginxがそのまま返すという構成が人気ありますね。
|
40
42
|
|
41
|
-
こういった
|
43
|
+
こういったリバースプロキシ目的でNginxを採用する企業は数多くあります。
|
42
44
|
|
43
45
|
|
44
46
|
|
45
|
-
そ
|
47
|
+
そうすればJavaScriptからAjaxで直接GolangにGraphQL問い合わせができますね。
|
46
48
|
|
47
|
-
Golangの良さを100%活かせそうですね。
|
48
|
-
|
49
|
-
PHPも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
|
-
|
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
|
-
|
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
|
-
|
101
|
+
でしたらそれはWebサーバです。
|
102
|
+
|
103
|
+
|
96
104
|
|
97
105
|
そしてWebサーバもそっからRestfulサーバ、APIサーバ・・・などなど色々派生していくわけで、
|
98
106
|
|
99
|
-
Webサーバ
|
107
|
+
Webサーバでもあり、APIサーバでもあり、マイクロサービスアーキテクチャで作られたアプリケーションサーバでもあるといったところでしょう。
|