リアルタイムにデータを取得するサーバーレスのベストプラクティスアーキテクチャーは?

リアルタイムにデータを取得するサーバーレスのベストプラクティスアーキテクチャーは?

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

今回はサーバーレスアーキテクチャーにおいてリアルタイムにデータを取得するベストプラクティスを紹介していきたいと思います。ぜひ参考にしてください!

想定する読者

  • サーバーレスアーキテクチャーを理解したいヒト
  • リアルタイムなアプリケーションをサーバーレスに実現したいヒト

はじめに

結論からお伝えすると、サーバーレスアーキテクチャーにおいてリアルタイムなアプリケーションを実装するには、Kinesis ファミリーを最大限に活用することが重要となります。

この記事ではリアルタイムなアプリケーションを想定したサーバーレスのパターンをいくつかご紹介します。

リアルタイムなデータの収集・分析・保存処理のアーキテクチャー

リアルタイム処理を行ううえで必要となるのが、データの収集です。ユーザーが起こしたアクティビティや状態などを収集するためには、Kinesis Data Streams を利用します。分析には Kinesis Data Analytics 、保存には Kinesis Data Firehose を利用します。

これらは互いに連携が可能であるため、それぞれの特性を生かして配置していきます。以下の AWS で紹介されている一例をとてもわかりやすいので、それを見ながら解説していきます。

引用元: ゲーム分析パイプライン

上記を段階的に解説すると、リアルタイムなイベントのデータをまず Kinesis Data Streams でバックエンドに流していきます。AWS SDK や Amazon Kinesis Producer Library などを利用して、データを Kinesis Data Streams に送信します。

次に分析に使うものは Kinesis Data Analysis へ、保存には Kinesis Data Firehose へ送信します。それぞれ送信されたデータは次に Lambda に送られ、なんらかの処理や変換が実行される流れです。

これによりリアルタイムなデータを処理することが可能となります。

Live 配信や Web 会議を実装できるリソース

Live 配信などをリアルタイムに配信する場合には、Kines Video Streams の WebRTC を利用することで実現できます。こちらもサーバーレスなサービスのため、WebRTC のインフラ面を意識せずに利用することができます。

WebRTC は、リアルタイム通信(RTC)を可能にするための技術です。これを Kinesis Video Streams を介して利用することでリアルタイムな通信を簡単に実装することができます。

また Zoom のような Web 会議を行うアプリケーションで実装したい場合は、Amazon Chime SDK を用いて実現することができます。複数人で Web 会議をしたい、画面共有機能が欲しい、チャット機能が欲しい場合は Amazon Chime SDKを使いましょう。

AppSync を応用したリアルタイムなデータ取得アーキテクチャー

リアルタイムなデータの処理は Kinesis ファミリーを利用すれば実現できることがわかりました。次は AppSync のサブスクライブ機能を利用してリアルタイム通信を実現するパターンを見てみましょう。

引用元: AWS AppSync を使用した、ライブスポーツのリアルタイムの更新

Main Stack で囲われているところに注目してください。これは例えばリアルタイムにゲームの成績をダッシュボードに常時反映させたい場合に利用できます。各ユーザーのスコアは随時 Kinesis Data Streams で取得し、データが送信されるたび Lambda を起動して GraphQL の Mutation を実行します。Mutation の実行と同時に GraphQL の Subscription が実行され、現在のデータをダッシュボードに反映させることなどができます。

AppSync の Subscription を使うことによってリアルタイムな処理が可能となるので、サーバーレスアプリケーションにおいて AppSync を利用する場合はぜひご活用ください。

また上記のパターンは様々な場面で応用がききます。チャットや掲示板、SNSのようなフィードが常に最新に保たれているようなアプリに有効です。ぜひご活用ください。

関連記事

まとめ

上記で取り上げた AWS のサービスは、サーバーレスなため管理やメンテナンスなどは不要です。そのためアーキテクチャが固まれば、あとの実装は非常に容易となります。

リアルタイム性が求められるアプリケーションは負荷が大きいので管理や運用が大変ですが、その部分をサーバーレスのサービスに任せてしまえば運用するエンジニアの負担も減り幸せな運用体制が実現できます。積極的に使っていきたいですね。

このブログでは、AWS の記事をどんどん公開しておりますので、ご興味のある方は他の記事もご覧いただければと思います。

AWS に関する開発は、お気軽にお問い合わせください。