zoukankan      html  css  js  c++  java
  • 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的部署。

  • 相关阅读:
    Revit 二次开发 几何
    Revit 二次开发 元素过滤练习
    Revit 二次开发 图元过滤
    Revit 二次开发 图元与参数
    扩展Revit的方式
    Revit API二次开发入门,完整学习流程,附源码
    Revit 二次开发学习视频
    在lldb调试中调用c++函数
    在lldb调试中调用c++函数
    lldb调试使用python脚本问题总结
  • 原文地址:https://www.cnblogs.com/mschiefevangelist/p/6416363.html
Copyright © 2011-2022 走看看