Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EventGridTopicで手軽にイベントドリブンを手に入れる

 EventGridTopicで手軽にイベントドリブンを手に入れる

Yu_ka1984

May 27, 2019
Tweet

More Decks by Yu_ka1984

Other Decks in Technology

Transcript

  1. Event Grid Topicで手軽にイ
    ベントドリブンを手に入れる
    By yuka abuno
    Serverless meetup Tokyo #12
    2019 / 05 / 27

    View Slide

  2. こんにちは、Azure地方から参りました。
    • 所属 : シグマコンサルティング株式会社
    • Twitter : @yu_ka1984
    • ブログ書いたりプログラム書いたり
    • Durable Functions Contributor
    • C#er(ただしUnityはやってない)
    • Microsoft MVP for Development Technology (Not Azure)
    • Webフロントエンド〜スマホ・デスクトップ〜バックエンド・クラウ

    View Slide

  3. 質問
    サーバレスアーキテクチャ利用してますか?

    View Slide

  4. サーバレスアーキテクチャとかイベントドリブンな開
    発凄く好きなんだけど・・・・
    でも現実ではMVCフレームワークを使ってサービス
    立ち上げることが多いよねぇ

    View Slide

  5. そんなMVCフレームワークWebアプリケーションで
    も「サーバレスアーキテクチャ」を使っていこう!!

    View Slide

  6. こんな事よくありませんか?
    • その処理の時にユーザにメール投げて欲しいんだけど。
    • その処理の時にSlackに通知して欲しいんだけど。
    • その処理の時にカスタマーサービスと連携して欲しいんだけど。
    • その処理の時にバックエンド基幹と連携して欲しいんだけど。
    • その処理の時にPDFをStorageに作成してほしいんだけど。
    • その処理の時にetc
    • その処理の
    • その

    View Slide

  7. そんなの全部実装していったら・・・・

    View Slide

  8. じゃあ、どうする?

    View Slide

  9. 諦めて同期的に実装する?
    • 気がついたらなんか重いサービス
    • 1ロジック内に色々な処理を実行 -> 耐障害性の低下(冪等性、リ
    トライ、etc

    View Slide

  10. RDBのレコードにフラグを追加して定期バッチ処理で後から実行
    • バッチ実行頻度は?(リアルタイム性)
    • 1回のバッチ実行件数は?(バッチ突き抜け問題)
    • そもそも「その処理」がRDB更新処理ではなかったら?
    • 気がついたらフラグ沢山・・・・

    View Slide

  11. メッセージングサービスを使って非同期処理
    • 「「これならいける!!」」のだけど・・・

    View Slide

  12. メッセージングサービスを使って非同期処理
    • いつのまにか、メッセージングサービスが沢山に・・・

    View Slide

  13. 運用開始後のメンテナンスとして
    何かの処理の後に何かを追加するのはよくある事。

    View Slide

  14. ならば
    始めからアプリケーション全体のアクティビティを1
    つのメッセージサービスに集約
    あとから自由にアクティビティを購読できると素敵な
    のでは?

    View Slide

  15. View Slide

  16. メッセージングサービスに欲しい性能
    • 1つのメッセージングサービスにアプリケーション全体のアク
    ティビティを集約
    • 1つのメッセージングサービスから欲しいアクティビティのみを
    購読
    • お手軽に安く。でもスケーラブルに。
    • Subscriberの自由度が欲しい。

    View Slide

  17. Azure Event Grid \ \ \ Topic / / /

    View Slide

  18. Azure Event Grid
    • イベント ベースのアーキテクチャを備えたアプリケーションを
    簡単に作成するためのサービス
    • Azureの様々なサービスをPublisherとして設定でき、必要なメッ
    セージのみをフィルタリングして購読できる
    • 購読はWebHookで受け取れる。(Push型)
    • 従量課金なサーバレスメッセージングサービス

    View Slide

  19. View Slide

  20. Azure Event Grid Topic
    • TopicエンドポイントにメッセージをHttp Postする事で独自イベ
    ントをPublishできる。
    • AzureのサービスでなくてもPublisherになれる
    • Pub/Subがプッシュ/プッシュ型
    • 通常のEvent Gridはクラウドインフラのレイヤーのイベントを取
    り扱うが、Custom Topicを使用する事でアプリケーションレイ
    ヤーのメッセージングサービスとして機能する

    View Slide

  21. メッセージの中身
    {
    "eventType" : "OrderCreate",
    "Subject" : "Order/Create/12345",
    "Data": {
    "No": 12345,
    "Date": "2019/05/27",
    "Customer": "1302834u"
    }
    }

    View Slide

  22. 購読時のフィルタリング
    • EventTypeでフィルター
    • EventTypeは複数指定可能(OR)
    • Subjectの StartWith / EndWith でフィルター可能
    • 高度なフィルタリングとして
    • EventType/Subject以外にもDataなどからフィルタリングが可
    能(And)

    View Slide

  23. SLAと料金とリトライと
    • SLA : 99.95
    • 月に500万回Publishして500万回配信した場合
    • ¥ 665.280
    • MSさんはこのサービスで儲けようとはしていない?
    • リトライ : 最大1日 / 30回 までリトライする ( WebHook )
    • 1日以上はリトライできない / 30回以上はリトライできない
    • 最終的に失敗したら?
    • デッドレターとしてAzure Storage Blobにメッセージを保存できる
    • Storage Blobへの保存をトリガーにして色々組んでおけばOK

    View Slide

  24. 悲しい部分( *´Д⊂ グスン…
    • Custom TopicへのpublishにRate Limitがある(5000/sec)
    • POST時に429が返ってくるのでリトライする
    • アプリケーションの規模が大きくなってきた時にネックにな
    る可能性がある。
    • アクティビティの種類、単位を絞る
    • より大規模に対応可能なメッセージサービスへの移行
    • Microsoftに文句を投げつける

    View Slide

  25. 開発者目線
    • アプリケーション全体の処理で同期/非同期を明確にする事でパ
    フォーマンス面の考慮や障害時の復旧処理などの設計が楽に
    • メッセージサービスが沢山にならなくて管理が楽
    • Subscriberの選択幅が広い(FunctionsだけでなくLogic Apps(ノー
    コーディングワークフロー)などが使える)
    • コードを見るだけでは、どのアクティビティに対してどの処理が
    発生するかが分からなくなりやすい
    • ドキュメント類をちゃんと書けば特に問題ない

    View Slide

  26. Event Grid Topicを使って気軽なイベントドリブンな
    開発をしましょう。

    View Slide