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.

Serverless の自動回復と自動化のためのアーキテクチャ

2,919 views

Published on

NoOps Meetup で発表した内容です。Serverless の自動化のためのアーキテクチャとそのコード、自動回復のためのアーキテクチャのポイント、そして分散トレーシングの実装をするとどいう言うことが起きるかという話です。

Published in: Technology
  • Be the first to comment

Serverless の自動回復と自動化のためのアーキテクチャ

  1. 1. Serverless の自動回復と 自動化のためのアーキテクチャ 牛尾 剛 Microsoft Corporation CSE - EEST Senior Software Engineer
  2. 2. medium.com@TsuyoshiUshio
  3. 3. アジェンダ 自動化のためのアーキテクチャ 自動回復のためのアーキテクチャ サーバーレスのアーキテクチャ
  4. 4. NoOpsに取り組むための 最初の一歩を始めてほしい
  5. 5. オンプレミス IaaS (一般的な) PaaS サーバレス (これも PaaS の一種/FaaS) クラウド ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 @chomado 作
  6. 6. [FunctionName("Function1")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] dynamic obj, [CosmosDB("databaseName", "collectionName",Id = "abc", ConnectionStringSetting = "SomeConnection")] dynamic input, [Queue("myqueue", Connection = "ConnectionString")] IAsyncCollector<string> outputQueue, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); var output = $"{obj.Name}: id: abc value: {input.value}"; await outputQueue.AddAsync(output); return (ActionResult)new OkObjectResult($"Hello, {obj.Name}"); }
  7. 7. 自動回復アーキテクチャの デモ Markdown Translator
  8. 8. 翻訳超めんどくさい問 題
  9. 9. 普段の解法 この筋肉で 解決
  10. 10. 新しいブランチを作る MDを検索する 全ページを翻訳する APIアクセス制限 並列処理 リトライ
  11. 11. Durable Functions
  12. 12. Orcehstrator ブランチ作成 MD検索 Readme.md Challenge01.md ファイル読込 翻訳 ファイル更新
  13. 13. 自動化のためのアーキテク チャ
  14. 14. Azure Functions のユニットテスト
  15. 15. テストピラミッド
  16. 16. ユニットテストの重要性
  17. 17. 良いユニットテストとは
  18. 18. Hexagonal Architecture Http CosmosDB Azure Search Storage Account Azure Functions Model Domain Application Layer Model
  19. 19. Hexagonal Architecture Http CosmosDB Azure Search Storage Account Azure Functions Model Domain Application Layer Model
  20. 20. Strategy for Azure Functions Model Domain Model
  21. 21. Fixture Model Domain Model
  22. 22. DI (Dependency Injection) and Wrapper
  23. 23. 3つのタイプのユニットテスト
  24. 24. テスト可能な設計のための Tips Respoitory Pattern with ASP.NET Core https://docs.microsoft.com/en-us/aspnet/core/fundamentals/repository-pattern?view=aspnetcore-2.1
  25. 25. サーバーレスの限界 長時間の実行に制限がある 障害時の対策が面倒くさい サーバーレスは複雑になりやすい モニタリングどうするよ・・・
  26. 26. ブラウザ Proxy Blob (SPA) Upload Blob (画像) CosmosDB Create Car Review 01 Search
  27. 27. Change Feed Blob (画像) CosmosDB Car Review 02 Change Feed Check Text Text checked Rejected
  28. 28. Send event Car Review 03 Handle Reject Review
  29. 29. ややこしいね ん
  30. 30. 10分
  31. 31. 障害起こったら どうするん?
  32. 32. これは筋肉で解決できない 1%の問題
  33. 33. Durable Functions で すべてを解決
  34. 34. 自動回復のためのアーキテ クチャ
  35. 35. 自動回復のためのアーキテクチャ
  36. 36. 分散トレーシング
  37. 37. 分散トレーシングの実装
  38. 38. 2つの分散トレーシングプロトコル https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/HttpCorrelationProtocol.md https://w3c.github.io/trace-context/#traceparent-field tsuyoshi ushio correlation 検索 Correlation with Activity with Application Insights (1) - (3)
  39. 39. Request Telemetry Dependency Telemetry Request Telemetry Function2 Function1 HttpRequest Queue Telemetry Id ParentId RootId Request |UEJDOAJH7eU=.3320d4ac_1. |UEJDOAJH7eU=.3320d4ac_ UEJDOAJH7eU= Dependency |UEJDOAJH7eU=.3320d4ac_1.3320d4b1_ |UEJDOAJH7eU=.3320d4ac_1. UEJDOAJH7eU= ParentId |UEJDOAJH7eU=.3320d4ac_1.3320d4b1_ Telemetr y Id ParentId RootId Request |UEJDOAJH7eU=.3320d4ac_1.3320d4 b1_3320d4b7_ |UEJDOAJH7eU=.3320d4ac_1.3320d4b1 _ UEJDOAJH7eU =
  40. 40. Request Telemetry Dependency Telemetry Orchestrator HttpRequest Request Telemetry HttpRequest Orchestrator Dependency Telemetry Queue Queue Request Telemetry Dependency Telemetry Activity Queue Telemetry TraceId SpanId ParentSpanId Request 93bd77f9142bea4aa194fc17ad673a8d 3ad91ae6deb7ff48 - Dependency 93bd77f9142bea4aa194fc17ad673a8d 3cb76023174d3342 3ad91ae6deb7ff48 Telemetry TraceId SpanId ParentSpanId Request 93bd77f9142bea4aa194fc17ad673a8d 285c9d6ec7291e45 3cb76023174d3342 Telemetry TraceId SpanId ParentSpanId Dependency 93bd77f9142bea4aa194fc17ad673a8d 20b980b04525c74f 285c9d6ec7291e4 5 Telemetry TraceId SpanId ParentSpanId Request 93bd77f9142bea4aa194fc17ad673a8d b7b5267e3136794b 285c9d6ec7291e45 Dependency 93bd77f9142bea4aa194fc17ad673a8d 228afc082cc2924c b7b5267e3136794 b
  41. 41. 分散トレーシング実装の課題
  42. 42. Scope of the Activity WebJobs.HostWebJobs.Extensions.DurableTask DurableTask AzureStorageOrchestrationService. LockNextTaskOrchestrationWorkItemAsync ProcessQueue AzureStorageOrchestrationService. CompleteTaskOrchestrationWorkItemAsync Send Queue TaskOrchestrationShim Execute Function DurableProto User Function ApplicationInsightsLogger Send RequestTemeletry TaskOrchestrationWorkItem / OrchestrationSession Activity Scope 02 Create Parameter Send Queue Receive Queue Activity Scope 01 DurableTaskExtension .OrchestrationMiddleWare Deletage to TaskOrchestrationShim ① ② ③ ④ ⑤ ⑥ Activity Scope 03
  43. 43. NoOpsにむけて 一歩を踏み出そう
  44. 44. NoOps Meetup Seattle
  45. 45. © 2018 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

×