Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「年末年始の高負荷」をどう軽減するか? モンストがアプリ・インフラ両面から挑戦した負荷対策【デブサミ2019】

【15-A-3】 モンスターストライクにおける負荷対策 ~エンジニアリングチームの挑戦~

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2019/03/20 12:00

目次

アプリ・インフラの両面からアプローチした負荷対策

 エンジニアリングチームは大きく分けて2種類のアプローチを行った。1つはプログラムのロジックを見直すなどアプリケーション側を変えるアプローチ。そしてもう1つはサーバーやネットワーク回線を増強するなどインフラ側を変えるアプローチである。

 まず白川氏は、アプリケーション側を変えるアプローチについて解説した。モンストでは、年末年始のタイミングで多くのユーザーがログインを行う。そのため、ログイン処理がアプリケーションのボトルネックになっていた。

 その状況を改善するため「1.ログイン時に呼ばれる各処理の必要性の有無を精査し、処理数そのものを減らしていく」「2.ログイン時に呼ばれるAPIのうち、もっとも処理が重いものをリファクタリングする」といった軸で、負荷対策が進められていった。

 モンストでは、ログイン処理のタイミングで「ゲームに必要なすべての情報」を取得することで、その後の画面遷移で通信を挟まずにユーザーにアプリを使ってもらえる設計にしていた。通常時はこの方法で問題ない。しかし、アクセスが増えるとログイン処理の負荷が高まってしまう欠点を抱えていた。

 負荷対策として、この処理の改修が行われた。改修前は、アプリ起動からログインをしてホーム画面に遷移するまでのAPI呼び出し回数は合計13回。しかも、すべてのAPI呼び出しに成功しなければ、ユーザーはホーム画面までたどり着けなかった。

 この課題を解決するため、エンジニアリングチームではAPI呼び出しの必要性の有無を精査。なんと13回から3回にまで削減できたという。これにより、アプリケーションサーバーの負荷が減るだけではなく、ネットワーク通信量の削減にも結びついた。

 さらに、処理が重いAPIの高速化にも取り組んだ。このAPIは、ユーザーが所有しているすべてのキャラクター情報を取得するためのもの。ユーザーの所有キャラクターごとにアソシエーションに任せてデータを全件取得するため、仮に1ユーザーで最大5体のみ所持可能な情報であっても、機能によっては最大4200体で検索してしまうという課題があった。いわゆるN+1問題である。

 この課題を解消するため、APIの処理フローを「事前にキャラクター情報を取得しておく」「ユーザーが所有するキャラクター情報の一覧を持っておく」「2つの情報を照らし合わせてつなぎ合わせる」流れに変更した。その結果、最大4200回発行していたクエリをわずか1回に削減できたという。

 次に、インフラ側を変えるアプローチについて解説する。通常時、モンストのアプリケーションサーバーはCPUのコア数換算で13000coreが稼働している。また、DB性能限界へのアプローチとしてMemcachedによるキャッシュを多用している。そして、Memcachedはすべて自社のデータセンターのサーバーでまかなっているという。

 システム構成の都合上、アプリケーションサーバーとMemcachedサーバー間の通信が頻発する。そのため、アプリケーションの可用性を担保するには、自社で持つデータセンターとアプリケーションサーバー間の物理的な距離が重要となる。クラウド事業者の選定をする場合にも、レイテンシーを非常に重要視しているそうだ。

 年末年始の負荷対策のためアプリケーションサーバーの増強を行う際にも、この“レイテンシー重視”の方針が貫かれた。自社データセンターにあるMemcachedサーバーやデータベースサーバーとの物理的な距離がもっとも近いのは、言うまでもなく「自社データセンターにあるアプリケーションサーバー」である。そのため、このサーバー増強では自社データセンター内への相当数のサーバー配置が行われた。

 また、クラウドサーバーの調達にもかなり注力した。各クラウド事業者との専用回線を結ぶことでネットワーク帯域を強化したほか、CPUコア数換算で26000coreものサーバーを確保したという。これは、これはサーバーの設定上のmax connectionの上限まで達するコア数である。

 こうして、2018年末はどうなったか。結果としては、0時から15分程度は処理が重たくなったものの、2017年末の2時間と比較すると劇的な改善につながった。驚くべき推移である。

負荷対策の内容を総括し、「今後は上図の施策にも取り組んでいきたい」と白川氏は語る
負荷対策の内容を総括し、「今後は上図の施策にも取り組んでいきたい」と白川氏は語る

 「エンジニアチームとして、まだまだやれることはたくさんあります。ユーザーのみなさまに快適なサービスを提供するため、これからも私たちの戦いは続いていきます」

お問い合わせ

 株式会社ミクシィ



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:【デブサミ2019】セッションレポート

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5