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を使って気軽なイベントドリブンな 開発をしましょう。