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”。
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示例的更多相关文章
- Service Fabric基本概念: Node, Application, Service, Partition/Replicas
作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...
- 拥抱Service Fabric —— 目录
理解分布式 经典分布式系统设计 云时代分布式系统演进 Service Fabric基础概念 Node, Application, Service, Partition/Replicas Partiti ...
- 微服务框架之微软Service Fabric
常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...
- 转:微服务框架之微软Service Fabric
常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...
- Service Fabric —— Stateful Service 概念
作者:潘罡 (Van Pan) @ Microsoft 上节中我们谈到了Service Fabric最底层的两个概念,一个是针对硬件层面而言的Node Type和Node.另一个是Applicatio ...
- Service Fabric —— Actor / Stateless Service 概念
作者:潘罡 (Van Pan) @ Microsoft 上一节我们谈到了Stateful Service.在Service Fabric中,Stateful Service是理解Micro Servi ...
- service fabric docker 安装
1. 镜像拉取 docker pull microsoft/service-fabric-onebox 2. 配置docker(daemon.json) { "ipv6": tru ...
- 【Azure微服务 Service Fabric 】使用az命令创建Service Fabric集群
问题描述 在使用Service Fabric的快速入门文档: 将 Windows 容器部署到 Service Fabric. 其中在创建Service Fabric时候,示例代码中使用的是PowerS ...
- 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 ...
随机推荐
- ORM PHP 学习记录
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...
- 结对项目:SudokuGame
1. Github项目地址:https://github.com/ZiJiaW/SudokuGame GUI在BIN目录下的SudokuGUI.rar中,解压后打开SudokuGame.exe即可.2 ...
- 利用JAVA制作简单登录窗口
import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- Android:java.lang.OutOfMemoryError:GC overhead limit exceeded
Android编译:java.lang.OutOfMemoryError:GC overhead limit exceeded 百度好多什么JVM啊之类的东西,新手简单粗暴的办法: 1.在的Model ...
- 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" task.
在安装一个从XE6复制到XE4的控件时出现编译错误: [MSBuild Error] "0" is an invalid value for the "DebugInfo ...
- Appium 服务关键字(转)
来源: https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.cn.md#appium-服务 ...
- SQLSERVER 修改实例名以及架构信息
1. GUI的方式 后者是 alter database 的方式修改 instance的名字 2. 在全局的安全性下面创建用户. 3. 在实例的安全性下面创建架构和用户(架构名与用户名一直, 使用新实 ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
- window.location.hash 使用
[转]http://www.cnblogs.com/nifengs/p/5104763.html location是javascript里边管理地址栏的内置对象,比如location.href就管理页 ...
- nginx配置虚拟路径下载文件(.apk)
公司将安卓apk文件放到服务器上,实现用户点击链接并下载 nginx version 1.14.1 nginx配置修改 server { listen 80; server_name localhos ...