いまやネットワークは、ゲームに欠かせない機能のひとつになっています。たとえば、プレイヤーとプレイヤーをマッチングして一緒にゲームを楽しんだり、お客様が作ったコンテンツをアップロードしてみんなで共有できたり、あるいはゲームの新しいアイテムを受け取ったりと、ネットワークを通じて、いろいろな楽しみ方ができるようになっています。
そういったことを実現するためにはネットワーク機能を提供するサーバーが必要です。かつてはゲームごとにサーバーを用意しており、利用しているソフトウェアの更新などがあった場合はゲームの数だけメンテナンスをする必要がありました。また用意したサーバーがゲームによってはあまり利用されず、リソースが想定以上に余ってしまうという課題も抱えていました。ですが、ここ数年、サーバーを取り巻くテクノロジーは急速に進歩しています。私はそんな日進月歩の技術と向き合いながら、より効率的なネットワーク環境の構築をめざしました。
サーバーは急にアクセスが増えたときにも問題が起きないようにリソースに一定の余裕を持たせる必要がありますが、ゲームごとにサーバーを用意するとゲームの数だけ余裕を持たせることになります。すべてのゲームで同時に負荷が高くなることは少ないため、全体の余裕を共通化する、マルチテナントの形式にすることでリソースを効率的に扱うことができます。また、ネットワークサービスにはさまざまな種類があり、ゲームごとに必要とするサービスは異なります。これらをマイクロサービス化することで、必要なリソースをサービス単位で増減させたり、リリースサイクルを分けたりすることができる設計にしました。
テナントごとにサーバーをカスタマイズするとメンテナンスのコストが増大します。サーバーをマルチテナント化して運用のコストを下げるためには、機能を適切に設計して汎用化することが求められ、これは性能とトレード・オフの関係になることがあります。その課題を解決するために、複数のクラウドサービスの特性を検証し、ドキュメントに明記されていない仕様についても掘り下げてサービスプロバイダーにヒアリング行いました。そうやって細かな仕様に精通することで、汎用性を犠牲にすることなく、性能を改善していきました。さらに、マイクロサービスやマルチテナントを実現するためにコンテナを始めとしたOSS(オープンソースソフトウェア)も採用しましたが、比較的新しい技術であるだけにまだ報告されていない未知の不具合が発生するケースも少なくありませんでした。このような課題を社内で検討しながら解決して、柔軟性のあるシステムを構築できました。
もともと私が、任天堂に入社したいと思ったきっかけになったのは、当時任天堂が開催していたインターンシップに参加したことでした。そのときの私は、任天堂に対して新しい技術を積極的に採用しているイメージを抱いていなかったのですが、インターンシップを経験して想像以上にモダンな技術を採用していることに驚きました。また技術が好きで明るい先輩も多く、世界に向けてプロダクトが作れるこの会社で働きたいと思いました。そのときに担当してくださった先輩がたと一緒に、今回のプロジェクトを遂行できたことは、とても幸運だったと思っています。
※Google Cloud Day: Digital ’22で、田中が「任天堂プラットフォーム向け汎用ゲームサーバー」について講演を行いました。
その際の講演内容は、こちらの動画からご覧いただけます。 https://www.youtube.com/watch?v=HN5yDW-Vi8A
また、講演の資料(PDF)はこちらからご覧いただけます。 https://services.google.com/fh/files/events/gcd22-d3-appdev-02.pdf
(いずれもGoogle Cloud Day: Digital ’22公式サイト内)