読者です 読者をやめる 読者になる 読者になる

WEB+DB PRESS plus シリーズ本(オンラインゲーム・サーバ/インフラを支える技術)

オンラインゲームを支える技術  ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)

オンラインゲームを支える技術  ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)

  • Javaでは、CPU-intensiveな処理の場合はJIT(Just In Timeコンパイラ)の実行によりC/C++よりも速くなる場合があるが、OSとのインタラクションが多い場合はシステムコール呼び出し時のチェックによるオーバーヘッドがあり、C/C++より10倍遅くなる場合もある。C/C++GCがなく実装にコストがかかるし、Javaはこの理由に使えない、そこでGolangへの期待が高まる。
  • Non-Blocking I/Oを汎用的に扱いたい(システムコールなどの低レイヤのAPIにおけるOSの違いをライブラリで吸収したい)場合はlibeventを使えばよい。libeventのインターフェースは、データ受信時のコールバック関数を登録するかたち。boost::asioというのもある。
  • シリアライズフォーマット(Protocol Buffer、MessagePack)やRPC(gRPCなど)の選択も重要になってくる
  • UDPパケットをP2PでやりとりするためのNATトラバーサルについては、シンメトリックNAT(毎回ポート番号が変わる)が使われている場合に対応できないので、今後はスケールアップによるクライアント/サーバ型が増えるだろう。

  • 以下の資料も併せて押さえておきたい(レイテンシ耐性のある設計)

www.slideshare.net

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

  • おおよそ自分でも押さえられている内容だということが認識できて良かった
  • Apacheの動作モデル(MPM prefork/worker)の話はしっかり認識しておきたい

yuuki.hatenablog.com

N回リクエストを処理した子プロセスを親プロセスが殺して再forkするような実装もある。 これにより、定期的にプロセスが死んでメモリが開放されて、CoWによるメモリ共有率が比較的高いプロセスしか残らないようになり、メモリ使用量を削減できる。
  • ストレージレイヤでの冗長化(&マルチサーバ化)については、以下の記事も併せて押さえておきたい

techblog.yahoo.co.jp