SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2017】セッションレポート(AD)

秒間100万クエリ・8万リクエストの「グラブル」安定稼働を支える、Cygames「3つの取り組み」【デブサミ2017】

【16-E-4】グランブルーファンタジーを支えるインフラの技術

  • X ポスト
  • このエントリーをはてなブックマークに追加

リアルタイム通信の高速化とタグシステムによる運用効率化

 続いて佐藤氏はリアルタイム通信高速化の取り組みを紹介。チャットやマルチバトルのパラメータ反映などで利用されるのが双方向リアルタイム通信だ。CygamesではWebSocketプロトコルを使って双方向リアルタイム通信を実装。サーバはNode.jsで、WebSocket通信とデータ送受信を実装している。

 リアルタイム通信の基本的な仕組みとして、クライアントはRoomという単位でグループ化され、同じRoomIDを持ったクライアント同士でメッセージを共有する。大規模環境の場合はサーバを分散する必要があり、一般的によく使われているのがPub/Subメッセージングモデルだ。グラブルでも当初はRedisのPub/Sub機能を使って、このモデルを採用していたという。しかし、アクセス数の増加とともにRedis Pub/Sub(メッセージキュー)がボトルネック化。さらにタイミングを同じくして、東京ゲームショウで「数千人同時バトル」の開催が企画され、システムの改善が急務となった。

 Cygamesインフラチームでは改善策として、Pub/Subメッセージングモデルを捨て、Nginxを使ったRoom対応L7ロードバランサを開発。アプリケーションはRoomIDをURLクエリストリングに付与し、NginxがWebSocket通信のロードバランサとして、URLクエリストリングを元に同一RoomIDのユーザーを同一Node.jsプロセスにルーティングする仕組みとした。なお、RoomIDに対応した分散ロジックは、高速スクリプトのLuaで実装。Consistent Hashingを使った分散ロジックであり、ノードの追加・削除を最小限の変更でマッピングするため、ノード障害による影響を最小限にできるというメリットもある。

この構成では、NginxはWebSocket通信のロードバランサとして機能
この構成では、NginxはWebSocket通信のロードバランサとして機能

 Nginxに切り替え後のNodeサーバーの負荷状況は、ロードアベレージが1.8から0.1へ、CPU使用率も160%から5%へと減少。東京ゲームショウでの数千人同時バトルも無事にさばくことができた。現在では1台あたり12万同時接続を達成し、サーバの台数も260台から40台に減らせたという。

 3つ目のトピックとして佐藤氏が取り上げたのは、「タグシステム」による運用効率化の取り組みだ。タグシステムとは、数千台規模のサーバ情報を一括管理可能な独自開発のサーバインベントリシステムである。

 グラブルの運用では当初、Excelやテキストファイルにサーバ情報を記載して管理していたが、デプロイ漏れや設定漏れのサーバがプロダクション環境に入ってしまうなどのオペミスが発生していたという。

 それを解消すべく開発したタグシステムでは、運用を考慮してCLIやAPIでサーバ情報を取得できるようにし、サーバリスト抽出を簡略化。また、サーバの故障や構築ステータスがわかるようにステータスを定義し、情報をホストに付加して可視化を行った。デプロイのステータスもタグで付加できるようになっている。

 事前にスキーマの定義が不要で、任意にタグ情報を追加できるのも特徴の1つ。運用していく中で適宜、必要な情報を追加し、不要な情報を削除できる。さらに、Elasticsearchへサーバ情報を登録し、高速に検索できるようにしている。WebサーバやNodeサーバの一覧を把握できるWeb UIもあり、開発エンジニアと共有して、デプロイ状況などがわかるようにしているという。

 CLIからは特定ホストのタグ情報を取得して、オンプレミス/クラウド、本番環境/開発環境などの種別を確認することや、「特定プロジェクトの本番環境Webサーバのリストを抽出して、並列にコマンドを実行」といったことも容易に行える。

 「日々行われるデプロイ作業でサーバ情報を可視化し、開発エンジニアが安心してリリース作業できるようになった。また、サーバ情報のテキスト管理から脱却して、オペミスを未然に防げるようになった」と、佐藤氏はタグシステムの効果を語る。

 最後に「Cygamesインフラが大切にしていること」として佐藤氏は次の3点を挙げ、セッションを終えた。

  • 当たり前のことを当たり前にやる
  • アプリケーションロジックを抽象化する
  • コア技術は自分たちで実装する

本セッションの資料はこちら

お問い合わせ

 株式会社Cygames

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2017】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10044 2017/04/14 21:37

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング