catch-img

ご質問フォームの最近のアーキテクチャ~2020年10月~

こんにちは。
経営企画室 プロトタイプビルダーの山下です。
ラーニングサービス本部 テクニカルトレーニング第一部と兼務でプロトタイプビルダーを始めました。
身の回りで行っているちょっとしたプロトタイピングなどを紹介していきたいと思います。
今日ご紹介するのは、トレーニングコース中に受講者さんからのご質問を匿名で受け付けるご質問フォームの最近のアーキテクチャです。
2019年6月からブログでは更新していなかったのですが、少しづつ見直しを図ったり、機能追加していました。

2019年6月時点のアーキテクチャ

  AWSトレーニングコースで使用している質問フォームのアーキテクチャ(2019年6月版) | トレノケート公式ブログ AWSトレーニングコースで使用している質問フォームのアーキテクチャ(2019年6月版) トレノケート公式ブログ

2020年10月時点のアーキテクチャ

ここ最近のアーキテクチャは、アイキャッチにも使用していますこちらです。

このご質問フォームは、匿名でご質問を受付できる、という目的だけではなく、このアーキテクチャそのものを、Architecting on  AWS、Developing on AWSというAWS認定クラスルームトレーニング(現時点では山下実施時のみ)でベストプラクティスを解説するための体験型デモとしての役割も担っています。


疎結合化

AWSの設計/開発ベストプラクティスの一つに、疎結合化があります。
このブログでは、ソフトウェアの制約があるようなケースで、疎結合化によって機会損失を減らし、耐障害性をどのようにして向上するか、一つのユースケースとして解説します。


RocketChatの役割と位置づけ

解説しやすくするため、対象のアーキテクチャを絞ります。

データの流れは、S3にデプロイした静的フォームに入力されたご質問メッセージが、API Gatewayに送信されて、SNSからSQSへファンアウト、Lambdaがキューコンシューマーとしてメッセージを受信してRocketChatというOSSのAPIにPOSTしています。

こうすることで、受講者さんからのご質問を受講者さん全員が手元で共有することができ、講師やサブ講師からの返答もリアルタイムに確認することができます。
匿名ですので、ご質問の敷居も下がります。

RocketChatはOSS(オープンソースソフトウェア)です。
構築のやり方によっては、データベースを別のインスタンスにして、複数のEC2やコンテナで冗長化を図ることも可能かと思いますが、今回は迅速にシンプルに構築するために、Ubuntuサーバーで "sudo snap install rocketchat-server"  コマンドを実行することによって、一式をインストールしています。

例えば、このRocketChatサーバーを、自分たちではカスタマイズすることのできない制約付きのソフトウェア、または外部のサービスAPIと仮定します。
そう仮定したとき、RocketChatはいつ止まるか分からないSPOF(単一障害点)と位置づけることができます。

RocketChatを単一障害点と位置づけた上で、RocketChatサーバーが停止しても受講者さんがご質問を送り続けられる設計を考えたいと思います。


SQSを使った疎結合化

LambdaからRocketChat APIへのPOSTが失敗してもSQSにご質問メッセージは残ります。
そして、デッドレターキューを指定しているので、30回再試行してPOSTできなかったメッセージはデッドレターキューへ移動します。

RocketChatが復旧してからメッセージをLambdaに渡してあげれば、メッセージを失うことなく、RocketChatへPOSTできます。


障害発生時

RocketChatをあえて、t3a.small という小さめのインスタンスで起動しています。
だいたい3日コースであれば、1回はCPUが高騰してユーザーアクセスも、APIアクセスも受け付けられなくなる事象が発生します。
今のところ、原因はCPU高騰で、再起動によって復旧するので、CloudWatchアラームで自動再起動を設定しています。
発生した場合は10分ほどRocketChatにはアクセスできなくなりますが、その間もご質問は送信し続けていただくことができます。
そうして復旧後に、CloudWatchアラームが実際にどう動いたかを見ていただくこともできます。
(t3なのでCPUバーストの解説にも重宝しています)



AWSで構築したツールを使いながら、AWS認定クラスルームトレーニングを受講されてみてはいかがでしょうか。
皆さまのご受講を心よりお待ちしております。

山下 光洋(やました みつひろ)

山下 光洋(やました みつひろ)

トレノケート株式会社 講師。AWS Authorized Instructor Champion / AWS認定インストラクター(AAI) / AWS 認定ソリューションアーキテクト - プロフェッショナル /AWS認定DevOpsエンジニア - プロフェッショナル / AWS 認定デベロッパー - アソシエイト / AWS 認定 SysOps アドミニストレーター - アソシエイト / AWS 認定クラウドプラクティショナー / kintone認定 カスタマイズスペシャリスト他。AWS認定インストラクターとしてAWS認定コースを実施。毎年1,500名以上に受講いただいている。AWS 認定インストラクターアワード2018, 2019を日本で唯一受賞。著書『AWSではじめるLinux入門ガイド』(マイナビ出版社)。共著書『AWS認定試験対策 AWS クラウドプラクティショナー』(SBクリエイティブ社)。前職では2016年にAWS Summitにパネラーとして参加。その前はLotus Technical Award 2009 for Best Architectとして表彰されている。また、各コミュニティの運営にも個人的に関わり、勉強会にてスピーカーや参加をしている。

© Trainocate Japan, Ltd. 2008-2020