log-errorは必ず指定するPage4大規模ゲーム運営のポイント:監視とインフラ運用1:コンテンツとしっかり歩調を合わせること2:監視で収集可能な情報は全部取ること3:インフラ設定、構築、運用の効率化を常に考えること大規模ゲーム運営のポイント:パブリッククラウドを上手に使いこなす1:クラウド業者はポイントを絞って選定する2:クラウドで便利な機能は最大限活用する3:サーバ費用は上手に圧縮する4:パブリッククラウドを使う上でのリスク管理をしっかりする5:パブリッククラウド間の引越しも検討するまとめ大規模ゲーム運営のポイント:オープンソースコードのチューニングオープンソースコードのチューニングについては、GREEやmobageでゲームが大ヒットすると通信レスポンスがシビアになるため、特に対策が必要になります。そのポイントは「5秒ルール」への対応(2種類)と、「原因不明のエラー画面」への対応です。1:SYN再送を短く固定SNSプラットフォームでは、5秒以内に応答を返さなければならないというルールがあり、5秒を超えてしまうとサービスが止められてしまいます。アクセスの増加によって、ドラゴンコレクションのネットワーク内でパケットロスが発生しました。SYN再送が繰り返される際に、1回目の再送で3秒使ってしまい、プラットフォームの5秒ルールに抵触したのです。ドラゴンコレクションのアクセス規模では、一瞬にして1000エラーをカウントしてしまい、プラットフォーム側でシステム障害と判定され、メンテナンスステータスにされてしまいます。この問題に対し、コナミでは2つの処理を行いました。一つは、SYN再送を1秒に固定するようOSカーネルの設定を変更しました。2:スクリプトの実行時間を制限もう一つは、5秒以上かかりそうな応答をキャンセルする仕組みを組み込みました。PHPを使うアプリケーションの場合、set_time_limit()関数を使えばスクリプトの実行時間を制限できます。この関数はWindowsとLinuxで挙動が異なるので注意が必要です。Linux上で動作するPHPでは、「PHPのプロセスが処理に費やした時間だけ」が計測の対象になり、サーバとの接続待ち、応答待ちの時間などは計測されず、タイムアウトしません。タイムアウトの実装にsetitimer()関数が使われていて、第1引数に指定できる3種類のタイマーのうちITIMER_PROFを使っているためです。引数にITIMER_REALを指定すれば計測の挙動を変更できますが、PHPは100%非同期シグナルセーフとはいえないため、変更にはリスクも伴います。そのリスクを承知した上でソースコードに「POSIXタイマーとPOSIXリアルタイムシグナルを使う」ように手を入れ、さらに「時間指定の単位を1秒未満の精度にする」「タイムアウト時のHTTP応答を変更可能にする」といった動作の変更・追加も行いました。3:TIME_WAITでセッションリサイクルを調整また、ゲームプレー中にコンテンツ側では出力をしていない謎のエラー画面が出るという事象については、ピーク時間帯においてプラットフォームとコナミ間の通信で1,000セッション/秒を超えてセッションリサイクルが間に合わない状況が発生することを突き止めました。単純にリサイクルが間に合わないだけではなく、プラットフォーム側のTIME_WAITがLinuxデフォルト60秒より短い設定になっていると推測され、Linuxデフォルト60秒のコナミ側がセッションを回収するより前に新しい接続が送信されてきて、ぶつかってしまうことが原因と判断しました。そこで、TIME_WAITを60秒から5秒にOSカーネルの設定を変更、ぶつかる頻度を軽減させたのです。続いて、データベースのチューニングポイントです。ガソリンスタンド所長などを経て、1996年にフリーランスライターとして独立。以後、雑誌やWebを中心に執筆活動を行う。パソコン、周辺機器、ソフトウェア、携帯電話、セキュリティ、エンタープライズ系など幅広い分野に対応。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。