摘自 《深入分布式缓存:从原理到实践》
分布式系统本质是通过低廉的硬件攒在一起以获得更好地吞吐量、性能以及可用性等。分布式系统有一些通用的设计策略,也是在分布式环境下普遍关心的几个问题:
- 如何检测你还活着?
- 如何保障高可用
- 容错处理
- 重试机制
- 负载均衡
1. 心跳检测
在分布式环境中,一般会有多个节点来分担任务的运行、计算或程序逻辑处理。通常采用 心跳检测 来判断节点是否可用。
如上图所示,Client请求Server,Server转发请求到具体的Node获取请求结果。Server需要与三个Node节点保持心跳连接,确保Node可以正常工作。
若Server没有收到Node3的心跳时,Server认为Node3失联。失联代表并不确定是否是Node3故障,有可能是Node3处于繁忙状态,导致调用检测超时;也有可能是Server与Node3之间链路出现故障或闪断。所以心跳不是万能的,收到心跳可以确认节点正常,但是收不到心跳却不能认为该节点已经宣告“死亡”。此时,可以通过一些方法帮助Server做决定:周期检测心跳机制、累计失效检测机制。
通过周期检测心跳机制、累计失效检测机制可以帮助判断节点是否“死亡”,如果判断“死亡”,可以把该节点踢出集群。
2. 高可用设计
系统高可用性的常用设计模式包括三种:主备(Master-Slave)模式、互备(Active-Active)模式和集群(Cluster)模式。
1) 主备模式
主备模式就是Active-Standby模式,当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动(热备)或手动(冷备)方式将服务切换到主机上运行。在数据库部分,习惯称之为MS模式,即Master/Slave模式,这在数据库高可用性方案中比较常用,但存在Master到Slave的数据延时风险,尤其是跨地域复制。如MySQL、Redis等就采用MS模式保证高可用。
2) 互备模式
互备模式指两台主机同时运行各自的服务工作且相互监测情况。在数据库高可用部分,常见的互备是MM模式,即Multi-Master模式,指一个系统存在多个master,每个master都具有read-write能力,需根据时间戳或业务逻辑合并版本。比如分布式版本管理系统Git,可以理解成Multi-Master的解决方案,具备最终一致性。
3) 集群模式
集群模式是指有多个节点在运行,同时可以通过主控节点分担服务请求。如Zookeeper。集群模式需要解决主控节点本身的高可用问题,一般采用主备模式。
如TFS(Taobao File System),它涉及到NameServer、DataServer两类节点。NameServer存放元数据,而具体的业务数据存放于DataServer。多个DataServer就是集群模式的运行状态,NameServer作为主控节点。为了保障NameServer的高可用,通过Heart Agent机制做心跳检测来负责NameServer的主备切换(主备模式)。
3. 容错性
容错就是IT系统对于错误的包容能力,确切地说是容故障而非错误。容错的处理是保障分布式环境下相应系统的高可用或者健壮性。
以TFS为例,TFS集群需要容错(整个集群宕掉咋办?)、NameServer需要容错、DataServer也需要容错。NameServer主要管理了DataServer和Block之间的关系。如每个DataServer拥有哪些Block,每个Block存放在哪些DataServer上等。同时,NameServer采用了主备模式,主NameServer上的操作会重放(同步)到备NameServer,如果主NameServer出现问题,可以实时切换到备NameServer。另外NameServer和DataServer之间也会有定时的心跳机制,DataServer会把自己拥有的Block发送给NameServer,NameServer会根据这些信息重建DataServer和Block的关系。
另外,缓存失效雪崩问题也可以进行一定的容错处理,提升系统健壮性。比如,我们使用缓存通常都是先检查缓存是否存在,如果存在则直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。因此,如果我们查询的某一些数据实际上不存在,就会造成每一次请求都查询DB,给数据库造成较大的压力。这种情况下,一个比较巧妙的方法是,将这个不存在的key预先设定一个值并存入缓存(过期时间不宜过长),避免大量请求透传到DB中。
4. 负载均衡
负载均衡集群:其关键在于使用多台集群服务器共同分担计算任务,把网络请求及计算分配到集群可用服务器上去,从而达到可用性及较好地用户体验。
负载均衡器有硬件解决方案,也有软件解决方案。硬件解决方案有著名的F5,软件有LVS、HAProxy、Nginx等。
以Nginx为例,负载均衡有如下几种策略:
- 轮询:即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器
- 最少链接:当前谁连接最少,分发给谁
- 基于权重:配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器
相关推荐
第 3 章 分布式系统设计的形式方法 3.1 模型的介绍 3.1.1 状态机模型 3.1.2 佩特里网 3.2 因果相关事件 3.2.1 发生在先关系 3.2.2 时空视图 3.2.3 交叉视图 3.3 全局状态 3.3.1 时空视图中的全局状态 ...
为解决大规模系统中数据处理任务重,业务种类多的难点,文章给出一种基于Compact PCI(CPCI)的分布式系统设计,实现了系统板卡间的分工协作和跨总线远程内存访问。本文提出了基于“抽屉机制”的报文存储机制和地址...
第 3 章 分布式系统设计的形式方法 3.1 模型的介绍 3.1.1 状态机模型 3.1.2 佩特里网 3.2 因果相关事件 3.2.1 发生在先关系 3.2.2 时空视图 3.2.3 交叉视图 3.3 全局状态 3.3.1 时空视图中的全局状态 ...
#资源达人分享计划#
应用多智能体系统中的一致性算法,以发电机组的增量成本和柔性负荷的增量效益作为一致性变量,设计一种用于电力系统经济调度的算法,通过分布式优化的方式求解经济调度问题。算例仿真与分析验证了所提调度策略的有效...
应用多智能体系统中的一致性算法,以发电机组的增量成本和柔性负荷的增量效益作为一致性变量,设计一种用于电力系统经济调度的算法,通过分布式优化的方式求解经济调度问题。 程序完全采用论文中的数据,对论文中的4...
#资源达人分享计划#
#资源达人分享计划#
分布式系统设计 分布式优化策略 众所周知,随着互联网数据井喷式的发展,分布式技术应运而生。分布式因其高性能、高可用、高扩展的特点,成为微服务项目的基石。本篇文章将针对分布式六大主流问题进行多方案对比...
通信费用和响应时间最短 在分布式系统中,查询代价QC= 。 I/O代价+CPU代价+通信代价 在分布式环境下,查询可分为 、 和 三种类型。 局部查询 远程查询 全局查询 分布式查询处理可以分为 、 、 和 四层。 查询分解 ...
分布式存储系统构建于大量的廉价节点之上,使得节点失效成为一种常态。为了保证数据的可靠性,系统必须具备数据容错方案。纠删码冗余方案可以在提供更低的存储开销的同时,获得和副本冗余方案相同的可靠性。但是在实际...
针对智能电网实际配电需求和分布式电源种类多样、波动性大等问题,设计与实现了一种基于分布式实时调度策略的智能电网控制系统。首先,构建了含柔性负荷的调度优化模型;然后,设计了一种考虑柔性负荷的智能电网经济...
1、 分布式系统的定义、特点及主要设计目标 2、 分布式系统透明性主要包括哪几方面 3、 策略和机制有什么不同 4、 分布式系统的可扩展性包括哪些方面 5、 集
#资源达人分享计划#
监测核动力装置的运行状态,采用模型法对不同的设备单元建立相应的模型进行故障诊断、识别,并辅以专家知识进行补充,得到故障问题的最优解,并以此为依据设计了核动力装置分布式故障诊断系统。在全范围仿真机上的测试...
供电系统设计中的重要问题。通过建立直流微电网分布式控 制策略下的统一数学模型,利用李雅普诺夫直接法研究直流 微电网大信号稳定性的参数边界条件;通过分析电流小扰动 对母线电压的影响,提出并联阻抗稳定性判定...
为了提高IMKVS的缓存性能,提出一种软件定义网络中利用IMKVS结合NFV的分布式网络负载均衡策略。该策略包含两个阶段:第一阶段设计通用的SDN负载平衡器的模块,以运行不同的负载平衡算法;第二阶段是基于IMKVS的专业...
#资源达人分享计划#
#资源达人分享计划#
#资源达人分享计划#