スマートフォンゲームのインフラ管理
スマートフォンアプリで使用するインフラの管理を行うチームのマネジメントを行った。インフラ管理ではマネジメントのみではなく、自身でも設計や構築、運用、障害対応などをおこなった。加えて、プロデューサーと協同してゲームの使用性・安定性の向上に取り組んだ。 インフラチームの規模は0である。 ゲームタイトルは3から多い時で5タイトル。それぞれ異なるインフラであるが、横断的にインフラ管理を行った。 クラウド環境(AWS)を使用していたので、インフラの運用で省力化できるところは積極的に省力化しつつも、各種クラウドサービスを使用かしないか比較衡量をきちんと行い、自前での管理をを行うべきとしたところは、自前での構築・管理を行った。 例えば、前者であれば、スマートフォンゲームのアクセス数は時間帯によって大きく異なり、時に大きくスパイクすることがある点が特徴である。 物理環境であれば、最大アクセス数に合わせてリソースを用意する必要があるが、クラウド環境であるので、アクセス数に応じてサーバ台数を増減するようにした。その際には最新のアプリケーションのデプロイが必要になるが、いくつかのデプロイツールを検証して、単純であるが場合によっては自作のスクリプトをフックして呼び出すことで機能拡張が容易なcapistranoを選定し、導入した。 さらに、上述したようにスマートフォンのゲームでは急激にアクセス数が伸びることがあるが、自動サーバ増設の高速化のためにベースとなるOSイメージの定期的な最新化の仕組みや、監視サーバで閾値を超える前に増加傾向を監視して事前にある程度サーバ増設をするなどの取り組みを行った。 後者ではAWSのデータベースサービス(RDS)は冗長構成をとっていても障害時にはフェイルオーバーに非常に時間がかかったり、ログ収集が簡単に行えないなどの難点があった。PaaS型のデータベースサービスは運用が楽であったが、デメリットの方が多いと判断したので、IaaS上にデータベースを自前で構築して使用した。ただし、IaaSではバーチャルIP(フローティングIP)が標準では使用できず、フェイルオーバー時にスレーブサーバへのクライアントのアクセス先自動切り替えが行えない。 その為、アプリケーションかインフラかに切り替えの仕組みを用意する必要があった。これは、検証を行った結果、導入・運用容易性やデータベースサーバへの負荷、アプリケーションへの悪影響の低減など総合的に考慮してクラスタソフト(Pacemaker)をインフラに導入することになった。クラスタソフトの導入は、のちにキャッシュサーバやログ収集サーバへの応用など様々に活用できたので、正解であったと確信している。 チームのマネジメントにおいては、各チームメンバーが自身で判断して対処できるように教育することに気を遣った。私はインフラチームのマネージャーとして各プロダクトを横断的に管理していたが、チームメンバーは各プロダクトの専任であった。その為、各チームメンバーがプロアクティブに行動できるように、なるべく権限の委任を行うとともに、判断の枠組みを提供したり、チーム全体での勉強会を開催しての情報交換を行うなどした。他に、各プロダクトで使用したことのない製品の導入に挑戦することを許しつつも、ログ収集やBIサーバなどの共通化すべき部分は共通化し、運用負荷の低減にも取り組んだ。 【 使用した技術 】 AWS、Apache、PHP(Fuel, CakePHP)、MySQL、Memcached、Redis、zabbix、fluentd、capistrano, WordPress