做者:张鼎松 (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”。扩展
2. 建立Named Application高可用
对于建立的这个Named Application “faric:/A1”, Service Fabric提供三种方式对其进行管理:service
3. 建立Named Service
咱们但愿S1有一个分区,三个Instance. S2有2个分区,2个Instance.
咱们看到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上,以保证能够给用户高可用性的体验。
咱们继续建立另外一个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上)
而后继续将 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上。
到此为止,Service Fabric就完成了S1 和S2的部署。