雑に読むclusterのアーキテクチャ
@c_c_kato: clusterのシステムアーキテクチャが公開されてる
ゲームの技術でUGCやるし、3D空間同期&アーカイブやるし、大規模イベントの同接スパイクをさばかないといけないし
うちほど総合的かつ面白いサーバー・インフラの仕事はないと自負してるし、採用加速中なのでみんな来て!
https://t.co/wUlJQJlJLU
AWS Graviton で EC2 コストを40%削減。国内最大級メタバース運営 クラスター社の AWS 活用 | AWS Startup ブログ
clusterの事業
toC
コンテンツクリエイターの方々がアバターやクラフトアイテム、アクセサリーなどを「cluster」上で販売しマネタイズできるようなシステムを提供して、クリエイターのエコシステムを構築しています。
toB
法人企業から依頼を受け、メタバース空間上でプロモーションイベントやライブイベント、コンサート、ファンミーティングなどを開催します。クラスターはこのイベントの制作から運営までをワンストップで支援しています。
課題
3D のワールドやイベントを提供するためのサーバーとして、Amazon EC2 を使用しているが、インフラサービス利用者の増加に伴いインスタンスにかかるコストが大きくなっている
対応
広範囲のワークロードに対応し優れたコストパフォーマンスを発揮する AWS Graviton2 プロセッサ搭載のEC2 C6g インスタンスを導入し、インスタンスコスト 40% 減
すごい基素.icon
システムアーキテクチャ
Webサイトのホスティング
3Dアバター情報配信(アバター更新をリアルタイムで同じ空間のユーザーに届ける)
DynamoDB
ユーザーとのメッセージのやり取り
API GatewayのWebSocket
主要なWebAPI
ALBの後段にAmazon ECSで動くWebサーバー
DBはAmazon Aurora
3D空間のユーザーのリアルタイム情報はDynamoDBに入れてる
リアルタイム系はDynamoDBを使うのね基素.icon
ルームサーバー
3D 空間内でのワールドやイベントを提供するためのサーバー群です。「cluster」ではユーザーがワールドやイベントに入る場合、システム側では Amazon EC2 が起動しており、ユーザーはその Amazon EC2 に対して接続します
今回のコストカットはここの話
Auto Scaling グループを用いて常時十分な量の Amazon EC2 インスタンスを立ち上げている
3D 空間内での情報の同期を行うために、私たちは room server というソフトウェアを内製しています。
Go言語製
3D 空間のメタデータやアバター、アイテム、state などの同期を行うものです。
新しいバージョンの room server がリリースされた場合にスムーズに更新するため、AWS Systems Manager Automation を使っています
それにより、その時点で起動されている Amazon EC2 で動く room server をすべて新しいバージョンに置き換えて、再デプロイできるようにしています。その際、AWS AppConfig の feature flag も活用しています。
サービス運営において AWS のコストが大きい部分だった
GoだったのでCI/CDのビルド設定を変える程度で乗り換えることができた
月1でAWSとミーティング
「cluster」は過去の実績として「イベント同時接続数 10 万人」と発表していますが、この数字がさらに大きくなっても、問題なくサービスを運営し続けられるアーキテクチャにしていきたいです。
素直に受け取るなら、現状はこれぐらいの規模が限界ということ基素.icon
もともと「cluster」は、IoT などのセンシングデバイスがサーバーにデータを送るために策定された MQTT プロトコルを、3D 空間のデータの同期に使うという発想から生まれたサービスでした。
https://recruit.cluster.mu/ でも昔書かれていた基素.icon