[AC07]...

Post on 21-Jan-2018

185 views 3 download

Transcript of [AC07]...

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

https://twitter.com/daisukei777/

https://github.com/daisukei777/

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

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

• 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

?

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

Service Fabric

App1 App2

Orchestration - Deployments

App Type Packages

Service Fabric Cluster VMs (VMSS)

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

App1 App2

Orchestration - Failures

App Type Packages Service Fabric Cluster VMs (VMSS)

App1 App2

Orchestration - Capacity

App Type Packages Service Fabric Cluster VMs (VMSS)

App1 App2

Orchestration - Balancing

App Type Packages Service Fabric Cluster VMs (VMSS)

App1 App2

Orchestration – Scale-out Service

App Type Packages Service Fabric Cluster VMs (VMSS)

App1 App2

Orchestration – Scale-out Cluster

App Type PackagesService Fabric Cluster VMs (VMSS)

UD3

UD2

UD1

App1 App2

Orchestration - Upgrade

App Type Packages Service Fabric Cluster VMs (VMSS)

App2.1

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

Demo

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

},

ARMテンプレートに設定

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*!!!!

Service Fabric 活用の対象

ゲートウエイ

Partner ALogicWeb

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

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

ゲートウェイ

Azure LoadBalancer

Azure API Management

IoT Hub Event Hub

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

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

Service Fabric 活用の対象

ゲートウエイ

Partner ALogicWeb

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

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

ここを見つける

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

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

Service Fabric 活用の対象

Partner ALogicWeb

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

Cach

eショッピングカート

Partner B

Partner X

商品管理

Cacheパートナーの商品

Service Fabric 活用の対象

Partner ALogicWeb

Cach

eショッピングカート

Partner B

Partner X

Cacheパートナーの商品

注文管理

顧客管理(分析)

商品管理

Service FabricProgramming Model

Full .NET Framework Any language

Java, .NET Core Any language

Docker Compose (Preview)をサポート

.NET Core, Full .NET, Java Any language

LogicStateless

WebStateless

Cach

e

一般的なサービス

Queue

LogicStateful

WebStatelessStateful

サービス

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

IReliableDictionary<K,V> IReliableQueue<T>

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

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

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

P2

S

SS

P4SP1

SP3SS

S

CreateServiceReplicaListeners

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

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

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

Service Fabric 活用の対象

Partner ALogicWeb

Cach

eショッピングカート

Partner B

Partner X

Cacheパートナーの商品

注文管理

顧客管理(分析)

商品管理

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

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

Stateful

Stateless

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

WebListener (Windows での推奨)

(Web API 2 only)

現時点では未サポート)

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

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

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

Stateful

Stateless

Web(Container)

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

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

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

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

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

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

protected override IEnumerable<ServiceReplicaListener>CreateServiceReplicaListeners()

{return new List<ServiceReplicaListener>(){

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

};}

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

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

IMyService ProductClient =ServiceProxy.Create<IMyService>(new

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

string message = await Product.getProdcts();

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

Service Fabric cluster

Web(Container)

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

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

farbric://OnlineShopping/Web

Node 1

Reverse Proxy

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

Node 2

farbric://OnlineShopping/Product

http://10.0.0.1:8081/api/

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

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

Service Fabric cluster

Web(Container)

Reverse Proxy

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

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

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

Service Fabric

Partner A

Web Partner B

Partner X

注文管理

顧客管理(分析)

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

Stateful

Stateless

Web(Container)

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

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

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

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

decode 2017

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

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

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

© 2017 Microsoft Corporation. All rights reserved.

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

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

VM コンテナ / Service Fabric

低密度 高い密度