下林明正のブログ

思いついたことを適当に書いています。

Webサーバーのアーキテクチャについてランチタイムに同僚と雑談したメモ

話としては、

blog.yuuk.io

のような雑談をした。

多分ずっと前にもこういう知識を仕入れていたはずなんだけど、ディレクター業をメインにしばらくやっていたこともあって自分はこのあたり全然覚えてなかった。もともと記憶力もあまり良くない。のでメモったりすることで記憶を定着させようという気持ちになった。なので以下うろ覚え

  • LL言語で実装しているとそもそもネイティブスレッドをサポートしてなかったりでpreforkモデルになりがち。forkのコストが高いのでpreforkしているわけだけど、この場合何らかのリソースが余っていてもそれを使い切れるようにプロセスを増やしたりできないのでもったいなさがある。また、CoWがあるのでメモリ効率もさほど悪くないはずという設定かと思いきや、一部のLL言語は参照カウントを内部に持っていたりするので結局Writeがすぐに発生してしまいメモリ効率もあまり良くない傾向にある、らしい
    • 逆に、マルチスレッドモデルだと気軽にスレッドを増減できるのでリソースを使い切りやすい、らしい
  • イベント駆動モデルだとリソースを使い切れないのか、というとCPUが1つしか使えない以外はさほどそんなに効率が悪くない、らしい。まあ確かに大体はIO待ちだろうから、そうだろうという気がする
    • CPUが1つしか使えない問題についても、コンテナ時代ではサービスをスケールさせるにあたって以前ほど大きなボトルネックにはならない気がする、みたいな話も別の場所で聞いた気がする
  • JITコンパイラがちゃんとある環境で実装したい、みたいな話もしていたような。なんでだっけ?現代ならGraphQLを採用したくなるけど、そうなるとループ処理がめっちゃ多くなるのでJITコンパイラがあると有利、みたいな話だっけ。忘れた

メモしてみたけど、多分また半年後くらいには忘れてると思う。自分は記憶力が悪いので、自分で手を動かさない限りはちゃんと身にならなさそう。新サービスの立ち上げとかリプレースとかするとこういうことを本気でやる機会がありそうだけど、そんなに景気のいい時代でもないしなかなかそういう経験は貴重な感じがする。

それはそうと、こういう雑談が継続的にできたら知識が増えて得そう。多分みんなそうしてるんだろうけど、全くパスがない状態。Podcastってやつとかがこういう感じなのかな。