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

做者:张鼎松 (Dingsong Zhang) @ Microsoft设计

 

在上一节的结尾简单介绍了Service Fabric中分区Partitions和复制replicas的概念,本节主要以示例的形式来具体说明这个抽象概念在Service Fabric中的工做方式。blog

 

1. 分区Partitions和复制replicas部署

一个service能够包含多个分区Partition,Service Fabric经过使用分区做为扩展的机制来将工做分布到不一样的service实例上。get

一个分区Partition能够包含一个或者多个复制replicas。Service Fabric经过使用复制来实现可用性。一个分区能够有一个主复制和多个从复制,多个复制之间的状态能够自动同步。当主复制出现错误时,其中一个从复制被自动提高为主复制,以保证系统的可用性。而后将从复制的个数恢复到正常水平,保证足够的从复制冗余。同步

 

(Note: 下文中出现的全部Instance 跟Replica是同一个意思)it

以下图示例,咱们假设一个有一个Cluster中有5个Node, 如今咱们要在Cluster上部署一个Application, 这个Application包含两个Service。 Application Type为“A”,Service Type为“S”。io

首先咱们要建立一个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提供三种方式对其进行管理:service

  • 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的部署。

相关文章
相关标签/搜索