Post on 21-Jan-2018
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
低密度 高い密度