EventGridTopicで手軽にイベントドリブンを手に入れる
by
Yu_ka1984
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Event Grid Topicで手軽にイ ベントドリブンを手に入れる By yuka abuno Serverless meetup Tokyo #12 2019 / 05 / 27
Slide 2
Slide 2 text
こんにちは、Azure地方から参りました。 • 所属 : シグマコンサルティング株式会社 • Twitter : @yu_ka1984 • ブログ書いたりプログラム書いたり • Durable Functions Contributor • C#er(ただしUnityはやってない) • Microsoft MVP for Development Technology (Not Azure) • Webフロントエンド〜スマホ・デスクトップ〜バックエンド・クラウ ド
Slide 3
Slide 3 text
質問 サーバレスアーキテクチャ利用してますか?
Slide 4
Slide 4 text
サーバレスアーキテクチャとかイベントドリブンな開 発凄く好きなんだけど・・・・ でも現実ではMVCフレームワークを使ってサービス 立ち上げることが多いよねぇ
Slide 5
Slide 5 text
そんなMVCフレームワークWebアプリケーションで も「サーバレスアーキテクチャ」を使っていこう!!
Slide 6
Slide 6 text
こんな事よくありませんか? • その処理の時にユーザにメール投げて欲しいんだけど。 • その処理の時にSlackに通知して欲しいんだけど。 • その処理の時にカスタマーサービスと連携して欲しいんだけど。 • その処理の時にバックエンド基幹と連携して欲しいんだけど。 • その処理の時にPDFをStorageに作成してほしいんだけど。 • その処理の時にetc • その処理の • その
Slide 7
Slide 7 text
そんなの全部実装していったら・・・・
Slide 8
Slide 8 text
じゃあ、どうする?
Slide 9
Slide 9 text
諦めて同期的に実装する? • 気がついたらなんか重いサービス • 1ロジック内に色々な処理を実行 -> 耐障害性の低下(冪等性、リ トライ、etc
Slide 10
Slide 10 text
RDBのレコードにフラグを追加して定期バッチ処理で後から実行 • バッチ実行頻度は?(リアルタイム性) • 1回のバッチ実行件数は?(バッチ突き抜け問題) • そもそも「その処理」がRDB更新処理ではなかったら? • 気がついたらフラグ沢山・・・・
Slide 11
Slide 11 text
メッセージングサービスを使って非同期処理 • 「「これならいける!!」」のだけど・・・
Slide 12
Slide 12 text
メッセージングサービスを使って非同期処理 • いつのまにか、メッセージングサービスが沢山に・・・
Slide 13
Slide 13 text
運用開始後のメンテナンスとして 何かの処理の後に何かを追加するのはよくある事。
Slide 14
Slide 14 text
ならば 始めからアプリケーション全体のアクティビティを1 つのメッセージサービスに集約 あとから自由にアクティビティを購読できると素敵な のでは?
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
メッセージングサービスに欲しい性能 • 1つのメッセージングサービスにアプリケーション全体のアク ティビティを集約 • 1つのメッセージングサービスから欲しいアクティビティのみを 購読 • お手軽に安く。でもスケーラブルに。 • Subscriberの自由度が欲しい。
Slide 17
Slide 17 text
Azure Event Grid \ \ \ Topic / / /
Slide 18
Slide 18 text
Azure Event Grid • イベント ベースのアーキテクチャを備えたアプリケーションを 簡単に作成するためのサービス • Azureの様々なサービスをPublisherとして設定でき、必要なメッ セージのみをフィルタリングして購読できる • 購読はWebHookで受け取れる。(Push型) • 従量課金なサーバレスメッセージングサービス
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
Azure Event Grid Topic • TopicエンドポイントにメッセージをHttp Postする事で独自イベ ントをPublishできる。 • AzureのサービスでなくてもPublisherになれる • Pub/Subがプッシュ/プッシュ型 • 通常のEvent Gridはクラウドインフラのレイヤーのイベントを取 り扱うが、Custom Topicを使用する事でアプリケーションレイ ヤーのメッセージングサービスとして機能する
Slide 21
Slide 21 text
メッセージの中身 { "eventType" : "OrderCreate", "Subject" : "Order/Create/12345", "Data": { "No": 12345, "Date": "2019/05/27", "Customer": "1302834u" } }
Slide 22
Slide 22 text
購読時のフィルタリング • EventTypeでフィルター • EventTypeは複数指定可能(OR) • Subjectの StartWith / EndWith でフィルター可能 • 高度なフィルタリングとして • EventType/Subject以外にもDataなどからフィルタリングが可 能(And)
Slide 23
Slide 23 text
SLAと料金とリトライと • SLA : 99.95 • 月に500万回Publishして500万回配信した場合 • ¥ 665.280 • MSさんはこのサービスで儲けようとはしていない? • リトライ : 最大1日 / 30回 までリトライする ( WebHook ) • 1日以上はリトライできない / 30回以上はリトライできない • 最終的に失敗したら? • デッドレターとしてAzure Storage Blobにメッセージを保存できる • Storage Blobへの保存をトリガーにして色々組んでおけばOK
Slide 24
Slide 24 text
悲しい部分( *´Д⊂ グスン… • Custom TopicへのpublishにRate Limitがある(5000/sec) • POST時に429が返ってくるのでリトライする • アプリケーションの規模が大きくなってきた時にネックにな る可能性がある。 • アクティビティの種類、単位を絞る • より大規模に対応可能なメッセージサービスへの移行 • Microsoftに文句を投げつける
Slide 25
Slide 25 text
開発者目線 • アプリケーション全体の処理で同期/非同期を明確にする事でパ フォーマンス面の考慮や障害時の復旧処理などの設計が楽に • メッセージサービスが沢山にならなくて管理が楽 • Subscriberの選択幅が広い(FunctionsだけでなくLogic Apps(ノー コーディングワークフロー)などが使える) • コードを見るだけでは、どのアクティビティに対してどの処理が 発生するかが分からなくなりやすい • ドキュメント類をちゃんと書けば特に問題ない
Slide 26
Slide 26 text
Event Grid Topicを使って気軽なイベントドリブンな 開発をしましょう。