[AC07]...

66
https://www.facebook.com/daisukei777/ https://twitter.com/daisukei777/ https://github.com/daisukei777/

Transcript of [AC07]...

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

https://www.facebook.com/daisukei777/

https://twitter.com/daisukei777/

https://github.com/daisukei777/

Page 2: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 3: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 4: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 5: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 6: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 7: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 8: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 9: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
Page 10: [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所

• Rolling Upgrades• Availability Guarantees• Scale Out Architecture• Resource Governance• Density• Packaging &

Deployment• Policy Enforcement• Granular Versioning• Stateful Workloads• Leader Election

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

• 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

?

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

• Rolling Upgrades• Availability Guarantees• Scale Out Architecture• Resource Governance• Density• Packaging & Deployment• Policy Enforcement• Granular Versioning• Stateful Workloads• Leader Election

Service Fabric

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

App1 App2

Orchestration - Deployments

App Type Packages

Service Fabric Cluster VMs (VMSS)

Windows Server / Linux のクラスタ構築が可能

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

App1 App2

Orchestration - Failures

App Type Packages Service Fabric Cluster VMs (VMSS)

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

App1 App2

Orchestration - Capacity

App Type Packages Service Fabric Cluster VMs (VMSS)

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

App1 App2

Orchestration - Balancing

App Type Packages Service Fabric Cluster VMs (VMSS)

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

App1 App2

Orchestration – Scale-out Service

App Type Packages Service Fabric Cluster VMs (VMSS)

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

App1 App2

Orchestration – Scale-out Cluster

App Type PackagesService Fabric Cluster VMs (VMSS)

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

UD3

UD2

UD1

App1 App2

Orchestration - Upgrade

App Type Packages Service Fabric Cluster VMs (VMSS)

App2.1

※ 2017/07に VMSS が自動パッチ( Windows Update )機能を提供予定

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

Demo

"capacities": {"MemoryMB": "6144","DiskMB": "90000","CPU": "100",“WorkUnits": "100",

},

ARMテンプレートに設定

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

Azure Other CloudsOn Premise

Azure Service FabricAny 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 GAComing 2017

Service Fabric for Windows Server

Available

Service Fabric on Linux in Azure

Available Preview

FREE*!!!!

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

Service Fabric 活用の対象

ゲートウエイ

Partner ALogicWeb

注文管理顧客管理(分析)

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

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

ゲートウェイ

Azure LoadBalancer

Azure API Management

IoT Hub Event Hub

主な用途 Webアプリ サービス連携 IoT IoT

Azure におけるゲートウェイの選択肢

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

Service Fabric 活用の対象

ゲートウエイ

Partner ALogicWeb

注文管理顧客管理(分析)

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

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

ここを見つける

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

ビジネス課題、組織構造や性能要求、サービスの規模に依存するのでArtであってScienceではない。ただしIndeicatorとして、サービスが小さすぎると、いろいろなところからデータを集めてくることになるので利用するが側のサービスはデータをキャッシュをしたくなる、一方、サービスが大きくなりすぎてデータを大量に持ってしまうと、それを使う側はパフォーマンスなどを考慮して自分が使いたいデータだけ切り出してキャッシュしたくなる。このようなことが多くなるとシステムが複雑になるのでサービスの切り方を検討したほうがよい。De:codeでは関連セッションがあるのでそちらも参考にしていただきたい。なおマイクロサービス化すると操作の履歴管理が煩雑になるが、Service FabricではActitvityIDで誰がどの操作を行ったかトラッキングする仕組みになっている。

別セッションを参考のこと

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

Service Fabric 活用の対象

Partner ALogicWeb

注文管理顧客管理(分析)

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

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

Service Fabric 活用の対象

Partner ALogicWeb

Cach

eショッピングカート

Partner B

Partner X

Cacheパートナーの商品

注文管理

顧客管理(分析)

商品管理

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

Service FabricProgramming Model

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

Full .NET Framework Any language

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

Java, .NET Core Any language

Docker Compose (Preview)をサポート

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

.NET Core, Full .NET, Java Any language

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

LogicStateless

WebStateless

Cach

e

一般的なサービス

Queue

LogicStateful

WebStatelessStateful

サービス

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

Node 1 Node 2 Node 3コピー コピー

IReliableDictionary<K,V> IReliableQueue<T>

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

.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(); }

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

正常終了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();

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

Node 5Node 4Node 3 Node 6Node 2Node 1

P2

S

SS

P4SP1

SP3SS

S

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

CreateServiceReplicaListeners

Node 1 Node 2 Node 3コピー コピー

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

ProductionCluster

V1V1

V1V1

V1V1

V2V2

V2V2

V2V2

ProductionCluster

V1V1

V1V1

V1V1

V2V2

V2V2

V2V2

クラスタを削除した場合や新しく作成した場合既存の Reliable Collection は保持されない

LB

StagingCluster

V2V2

V2V2

V2V2

ProductionCluster

V1V1

V1V1

V1V1

Blue-Green Deployment

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

バックアップ(増分)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);

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

Service Fabric 活用の対象

Partner ALogicWeb

Cach

eショッピングカート

Partner B

Partner X

Cacheパートナーの商品

注文管理

顧客管理(分析)

商品管理

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

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

商品管理ショッピングカート パートナー商品

Stateful

Stateless

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

ASP.Core とサポート対象の Web サーバー

WebListener (Windows での推奨)

(Web API 2 only)

現時点では未サポート)

ASP.NET や IIS は未サポートなのでアプリの修正が必要

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

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

商品管理ショッピングカート パートナー商品

Stateful

Stateless

Web(Container)

ASP.NET Core : アプリケーションの新規作成Container : 既存アプリの移行

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

サービス間の通信Stateful, Stateless, Container

Azure Service Fabric はサービス間の通信にまったく依存しません。UDP から HTTP まで、あらゆるプロトコルとスタックに対応します。

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

サービスは論理構成なのでアドレスは持たない

Node 310.0.0.3

Node 410.0.0.4

Node 110.0.0.1

Replica

Node 210.0.0.2

Node 510.0.0.5

Replica Replica ReplicaReplica

Replica Replica Replica Replica Replica

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

Service Registry / Service Discovery

farbric://OnlineShopping/Product

Naming Servicefarbric://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/ に接続

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

protected override IEnumerable<ServiceReplicaListener>CreateServiceReplicaListeners()

{return new List<ServiceReplicaListener>(){

new ServiceReplicaListener(context =>this.CreateServiceRemotingListener(context),"RpcOnlienShoppingProduct",true) // 読み取り可能セカンダリの設定

};}

Reliable Services でサービスのエンドポイントを公開

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

特定のプロトコルが決まってない場合は ServiceProxy が便利

IMyService ProductClient =ServiceProxy.Create<IMyService>(new

Uri("farbric://OnlineShopping/Product”));

string message = await Product.getProdcts();

サービス アドレスの解決、接続、再試行、エラー処理などの機能が含まれる。

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

Service Fabric cluster

Web(Container)

注文管理ショッピングカート

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

全ノードで実行されクライアント要求を適切なサービスに転送

farbric://OnlineShopping/Web

Node 1

Reverse Proxy

①http://localhost:19008/OnlineShopping/Product

Node 2

farbric://OnlineShopping/Product

http://10.0.0.1:8081/api/

②リクエストを適切なサービスに転送

※アプリ名/サービス名を指定

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

Service Fabric cluster

Web(Container)

Reverse Proxy

注文管理ショッピングカート

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

既存技術をそのまま活用可能

farbric://OnlineShopping/Product

DNSfarbric://OnlineShopping/

Productweb.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

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

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

商品管理ショッピングカート 商品カタログ

Stateful

Stateless

Web(Container)

Deployment Rolling Upgradeリソース管理フェールオーバー

※ ASP.NET Core : アプリケーションの新規作成Container : 既存アプリの移行は

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

セッションアンケートにご協力ください

専用アプリからご回答いただけます。

decode 2017

スケジュールビルダーで受講セッションを登録後、アンケート画面からご回答ください。

アンケートの回答時間はたったの 15 秒です!

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

Ask the Speaker のご案内本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにてご説明させていただきます。是非、お立ち寄りください。

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

© 2017 Microsoft Corporation. All rights reserved.

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

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

パラメータ 意味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 秒

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

VM コンテナ / Service Fabric

低密度 高い密度

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