Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

"サーバーレス"を超越する。なぜ?から理解する Durable Functions

1,186 views

Published on

Tech Summit 2018 Durable Functions よさを理解するための、資料です。L200 はじめての人向けになっています。

Published in: Technology
  • Be the first to comment

"サーバーレス"を超越する。なぜ?から理解する Durable Functions

  1. 1. ”サーバーレス” を超越する。 なぜ? から理解する Durable Functions 牛尾 剛 Microsoft Corporation CSE - EEST Senior Software Engineer AD10
  2. 2. Information 「Ask The Speaker」 各ブレイクアウトセッション終了後の休憩時 間に、 登壇したスピーカーに直接ご質問いただける コーナーを B2F 「Ask The Speaker」 Room に用意 しています。セッション内容のより深い理解 のため、 ぜひお役立てください。 (※ハンズオンラーニング、シアターセッション、ビジネス トラック 及び 一部のセッションを除きます) EXPO AREA 1 EXPO AREA 2 Room D
  3. 3. セッションアンケートにご協力ください。 公式イベントアプリで、「Microsoft Tech Summit 2018 参加者アンケート(必 須)」と 「各セッションアンケート( 5 つ以上)」、合わせて 6 つ以上のアンケートに ご回答ください。 もれなくオリジナルグッズを贈呈いたします。 Information Twitter のご案内 本セッションに関するご質問やご感想は、 #mstsjp18 と セッション ID の ハッシュタグで、ご投稿をお願いします。 #mstsjp18
  4. 4. medium.com@TsuyoshiUshio
  5. 5. 日本最後の講演です。
  6. 6. 人生の 99 %の問題は 筋肉ですべて解決できる
  7. 7. アジェンダ なぜ Durable Functions か? 現実世界における Durable Functions サーバーレスと、その限界 事例とTips
  8. 8. Durable Functions の良さを知って 何かを作り始めてほしい
  9. 9. Create an API #mstsjp18
  10. 10. Platform Application delivery Operating system ●●● ●●● ●●● + https://github.com/azure/azure-functions-host (+other repos) Azure Functions host runtime Azure Functions Core Tools Azure Functions base Docker image Azure Functions .NET Docker image Azure Functions Node Docker image ●●●
  11. 11. Platform Application delivery Operating system ●●● ●●● ●●● + https://github.com/azure/azure-functions-host (+other repos) Azure Functions host runtime Azure Functions Core Tools Azure Functions base Docker image Azure Functions .NET Docker image Azure Functions Node Docker image ●●● Azure Functionsはどこでも動作する
  12. 12. サーバーレスの限界 長時間の実行に制限がある 障害時の対策が面倒くさい サーバーレスは複雑になりやすい モニタリングどうするよ・・・ ・・・というわけで、単純なタスクに利用する
  13. 13. ブラウザ Proxy Blob (SPA) Upload Blob (画像) CosmosDB Create Car Review 01 Search
  14. 14. Change Feed Blob (画像) CosmosDB Car Review 02 Change Feed Check Text Text checked Rejected
  15. 15. Send event Car Review 03 Handle Reject Review
  16. 16. ややこしいね ん
  17. 17. 10分
  18. 18. 障害起こったら どうするん?
  19. 19. これは筋肉で解決できない 1%の問題
  20. 20. Durable Functions で すべてを解決
  21. 21. F1 F2 F3 F4 Function chaining パターン
  22. 22. // calls functions in sequence public static async Task<object> Run(DurableOrchestrationContext ctx) { try { var x = await ctx.CallActivityAsync<object>("F1"); var y = await ctx.CallActivityAsync<object>("F2", x); var z = await ctx.CallActivityAsync<object>("F3", y); return await ctx.CallActivityAsync<object>("F4", z); } catch (Exception) { // global error handling/compensation goes here } }
  23. 23. Durable Functions #mstsjp18
  24. 24. Durable Functions
  25. 25. 非同期の ワークフロー実行に最 適!
  26. 26. 現実世界における Durable Functions
  27. 27. Markdown Translator #mstsjp18
  28. 28. 翻訳超めんどくさい問 題
  29. 29. 普段の解法 この筋肉で 解決
  30. 30. 新しいブランチを作る MDを検索する 全ページを翻訳する APIアクセス制限 並列処理 リトライ
  31. 31. Orcehstrator ブランチ作成 MD検索 Readme.md Challenge01.md ファイル読込 翻訳 ファイル更新
  32. 32. Markdown translator deep dive
  33. 33. リトライ [FunctionName("TranslationSubOrchestrator")] public static async Task<string> TranslationSubOrchestrator( [OrchestrationTrigger] DurableOrchestrationContext context) { var translationContext = context.GetInput<TranslationOrchestrationContext>(); var retryOptions = new RetryOptions(TimeSpan.FromMinutes(1), 5); // Read Document translationContext = await context.CallActivityWithRetryAsync<TranslationOrchestrationContext>( "ReadDocument", retryOptions, translationContext); : 中略 return translationContext.Path; } •最大試行回数: 再試行が行われる最大回数。 •1 回目の再試行の間隔: 1 回目の再試行を行う前の待機時間。 •バックオフ係数: バックオフの増加率を決定するために使用される係数。 既定値は 1 です。 •最大再試行間隔: 次の再試行を実行する前に待機する最大時間。 •再試行タイムアウト: 再試行を実行するために費やす最大時間。 既定の動作は、無限の再試行 です。 •ハンドル: 関数呼び出しを再試行するかどうかを決定するユーザー定義のコールバックを指定 できます。 https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-error-handling
  34. 34. MdTranslator 結構ちゃんとつくってみた https://github.com/TsuyoshiUshio/MdTranslator
  35. 35. 分散トレーシング こうご期待
  36. 36. 富士フィルム様 Durable Functions による AI ワークフロー改善
  37. 37. 著名大学へのAzure AD B2C+LINE, Facebook/ Durable Functionsの導入事例 配送要求受付I/F 処理キュー 永続DB 受付記録を 書き込み 配送処理状況を 書き込み CTC B2C ID基盤 (Azure AD B2Cベース) 保護者ID⇒SNS ID変換 メッセージ配送システム 管理者 APIクライアント (学校側システム) 管理者 メッセージ配信状況確認 配送先 SNS IDの取得 配送先振り分け・ 配送制限件数で分割 LINEへの配送要求 FaceBookへの 配送要求 ※エラー時 リトライ ※エラー時 リトライ ※エラー時 リトライ ※エラー時 リトライ 各SNSへの 配送処理
  38. 38. ジョブスケジューラーは 不要じゃね?
  39. 39. これからつくるあなたへ Orchestrator は I/O やランダム禁止 バージョニングに注意! Storage Emulator を開発に使う 内部アーキテクチャを知ろう host.json で劇的チューニング可能
  40. 40. もっと知りたい人は Durable Functions Qiita 検索
  41. 41. Zero Downtime Deployment https://medium.com/@tsuyoshiushio/multi-tenant-zero-downtime-deployment-strategies-for-durable-functions-ac16e903d526
  42. 42. Durable Functions へのコントリビューション https://github.com/Azure/azure-functions-durable-extension
  43. 43. 関連セッション
  44. 44. Durable Functions の良さを知って 何かを作り始めてほしい
  45. 45. Durable Functions のチュートリアル ないやん・・・
  46. 46. 今回のために書きました Durable Functions の チュートリアルつくり ました
  47. 47. Durable Functions と 筋肉ですべてを解決しよう
  48. 48. © 2018 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

×