
【cocone TECH TALK VOL.6・後編】Kotlin バックエンドアーキテクチャ of アバターサービス
-
2023年6月2日
今回は、2023年4月25日に行われた「cocone TECH TALK VOL.6」にて発表した内容を、前編・中編・後編の3つに分けてご紹介します!
本記事は後編として、「Kotlin バックエンドアーキテクチャ of アバターサービス」というテーマでお話いただいた内容を、23卒入社クライアントエンジニアのMの解釈でまとめたものになります。
発表内容
今回は、ClawKissを開発する中で使われてきたバックエンド側の技術についてお話して頂きました。
ClawKissとは
2022年12月にリリースしたアバターサービスで、ココネが得意とするCCP(Character Coordinate Play)をブロックチェーンに載せたらどうなるかという意欲作になっています。ブロックチェーンにはココネグループが開発運用しているMOOIを利用しています。
自身がヴァンパイアという設定で、画面上に表示されているキャラクターを2本指ホールドで爪から血を吸うという操作感になっています。面白い体験ですね!
ClawKissでのバックエンドアーキテクチャ
KotlinはJVMで動作する言語のため、開発にはJDKが必要になります。
Amazon CorrettoはAmazonによるJavaの開発実行環境で、ClawKissではAWSのサービスを多く使っているのでこれを選定しています。
SpringBootはJavaやKotlinでサーバーサイドを書く際によく用いられるフレームワークです。
クライアント(Unity)との通信にはgRPCを使用し、ビルドツールにはGradleを使用します。
リモートキャッシュにはElastiCache(Redis)を使っています。クラウドでキャッシュを行うことで、データへ高速にアクセスができるようになります。
DBに関しては、AWSサービスに統一したいという話もありましたが、弊社インフラチームの力を借りることができるため、MongoDB Atlasを使用しています。
EC2は仮想サーバー、S3はストレージサービス、CodeDeployはデプロイ(アプリをサーバーへ配置する)の自動化サービスです。
AWS Lambdaはイベントをトリガーとして記述した処理を実行できるサービスで、多くの言語に対応していますが、今回は手軽に動くことやライブラリのPillowを用いて画像編集をしたいこともあり、Pythonを選定しています。
API GatewayはAPIの作成と管理、CloudFrontは画像やアプリなどのコンテンツの高速な配信、Systems Managerのパラメータストアは様々な設定値の管理、Simple Notification Serviceはユーザーへのメッセージや通知を実現できます。
サービス構成について、大きくアルファ環境とプロダクション環境を2つ用意しています。クライアントはElastic load balancer経由でそれぞれのAutoScalingグループに割り振られて、必要に応じてMongoDBとElasticacheにデータを問い合わせます。
Kotest、DetektはそれぞれKotlinのテストフレームワークと静的解析ツールです。Jenkinsでデプロイジョブを作成し、Gradleでビルド、CodeDeployを実行するという流れになっています。
苦労したところ
-
- gRPCを使っての環境構築が初めてだった
-
- ALBのヘルスチェックが通らない問題
ローカルでのgRPC接続はできるが、デプロイしてみてもヘルスチェックがアプリケーションのログにすら記録されず、この問題に最も悩まされました。
インフラチームと話し合い、tcpdumpを取ってみたところ解決の糸口が見え、HTTP2を許可することで解決に至りました。
詳細は以下の記事に掲載しています。
「Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと」
- ALBのヘルスチェックが通らない問題
-
- protoファイルどこに置こうか問題
まだベストプラクティスは見つかっていないが、protoは別リポジトリで管理をしていて、アプリケーション側のリポジトリからはsubmoduleにして参照しています。
- protoファイルどこに置こうか問題
-
- 基本的にprotoリポジトリはブランチ一本化
developブランチに全ての変更が入る形になっています。このようにすると、構造体からパラメータを消すとビルドが通らなくなるという問題が何度か発生したため、消す時のルールを決めて、運用でカバーするようにしています。
- 基本的にprotoリポジトリはブランチ一本化
まとめ
- ClawKissはAWSがふんだんに使われている
- Kotlin on SpringBootは良い選択
- アバターサービスにおいても、バックエンドでは特に尖ったことはしておらず、当たり前のWebサービスの技術が当たり前に構築されている
スライド
新卒の所感
記事にまとめることで、名前は聞くけどどういう概念か分からない言葉を知ることができました。例えば、KotlinがJVM上で動作する言語と知って驚きましたし、AWSの各サービスについては、概要だけでも知ることで開発フローの見通しが良くなったように思います。私はクライアントエンジニアですが、このようなバックエンドの構成やアーキテクチャの概要は開発をスムーズに進めるためにも知っておくべきだと感じました!
TECH TALK前編では「リアルタイム対戦xバックエンドアーキテクチャ」というテーマでお届けしました!
【cocone TECH TALK VOL6・前編】リアルタイム対戦xバックエンドアーキテクチャ
中編では「ココネグループのブロックチェーン MOOI Network とのバックエンド連携」というテーマでお届けしました!
【cocone TECH TALK VOL6・中編】 ココネグループのブロックチェーン MOOI Network とのバックエンド連携
まだ読んでいない方は是非こちらからお読みください!