限られたリソースの中で~サーバ運用の現場から~

オンラインゲームでは、サーバ数やサーバスペックは運用コストに直結するので、常に 削減の圧力がかかっている。そんな状況の中でゲームが安定して動作するために最大限の 努力をするのがサーバ運用エンジニアである。

さて、ゲームにおけるサーバ運用とは、実際には何をするのだろうか。

  • サーバの物理的な構築、配線
  • ネットワーク環境の整備、ファイアウォール設定
  • サーバのOSセットアップとユーザ管理、アクセス権限設定
  • 各サーバへのゲームプログラム配布、バージョン管理
  • 外部課金処理との接続、内部課金システムの管理、開発
  • 各プロセスの実行状態監視、パフォーマンス最適化
  • 運用ツールの整備、開発
  • バグ調査、ログデータ解析
  • プレイヤーデータの不具合修正

エンジニアの業務範囲だけでも、このように非常に多岐にわたる。

プレイヤーはいつでも好きな時にゲームを楽しみたいから、本格的に運用を開始してからはそう簡単にサービスを止める事は許されない。なので、バグ修正や機能追加のためのアップデートは十分にテストする必要があるわけだが、これがなかなか難しい。

まず、サーバ構成の問題。

サービス用の機材ですら、パフォーマンスに余裕があれば1ワールドあたりの台数削減、同時に接続するプレイヤー数が少なくなればワールド統合、なんてこともすぐに検討される。これでは、テスト環境に潤沢なサーバ群が望めない事は想像に難くない。1サーバに全てのプロセスを同居させるような事も珍しくないだろう。しかし、これでは多人数が同時にアクセスする状況でのパフォーマンスや、複数サーバ特有の問題は検証できないし、管理ツール等、他のプログラムのテストをする際にも色々と注意が必要だ。さらに、テスト環境といえど社内で共有して使っている。基本的にはQAのチームがフルタイムで検証に使用しているので、その予定の空いている時間に可能な範囲でしかサーバには手を加えられない。

そして、作業時間の問題。

基本的には準備段階で確立した手順通りに随時実行するだけの状態で、メンテナンス当日を迎える事になっている。けれども、「このキャンペーンは○○ワールド限定なので他のワールドにはこれらのファイルを適用しないで下さい」とか、「このファイルのこの設定はサーバ毎にIPをこう振り分けて下さい」とかいった注文が当日に舞い込んだりするのは日常茶飯事だ。そうなると、もう手作業でそれらに対応するしかない。メンテナンス時間は限られていて、その中でデータのバックアップや検証、さらにはプロセスの起動自体に必要な時間もあるから、アドリブ作業に使える時間は本当に短い。間に合わなければ延長告知が必要になるので、何とかしようと慌ててしまう。焦るとヒューマンエラーは確実に増加する。本来だったらありえないようなミスも、これまで技術者の力量でギリギリ回避していた潜在的な問題も、そういう状況の中では簡単に発現する。

また、そうやって余裕なく日々の業務に追われていると最新の技術をキャッチアップする事もできなくなってしまい、ツールで回避できる問題、既に解決方法が確立している問題を繰り返す事にもなる。特に作業効率の悪さを長時間労働で辻褄合わせしようとするのは悪循環を招くだけで何もメリットはない。

といった感じで、サーバ運用エンジニアはいつもテストが不十分な状態で運用を強いられている。その中で、自動化できそうなところを見つけては少しずつ潰していく事で状況の改善を図っていく。そして、それぞれのプロジェクトに必要な労力がある程度減ってくると、コストダウンのためにエンジニアの人数そのものが削られる。人件費は運用コストに直結するからだ。

自分自身を不要にする事。

それはサーバ運用エンジニアの究極の目標である。