作者:张鼎松 (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”。

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.

我们看到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的部署。

Service Fabric基本概念:Partition/Replicas示例的更多相关文章

  1. Service Fabric基本概念: Node, Application, Service, Partition/Replicas

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...

  2. 拥抱Service Fabric —— 目录

    理解分布式 经典分布式系统设计 云时代分布式系统演进 Service Fabric基础概念 Node, Application, Service, Partition/Replicas Partiti ...

  3. 微服务框架之微软Service Fabric

    常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...

  4. 转:微服务框架之微软Service Fabric

    常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...

  5. Service Fabric —— Stateful Service 概念

    作者:潘罡 (Van Pan) @ Microsoft 上节中我们谈到了Service Fabric最底层的两个概念,一个是针对硬件层面而言的Node Type和Node.另一个是Applicatio ...

  6. Service Fabric —— Actor / Stateless Service 概念

    作者:潘罡 (Van Pan) @ Microsoft 上一节我们谈到了Stateful Service.在Service Fabric中,Stateful Service是理解Micro Servi ...

  7. service fabric docker 安装

    1. 镜像拉取 docker pull microsoft/service-fabric-onebox 2. 配置docker(daemon.json) { "ipv6": tru ...

  8. 【Azure微服务 Service Fabric 】使用az命令创建Service Fabric集群

    问题描述 在使用Service Fabric的快速入门文档: 将 Windows 容器部署到 Service Fabric. 其中在创建Service Fabric时候,示例代码中使用的是PowerS ...

  9. How to deploy JAVA Application on Azure Service Fabric

    At this moment, Azure Service Fabric does not support JAVA application natively (but it's on the sup ...

随机推荐

  1. LIFI热火下的VLC基本链路、标准及发展问题

    和白炽及荧光灯相比,白光发光二极管(LED)具有寿命长.光效高.功耗低.无辐射.安全性好.可靠性高等特点,被称为"绿色照明"并得到迅猛发展.白光LED在未来市场极具竞争力.世界范围 ...

  2. Notes of Daily Scrum Meeting(11.6 and 11.7)

    Notes of Daily Scrum Meeting(11.6 and 11.7) 因为七号星期五是放假的第一天,好几名队员要么是出去玩,要么是回家了,所以我们讨论之后在七号没有开始代码的编写, ...

  3. 文件上传到tomcat服务器 commons-fileupload的详细介绍与使用

    三个类:DiskFileUpload.FileItem和FileUploadException.这三个类全部位于org.apache.commons.fileupload包中. 首先需要说明一下for ...

  4. wcf服务查看工具

    文章:接口测试工具soapUI(一) 文章:VS自带WCF测试客户端简单介绍

  5. python learning1.py

    # 廖雪峰的官方网站 python教材 1~4章 # 格式控制符语法 print('Hello, %s' % 'world') print('hello, %s, you have %d dollar ...

  6. Unity3D游戏开发——收集当前关卡游戏中分散的物件

    运用场景 许多游戏中会有一些供玩家拾起的物件,例如装备.血包.道具等.当玩家与物件进行碰撞后,则会进入仓库. 本篇介绍了简单的碰撞过程. 原理 基本的碰撞机制,用到OnTriggerEnter()碰撞 ...

  7. 蜗牛慢慢爬 LeetCode 11. Container With Most Water [Difficulty: Medium]

    题目 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...

  8. apache +PHP多版本 切换的问题

    在开发中切换php版本的时候出错 经过2小时的日子排查终于找到是因为切换版本后加载的php7ts.dll模块还是原来版本的,因此保pid file 错误 解决方法 PHPIniDir "H: ...

  9. Ubuntu 12.04下LAMP环境搭建实录

    方法一: 用tasksel可以方便安装dns server, lamp, kubuntu desktop, ubuntu desktop, xubuntu之类的软件包.这个软件在ubuntu serv ...

  10. ldap禁止匿名用户登录

    此处默认ldap已经安装完成,安装文档传送门:https://www.cnblogs.com/crysmile/p/9470508.html openldap默认安装完成,是允许匿名用户登录的,因此需 ...