AWSでのサービスローンチ3番勝負2020 in Happy Elements
Happy Elements株式会社にて、インフラエンジニア兼インフラグループのリーダーをしております。鷲見といいます。
この記事は、
の17日目の12/17の投稿記事となります。
概要
これまで3年間新作のリリースがなく沈黙を続けてきたHappy Elementsですが、この2020年には3本のゲームタイトルをリリースさせていただきました。今まではオンプレミスのデータセンター上でAPIサーバーを稼働させておりましたが、2020年にリリースしたタイトルでは全てAWSでのクラウド化を実現しました。
インフラエンジニアにとってサービスのリリースとはまさに真剣勝負。今年の大勝負3本について振り返りながら、どのようにAWSを利用しているのか?といった構成をかんたんに説明していきたいと思います。
勝負1:『あんさんぶるスターズ!!Basic』『あんさんぶるスターズ!!Music』
2015年にリリースされた『あんさんぶるスターズ!』、そのリニューアル版となる『あんさんぶるスターズ!!Basic』と新作リズムゲーム『あんさんぶるスターズ!!Music』を2020年3月15日にリリースしました。
Happy Elementsとしてもユーザー数の多い人気タイトルで、
- クラウド化
- コンテナ化
- 二作品同時リリース
といったなかなか意欲的なチャレンジを行いました。
構成
『あんさんぶるスターズ!!Basic』
『あんさんぶるスターズ!!Basic』はリニューアル版ということもあり、全てを新しくするのではなく既存のコード・構成をいかして、EC2上でRuby on RailsのAPIサーバーを稼働させています。
項目 | 利用サービス |
---|---|
Compute | EC2 |
DB | Aurora(MySQL) |
Cache1 | ElastiCache(Memcached) |
Cache2 | ElastiCache(Redis) |
『あんさんぶるスターズ!!Music』
『あんさんぶるスターズ!!Music』は新作いうこともあり、新しいチャレンジとして、ECSでのコンテナ化を行い、Ruby on RailsのコンテナをEC2上で稼働させAPIサーバーを構築しています。
項目 | 利用サービス |
---|---|
Compute | ECS on EC2起動タイプ |
DB | Aurora(MySQL) |
Cache1 | ElastiCache(Memcached) |
Cache2 | ElastiCache(Redis) |
リリースを振り返って
当日はリニューアル版、『あんさんぶるスターズ!!Basic』の移行データの不具合が見つかり、修正のためリリースが予定時間より遅れるということはありましたが、リリース後のアクセス集中も無事乗り越え、ほぼノートラブルでリリース作業を終えることができ、勝負は大勝といった感じでした。
実はサーバーのバックエンドのログ収集のパイプラインで想定を超えた流量となり、処理の遅延・滞留が発生しましたが、ユーザーさんへの影響がないところだったのでセーフでした。
勝因としては、クラウド化・コンテナ化ともに初めてということもあり、入念に負荷試験・キャパシティ設計を行うことができたという点に尽きるかと思います。また、リリースに向けてAWSのエンタープライズサポートを契約し、リリース日にAWSさんの全面バックアップを受けられたことも非常に大きかったと思います。
このあたりについては、AWS SummitやCEDECにてお話させて頂く機会がありましたので、ぜひこちらも御覧ください。
AWS Summit
『あんさんぶるスターズ!! Music』を支える Amazon ECS ~人気ゲームの新作でのコンテナ化~
CEDEC
『あんさんぶるスターズ!!』 リニューアルと新作の同日リリースを支えたインフラ技術
勝負2:『エリオスライジングヒーローズ』
2020年8月3日にリリースした『エリオスライジングヒーローズ』。Happy Elementsとしても久しぶりの完全新規タイトルでした。
『あんさんぶるスターズ!!』の場合はすでに稼働していたタイトルの続編ということもあり、ユーザー数・アクセス数の予測もしやすかったのですが、久しぶりの新作のリリースということもあり、リリース直後の動きがまったく読めないといった状況でした。
『エリオスライジングヒーローズ』ではAWSでのローンチ3作目ということもあり、既に稼働していた『あんさんぶるスターズ!!Music』とほぼ同じアーキテクチャを採用し、構築・運用にかかる工数削減を目指しました。
構成
『エリオスライジングヒーローズ』は『あんさんぶるスターズ!!Music』のアーキテクチャを踏襲し、ECSでのコンテナ化を行い、Ruby on RailsのコンテナをEC2上で稼働させAPIサーバーを構築しています。『あんさんぶるスターズ!!Music』と異なる点はEC2、Aurora、ElastiCacheのインスタンスタイプや台数となります。
項目 | 利用サービス |
---|---|
Compute | ECS on EC2起動タイプ |
DB | Aurora(MySQL) |
Cache1 | ElastiCache(Memcached) |
Cache2 | ElastiCache(Redis) |
リリースを振り返って
とにかくリリース時のユーザー数・アクセス数が読めないという状況でしたので、かなり大めに見積もり、キャパシティに余裕をもたせてのリリースとなりました。想定がかなり余裕を持っていたため、リリース後のアクセス集中も余裕を持って乗り越え、ノートラブルでリリース作業を終えることができ、勝負は完勝となりました。前回の反省を活かし、今回はログパイプラインの流量見積もりも正確に行うこともでき、完全にノートラブルでリリースを終えることができました。
勝負3:『あんさんぶるスターズ!!Music』:「みんなでライブ」機能(β版)
新作のリリースというわけではないのですが、今年の大きなリリースの一つに11月25日にリリースした『あんさんぶるスターズ!!Music』での「みんなでライブ」機能の追加がありました。読んで字のごとく他のユーザーといっしょに『あんさんぶるスターズ!!Music』のリズムゲームをプレイするといった機能で、リアルタイム通信・マルチプレイ機能といった今までにない機能の追加ということもあり、APIサーバーとはことなるアーキテクチャとなります。
また、今回はインフラについての相談から予定リリース日までの期間が短く
- リアルタイム通信
- マルチプレイ
- 短期間
といった課題を解決していかなければいけませんでした。
構成
リアルタイム通信・マルチプレイという機能を短期間でどのように実装するのか?といった課題に対し、「P2P」,「Redis Pub/Sub」,「Agones」,自前実装などいろいろな構成を検討しましたが、Redis5から搭載された機能「Redis Streams」を使えば簡単に実現できるのではないかというアイデアが出てきたので、、実証実験を実施したところパフォーマンスもクリアできました。
「みんなでライブ」では既存のAPIサーバーも利用しつつ、マルチプレイのパートでは「Node.js」「WebSocket」「Redis Streams」を組合わせて使うことになりました。
AWSインフラの面で見ると、APIサーバーとほぼ同じ構成で「Redis Srtreams」が今までと大きく異なるといった形になります。
「Redis Streams」の詳細については Happy Elements Advent Calendar 2020 で別のメンバーが書いてくれると思うのでそちらに譲ります。
項目 | 利用サービス |
---|---|
Compute | ECS on EC2起動タイプ(Node.js/WebSocket) |
Cache1 | ElastiCache(Redis) |
リリースを振り返って
今まで利用したことのない機能を使ってのリリースということで、こちらも入念に負荷試験を行い、キャパシティも余裕をもたせてリリースに備えました。新機能ということもあり、リリース後多くの方にご利用いただきましたが、想定よりアクセスは少なく推移し、だいぶ余裕をもってさばけました。こちらもノートラブルでのリリースということで圧勝となりました。ただ想定がかなり多く、リソースも潤沢に準備してリリースを実施したため、リソースの縮小・コスト削減といったところが今後の課題となっています。
まとめ
今年の3つの大きな勝負を振り返り、
- クラウド化/AWS化
- コンテナ化
- リアルタイムマルチプレイ
といったチャレンジもしつつ、ほぼノートラブルでやり遂げることができており、2020年はインフラ面では大勝利だったかなとおもいます。
もちろんAWSさんの手厚いバックアップがあってのことだと思います。ほんと目黒と中之島には足を向けて寝れませんね。。。みなさんも困ったことがあればAWSの営業さん・SAさんに相談してみてください。
2021年もインフラ面は完全勝利を目指し、おごることなく謙虚に頑張っていきたいと思います。
さいごに・・・
Happy Elements株式会社 カカリアスタジオでは、いっしょに【熱狂的に愛されるコンテンツ】をつくっていただけるメンバーを大募集中です!
AWS触りたい方、コンテナ触りたい方など、もし弊社にご興味持っていただけましたら、是非一度下記採用サイトをご覧ください。
Discussion