BRK30033 サーバーレスな Azure Event Grid の紹介
CNCF
- クラウドネイティブを定義する団体
- CNCG-Serverless
- そこに属するAzure Functions
Serverlessのプラットフォームとして
Zero Server Ops
- OSアップデートなどの準備、管理コストがかからないこと
- 自動的なスケーリング
No Compute Cost When Idle
- アイドル時(処理を行っていない時)のコストは0
Azureのサーバーレスプラットフォーム(抜粋)
- Azure Functions
- Event Grid
Azure Functionsを使って単純にアプリを作ったら
- そういうことを実現しようとしたら一つのイベントで複数箇所に接続しないといけない
- コードボリュームも大きくなり、可読性、保守性が落ちる
- もしくは複数のFunctionsに接続しないといけない
- コードボリュームも大きくなり、可読性、保守性が落ちる
- 一つのFunctionsにコードが集中してしまう。
Azure Event Grid
- イベントを一元管理し、イベント処理側にルーティングする
- イベントを受けて送った先を分岐できる
- イベント受ける側は送るだけでいい
- リアルタイム、スケーラビリティ、高可用性、重量課金
- Event Gridを使うと機能別のコードボリュームは小さくなり、可読性と保守性が向上、各機能のスケーラビリティも向上
- 機能別にマイクロサービス化ができるようになる
Event Gridの設計思想
- パブリッシャーとサブスクライバーのパターン
- 再試行パターン
- 再試行ポリシーだけでは足らない場合
- 失敗した情報をBlobに突っ込んで失敗時の処理を受け取り、再試行する
- サブスクライバーごとの設定で再試行のポリシーを設定できる。エラー時ストレージにデータを送る設定ができる
クライアントフェールオーバー
- サービスは絶対落ちるときがある
- 日常生活から対策することにより問題なくなる
- 東日本と西日本のEvent Gridを用意しておく
Cache戦略やイベントソーシングの実装に
- どんなにスケールしてもDBの読み書きが遅いことがネックになる
- 変更した状態を保持することでスループットを向上させる
CloudEvents
- 言語、ベンダー固有ではなく、汎用的なメッセージ規格
- Azureでもサポートしている
- 10/24 1.0リリース
- 外部の互換性のあるメッセージに飛ばすことができる
Azure Event Grid How To
- Code SampleからEventGridを検索すると出てくる
- イベントを可視化してDebugを便利にする Azure Event Grid Viewer
- SignalRを使った完全非同期ができるようになる
イベントサブスクリプション
- イベントにサブスクライブするには証明が必要。詳しくは公式ページ