[レポート] Scaling .NET applications with asynchronous workflows #reinvent #XNT404

2022.12.10

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

いわさです。

YouTube で公開されている AWS re:Invent 2022 Breakout Session の Scaling .NET applications with asynchronous workflows XNT404 のセッションレポートです。

このセッションでは前半で非同期ワークフローのいくつかの設計パターンを AWS SDK for .NET を使ったデモを通して学びます。
後半では NuGet パッケージを使って OpenTelemetry を自動でセットアップし、X-Ray コンソールから可視性を確認します。

セッション概要

非同期ワークフローは、最新の.NET アプリケーションがスケーリング要件を満たすために不可欠です。
この設計は、バックエンドインフラストラクチャが現在の需要に合わせてスケールアップおよびスケールダウンする一方で、アプリケーションがユーザーに対応していることを確認するという問題を解決するのに役立ちます。
このセッションでは、.NET アプリケーションと、現在提供されている AWS .NET ライブラリとツールを中心に、Amazon SQS キューや AWS Lambda 関数などの AWS サービスを活用する方法を学びます。

スピーカー

  • Ashish Bhatia, Senior Solution Architect, AWS
  • Norm Johanson, Senior Software Developer, Amazon Web Services

レベル

400 - Expert

セッション内容

アーキテクチャーパターン

このセッションでは 3 つの設計パターンに対して、どの AWS サービスを活用するか説明し、AWS SDK for .NET を使った実装デモを行っています。

  • Asynchronous point-to-point
  • Pub/Sub
  • Asynchronous message-router

Asynchronous point-to-point

1つ目はキューを用いた Sender - Queue - Receiver のパターンが紹介されている。
疎結合を実現出来、Receiver の障害に強い

AWS でこれを実現するためには Amazon SQS を用いる。
用途にあわせたキューの種類が用意されており、デッドレターキューでエラー処理も可能。

このデモでは AWS SDK for .NET を使って、どれだけ簡単に SQS との通信を実現出来るか紹介されている。
基本的な送信・受信・削除に加えて FIFO + メッセージグループや可視性タイムアウトなどいくつかの機能もしっかり使われていて、.NET で Amaozn SQS を実装する際の参考になる。
複数のメッセージを一括処理するバッチ処理についても言及されている。

Pub/Sub

つづいて複数の Receiver で受信することが出来る、Pub/Sub。

AWS で実現するために Amazon SNS が紹介されている。
メッセージフィルター機能を使った自動振り分けも可能になる。

SDK のビルドサービスを例に後続イベントが実行されるワークフローを想定したデモになっている。
このデモではメッセージ送信からフィルタリングと、あとはメッセージ処理を .NET Lambda で実装する方法が紹介されている。

Asynchronous message-router

次はイベントバスを用いたメッセージルーティングパターン。
より Sender と Receiver が切り離されており、様々な種類・数の Receiver で処理しやすくなる。
ルーティングルールについては集中管理が出来る。

AWS で実現するためには Amazon EventBridge が紹介されている。
サードパーティー SaaS などとの統合にも利用が出来る。

このデモでは EventBridge の定義とルールを作成し、コンテンツフィルタリング機能を使いつつ、先程と同様に .NET Lambda でイベント処理を行う実装方法が紹介されている。

オブザーバビリティ

ここまでで前半の設計パターンとデモについては終わり。
残りの後半ではオブザーバビリティについて言及されている。

このセッションではカスタム .NET マイクロサービスから AWS Distro for OpenTelemetry Collector を使って AWS X-Ray に送信する方法をデモで紹介している。

AWS SDK for .NET と NuGet パッケージを使うことで AWS Distro for OpenTelemetry .NET SDK を導入し自動セットアップが可能。
そのまま X-Ray へエクスポート出来る。

NuGet パッケージを導入し、イニシャライザでミドルウェアの追加を行う。

あとはコンテナワークロードであればサイドカー、Lambda であればレイヤーを設定。

簡単に X-Ray で可視化、ドリルダウン出来ることを確認していた。

まとめ

新しいテクノロジというよりも .NET の非同期ワークフローアプリケーションの実装方法について体系的に学ぶことが出来るセッションでした。
個人的には OpenTelemetry をまだしっかりキャッチアップ出来ていなかったので、馴染みのある .NET の実装を通して学ぶことが出来たのが収穫でした。
.NET 開発者でこれからクラウドネイティブな非同期ワークフローの設計パターンについて学びたいという方にはかなりオススメのセッションです。

参考