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.

[AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所

767 views

Published on

SQL DatabaseやCortanaなどの基盤としても活用されているService Fabric。なんとなく便利そうだけど、新しく覚えることも多いし、日本国内ではなかなか実活用まで至らないことも多いのではないでしょうか。
一方、米国では多くの企業がService Fabricを基盤としたソリューションの提供を始めています。そこで私は米国MS本社に滞在して複数案件に携わることでService Fabricを使う上で覚えておくべき開発手法やアーキテクチャ、実際に活用する時のハマりどころや注意点を理解することができました。このセッションではそんな私の実体験を紹介させていただきます。

受講対象: マイクロサービスに興味がある方は是非ご参加ください。

井上 大輔
日本マイクロソフト株式会社
デベロッパー エバンジェリズム統括本部
テクニカル エバンジェリスト

Published in: Technology
  • Login to see the comments

[AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所

  1. 1. https://www.facebook.com/daisukei777/ https://twitter.com/daisukei777/ https://github.com/daisukei777/
  2. 2. • Rolling Upgrades • Availability Guarantees • Scale Out Architecture • Resource Governance • Density • Packaging & Deployment • Policy Enforcement • Granular Versioning • Stateful Workloads • Leader Election
  3. 3. • Rolling Upgrades • Availability Guarantees • Scale Out Architecture • Resource Governance • Density • Packaging & Deployment • Policy Enforcement • Granular Versioning • Stateful Workloads • Leader Election • Mesos • Kubernetes • Zookeeper • Redis • Raven • Yarn • Fleet • Containers ?
  4. 4. • Rolling Upgrades • Availability Guarantees • Scale Out Architecture • Resource Governance • Density • Packaging & Deployment • Policy Enforcement • Granular Versioning • Stateful Workloads • Leader Election Service Fabric
  5. 5. App1 App2 Orchestration - Deployments App Type Packages Service Fabric Cluster VMs (VMSS) Windows Server / Linux のクラスタ構築が可能
  6. 6. App1 App2 Orchestration - Failures App Type Packages Service Fabric Cluster VMs (VMSS)
  7. 7. App1 App2 Orchestration - Capacity App Type Packages Service Fabric Cluster VMs (VMSS)
  8. 8. App1 App2 Orchestration - Balancing App Type Packages Service Fabric Cluster VMs (VMSS)
  9. 9. App1 App2 Orchestration – Scale-out Service App Type Packages Service Fabric Cluster VMs (VMSS)
  10. 10. App1 App2 Orchestration – Scale-out Cluster App Type Packages Service Fabric Cluster VMs (VMSS)
  11. 11. UD3 UD2 UD1 App1 App2 Orchestration - Upgrade App Type Packages Service Fabric Cluster VMs (VMSS) App2.1 ※ 2017/07に VMSS が自動パッチ( Windows Update )機能を提供予定
  12. 12. Demo "capacities": { "MemoryMB": "6144", "DiskMB": "90000", "CPU": "100", “WorkUnits": "100", }, ARMテンプレートに設定
  13. 13. Azure Other CloudsOn Premise Azure Service Fabric Any OS, Any Cloud Dev Box Service Fabric on Linux in Azure Preview Service Fabric for Linux Coming 2017 Service Fabric Windows SDK Available Service Fabric on Windows in Azure Available Service Fabric in Azure Stack GA Coming 2017 Service Fabric for Windows Server Available Service Fabric on Linux in Azure Available Preview FREE*!!!!
  14. 14. Service Fabric 活用の対象 ゲート ウエイ Partner A LogicWeb 注文管理 顧客管理(分析) Cache ショッピングカート Partner B Partner X 商品管理 Cache パートナーの商品
  15. 15. ゲートウェイ Azure Load Balancer Azure API Management IoT Hub Event Hub 主な用途 Webアプリ サービス 連携 IoT IoT Azure におけるゲートウェイの選択肢
  16. 16. Service Fabric 活用の対象 ゲート ウエイ Partner A LogicWeb 注文管理 顧客管理(分析) Cache ショッピングカート Partner B Partner X 商品管理 Cache パートナーの商品
  17. 17. ここを見つける
  18. 18. ビジネス課題、組織構造や性能要求、サービスの規模に依存するのでArtであって Scienceではない。ただしIndeicatorとして、サービスが小さすぎると、いろいろなところ からデータを集めてくることになるので利用するが側のサービスはデータをキャッシュをし たくなる、一方、サービスが大きくなりすぎてデータを大量に持ってしまうと、それを使う 側はパフォーマンスなどを考慮して自分が使いたいデータだけ切り出してキャッシュしたく なる。このようなことが多くなるとシステムが複雑になるのでサービスの切り方を検討した ほうがよい。De:codeでは関連セッションがあるのでそちらも参考にしていただきたい。 なおマイクロサービス化すると操作の履歴管理が煩雑になるが、Service Fabricでは ActitvityIDで誰がどの操作を行ったかトラッキングする仕組みになっている。 別セッションを参考のこと
  19. 19. Service Fabric 活用の対象 Partner A LogicWeb 注文管理 顧客管理(分析) Cache ショッピングカート Partner B Partner X 商品管理 Cache パートナーの商品
  20. 20. Service Fabric 活用の対象 Partner A LogicWeb Cache ショッピングカート Partner B Partner X Cache パートナーの商品 注文管理 顧客管理 (分析) 商品管理
  21. 21. Service Fabric Programming Model
  22. 22. Full .NET Framework Any language
  23. 23. Java, .NET Core Any language Docker Compose (Preview)をサポート
  24. 24. .NET Core, Full .NET, Java Any language
  25. 25. Logic Stateless Web Stateless Cache 一般的な サービス Queue Logic Stateful Web StatelessStateful サービス
  26. 26. Node 1 Node 2 Node 3 コピー コピー IReliableDictionary<K,V> IReliableQueue<T>
  27. 27. .NET collection は references を持つが Reliable Collection は objects を持つ 正常終了 using (ITransaction tx = StateManager.CreateTransaction()) { user1.LastLogin = DateTime.UtcNow; await m_dic.AddAsync(tx, name, user1); await tx.CommitAsync(); } 実行時エラー using (ITransaction tx = StateManager.CreateTransaction()) { await m_dic.AddAsync(tx, name, user1); user1.LastLogin = DateTime.UtcNow; // Corruption! await tx.CommitAsync(); }
  28. 28. 正常終了 using (ITransaction tx = StateManager.CreateTransaction()) { ConditionalValue<User> currentUser = await m_dic.TryGetValueAsync(tx, name); if (currentUser.HasValue) { User updatedUser = new User(currentUser); updatedUser.LastLogin = DateTime.UtcNow; await m_dic.SetValue(tx, name, updatedUser); await tx.CommitAsync(); オブジェクトを Reliable Collection に指定した後は変更不可 実行時エラー using (ITransaction tx = StateManager.CreateTransaction()) { ConditionalValue<User> user = await m_dic.TryGetValueAsync(tx, name); if (user.HasValue) { user.Value.LastLogin = DateTime.UtcNow; // Corruption! await tx.CommitAsync();
  29. 29. Node 5Node 4Node 3 Node 6Node 2Node 1 P2 S S S P4 S P1 S P3S S S
  30. 30. CreateServiceReplicaListeners Node 1 Node 2 Node 3 コピー コピー
  31. 31. Production Cluster V1V1 V1V1 V1V1 V2V2 V2V2 V2V2 Production Cluster V1V1 V1V1 V1V1 V2V2 V2V2 V2V2 クラスタを削除した場合や新しく作成した場合 既存の Reliable Collection は保持されない LB Staging Cluster V2V2 V2V2 V2V2 Production Cluster V1V1 V1V1 V1V1 Blue-Green Deployment
  32. 32. バックアップ(増分) BackupDescription myBackupDescription = new BackupDescription(backupOption.Incremental,this.BackupCallbackAsync); await this.BackupAsync(myBackupDescription); リストア 完全と増分の2つをサポート RestoreContext restoreCtx = New RestoreContext (……); var backupFolder = await this.externalBackupStore.DownloadLastBackupAsync(cancellationToken); var restoreDescription = new RestoreDescription(backupFolder); await restoreCtx.RestoreAsync(restoreDescription);
  33. 33. Service Fabric 活用の対象 Partner A LogicWeb Cache ショッピングカート Partner B Partner X Cache パートナーの商品 注文管理 顧客管理 (分析) 商品管理
  34. 34. Service Fabric Partner A Web Partner B Partner X 注文管理 顧客管理 (分析) 商品管理 ショッピング カート パートナー商品 Stateful Stateless
  35. 35. ASP.Core とサポート対象の Web サーバー WebListener (Windows での推奨) (Web API 2 only) 現時点では未サポート) ASP.NET や IIS は未サポートなのでアプリの修正が必要
  36. 36. Service Fabric Partner A Web Partner B Partner X 注文管理 顧客管理 (分析) 商品管理 ショッピング カート パートナー商品 Stateful Stateless Web (Container) ASP.NET Core : アプリケーションの新規作成 Container : 既存アプリの移行
  37. 37. サービス間の通信 Stateful, Stateless, Container Azure Service Fabric はサービス間の通信にまったく依存しません。 UDP から HTTP まで、あらゆるプロトコルとスタックに対応します。
  38. 38. サービスは論理構成なのでアドレスは持たない Node 3 10.0.0.3 Node 4 10.0.0.4 Node 1 10.0.0.1 Replica Node 2 10.0.0.2 Node 5 10.0.0.5 Replica Replica ReplicaReplica Replica Replica Replica Replica Replica
  39. 39. Service Registry / Service Discovery farbric://OnlineShopping/Product Naming Service farbric://OnlineShopping/Product http://10.0.0.1:8081/api/ ①私のアドレスを登録してください http://10.0.0.1:8081/api/ farbric://OnlineShopping/Order ②farbric://OnlineShopping/Product のアドレスをください。 http://10.0.0.1:8081/api/ ③ http://10.0.0.1:8081/api/ に接続
  40. 40. protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() { return new List<ServiceReplicaListener>() { new ServiceReplicaListener(context => this.CreateServiceRemotingListener(context), "RpcOnlienShoppingProduct", true) // 読み取り可能セカンダリの設定 }; } Reliable Services でサービスのエンドポイントを公開
  41. 41. 特定のプロトコルが決まってない場合は ServiceProxy が便利 IMyService ProductClient = ServiceProxy.Create<IMyService>(new Uri("farbric://OnlineShopping/Product”) ); string message = await Product.getProdcts(); サービス アドレスの解決、接続、再試行、エラー処理などの機能が含まれる。
  42. 42. Service Fabric cluster Web (Container) 注文管理 ショッピング カート
  43. 43. 全ノードで実行されクライアント要求を適切なサービスに転送 farbric://OnlineShopping/Web Node 1 Reverse Proxy ①http://localhost:19008/OnlineShopping/Product Node 2 farbric://OnlineShopping/ Product http://10.0.0.1:8081/api/ ②リクエストを適切なサービスに転送 ※アプリ名/サービス名を指定
  44. 44. Service Fabric cluster Web (Container) Reverse Proxy 注文管理 ショッピング カート
  45. 45. 既存技術をそのまま活用可能 farbric://OnlineShopping/Product DNS farbric://OnlineShopping/ Product web.onlineshopping ①私のアドレス( http://10.0.0.1:8081/api/ )と DNS名(web.onlineshopping)を登録してください farbric://OnlineShopping/Web ②web.onlineshopping のアドレスをください。 http://10.0.0.1:8081/api/ ③ http://10.0.0.1:8081/api/ に接続 Naming Service
  46. 46. Service Fabric Partner A Web Partner B Partner X 注文管理 顧客管理 (分析) 商品管理 ショッピング カート 商品カタログ Stateful Stateless Web (Container) Deployment Rolling Upgrade リソース管理 フェールオーバー ※ ASP.NET Core : アプリケーションの新規作成 Container : 既存アプリの移行は
  47. 47. セッションアンケートにご協力ください  専用アプリからご回答いただけます。 decode 2017  スケジュールビルダーで受講セッションを 登録後、アンケート画面からご回答ください。  アンケートの回答時間はたったの 15 秒です!
  48. 48. Ask the Speaker のご案内 本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにて ご説明させていただきます。是非、お立ち寄りください。
  49. 49. © 2017 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
  50. 50. パラメータ 意味 http (s) HTTP または HTTPS トラフィックを受け入れる Cluster FQDN (完全修飾 ドメイン名) | internal IP 外部クライアントからFQDNで Reverse Proxy にアクセス可能(VPN必須) Port: リバースプロキシのポート(Default:19008) ServiceInstanceName: サービス インスタンスの完全修飾名 Suffix path: 接続先となるサービスの実際の URL パス PartitionKey: パーティション分割されたサービスの場合のパーティション キー PartitionKind: サービス パーティション構成。、“Int64Range” または “Named” を指定。 ListenerName サービスが複数のエンドポイントを公開している場合に転送先を特定 TargetReplicaSelector ターゲット レプリカまたはインスタンスの選択方法を指定。 "PrimaryReplica"、"RandomSecondaryReplica"、"RandomReplica" Timeout リバース プロキシによって作成される、サービスに対する HTTP 要求のタイムア ウト。既定値は 60 秒
  51. 51. VM コンテナ / Service Fabric 低密度 高い密度

×