▷依頼内容
コロナ禍において、例年開催していた各会場での展示会が開催できなくなってしまった。
- 同様の展示会をオンラインで実現したい。
- リアルで開催される展示会同様に、来場者とその場で商談ができるシステムを構築したい。
▷課題
数万ユーザが同時にリアルタイムで商談ができることを最大のポイントにしたシステムのため、まず大前提として急激なトラフィック上昇に強く、かつチャットのリアルタイム性の確保・担保が必要とされました。
《インフラ構成について》
インフラの構成はできるだけシンプルにしてあるため、中核であるVPCを中心に、CognitoやAppsyncなどを追加し、アプリケーションを実現しています。
◎ログイン(ユーザー管理としてCognitoを使用)
チャットを実現するための条件としても必要となるCognitoを利用しユーザーのログイン時のクライアントから送られてきたJWTを検証し、CognitoのIDからUserを識別し、ログインしています。
CognitoのIDをWebアプリケーションでユーザーに関する情報と紐付けることでユーザーの情報を取得可能な状態になります。
◎AppSync
本件プロジェクトの機能の1つにチャット機能があります。
チャットはリアルタイム性を重視し、本件の中核となる機能のためスムーズな開発および高負荷に耐えられることを期待してAppSync + DynamoDBを採用
Cognitoとの連携によりチャットのリアルタイム性を実現しなおかつ堅牢なセキュリティの確保を行いました。
◎ECS(Fargate)
膨大なアクセスが予想されるため従来のようなEC2を捨ててサーバーレスとしました。
アクセス予想から、必要なインスタンス数を割り出し、オートスケールによる自動増減で開くアセスが集中してもストレスの無いレスポンスを実現。
◎RDS
リードレプリカ構成とし、読み専用を複数台構成とすることでアクセスの集中にも十分に耐えられる構成としています。
◎FireHose
高トラフィックかつリアルタイム性、そして何より可用性を求められる本プロジェクトではログデータの処理として、Firehoseを使用しました。
ユーザーのログに対して下記のような導線を引くことにより、高トラフィックでもサーバーへの負荷が低いシステムを実現しました。ECS→CloudWatchLogs→Firehose→S3→バッチサーバー(ログ集計処理)
以上が、オンライン展示会開発における"インフラ構築編"の概要でした。
次の記事で"リアルタイムチャット機能開発編"について概要をまとめていきます!