Service Fabric基本概念:Partition/Replicas示例


作者:張鼎松 (Dingsong Zhang) @ Microsoft

 

在上一節的結尾簡單介紹了Service Fabric中分區Partitions和復制replicas的概念,本節主要以示例的形式來具體說明這個抽象概念在Service Fabric中的工作方式。

 

1. 分區Partitions和復制replicas

一個service可以包含多個分區Partition,Service Fabric通過使用分區作為擴展的機制來將工作分布到不同的service實例上。

一個分區Partition可以包含一個或者多個復制replicas。Service Fabric通過使用復制來實現可用性。一個分區可以有一個主復制和多個從復制,多個復制之間的狀態可以自動同步。當主復制出現錯誤時,其中一個從復制被自動提升為主復制,以保證系統的可用性。然后將從復制的個數恢復到正常水平,保證足夠的從復制冗余。

 

(Note: 下文中出現的所有Instance 跟Replica是同一個意思)

如下圖示例,我們假設一個有一個Cluster中有5個Node, 現在我們要在Cluster上部署一個Application, 這個Application包含兩個Service。 Application Type為“A”,Service Type為“S”。

首先我們要創建一個Named Application, 按照上一節提到的Application的命名規范,我們將這個Named Application叫做“faric:/A1”。依次再創建兩個“S” type的Named Service,並將它們命名為“fabric:/A1/S1”和“fabric:/A1/S2”。

 

image

 

2. 創建Named Application

對於創建的這個Named Application “faric:/A1”, Service Fabric提供三種方式對其進行管理:

  • REST API: 可以使用REST API 通過HTTP 協議和 port 19080進行管理
  • PowerShell commands: PS Cmdlet 使用的是 TCP 協議和 port 19000進行管理
  • Fabric Client: 還可以使用 C#/VB的.Net 類庫Fabric Client, 其實內部使用的仍然是 TCP on port 19000的方式

3. 創建Named Service

我們希望S1有一個分區,三個Instance. S2有2個分區,2個Instance.

image

 

我們看到Named Service fabric:/A1/S1,按照要求我們希望設置 Partition count為 1, Instances count 為 3。 1個Partition乘以3個 Instances等於3。 (1x3=3). 所以Service Fabric會選擇Cluster中的3個Node來存放這個Named Service. 我們不需要去控制這個過程,Service Fabric會幫我們完成這個操作。

現在,S1在Cluster中的分布如下圖:

Service fabric選擇了 Node #1 #2 和 #3 給

Partition 1, Instance 1: fabric:/A1/S1, P1, I1

Partition 1, Instance 2: fabric:/A1/S1, P1, I2

Partition 1, Instance 3: fabric:/A1/S1, P1, I3

同一Partition的不同instance要分布在不同的Node上。

就是說Instance1 和Instance2永遠不可能在同一個Node上,這樣設計的原因是高可用性:當任何一個Node突然出現故障不能工作時,其他Node能夠正常提供服務。 但是如果兩個或兩個以上的Instance在同一個Node上時,這個Node出現故障,您將會失去這個Node上的所有數據。

Service Fabric 被設計成可以將 instance分散發布在不同的Nodes上,以保證可以給用戶高可用性的體驗。

 

image

我們繼續創建另一個Named Service: “fabric:/A1/S2”, Partitions count為2, Instances/Replicas count為2。  (2x2=4)

Partition 1, Instance 1: fabric:/A1/S2, P1, I1

Partition 1, Instance 2: fabric:/A1/S2, P1, I2

Partition 2, Instance 1: fabric:/A1/S2, P2, I1

Partition 2, Instance 2: fabric:/A1/S2, P2, I2

Service Fabric 會首先將Partition1 Instance1部署在 Node3上, 然后再將 Partition1 Instance2 放置在Node4上。

(Service Fabric 可以確保不同的 instances/replicas被放置部署在不同的 Nodes上)

 

image

 

然后繼續將 Partition2 Instance2 放置在Node5, Partition2 Instance1 放置在 Node4.

你會注意到 Partition1 Instance2 和 Partition2 Instance1 都在同一個 Node4上。這樣是沒有問題的,因為當 Node4出現故障時, 我們在Cluster中仍然擁有 Partition1 的一個Instance1和 Partition2的 Instance2。

Node4 is a single point of failure but for two instances of different Partitions, 我們永遠不會讓一個Partition的兩個Instance出現在同一個Node上。

 

image

 

到此為止,Service Fabric就完成了S1 和S2的部署。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM