首页 > 技术文章 > 分布式集群微服务

AiYaTou 2020-08-30 21:36 原文

分布式和集群:

分布式:将一个大的任务拆分成为,多个小的任务,有多个分布式的服务器进行完成任务。分布式任务可能问题,

分布式系统的拆分(可以按照业务链路进行拆分)。

集群:在多个服务器上部署多个相同的组件,有相同组件共同完成任务。

例子:比如计算 1个亿的数字的平方,可以采用分布式集群的解决方案。需要服务器A将1亿个数字进行划分成为多个任务,

集群(BCD)的每个具体计算服务。这样BCD之间构成集群。(A-BCD)业务处理流程是一个分布式处理方式。

涉及到的问题:集群中机器怎么进行划分任务?

集群服务器能力之间对等:按照轮训的方式

集群之间服务器能力不对等:按照权重方式(服务器的性能,服务器之间的网络不一样,所以之间需要进行权重划分)

涉及到存取数据的集群,需要保证写入数据和读取数据能够完整正确的读取到:

集群数量取模(集群的数量的增加和减少问题)

一致性Hash算法:对于集群中服务器某个特性进行Hash,映射到一整数值,对于需要存储数据的key进行hash算法,得到一个映射值,根据数据key存储在,目标小于切最近的目标及其hash值上。不能考虑不同服务器的性能问题。

固定hash槽算法:redis采用hash槽提前划分的方法,增加集群需要先进行hash槽的划分。然后对于数据key进行hash然后得到对应的存储服务器。(可以自定义设置机器hash槽的长度)

针对于分布式集群处理中需要对于数据决策?

对于无Master的分布式的集群方案,需要将消息发送到所有的集群机器上,有集群中各个机器根据自己状态,对于需要决策的数据进行通票决策,得到最终的结果。Paxos和Raft算法。进行期中一个机器进行提案,其他机器进行投票。决定数据最终解果。

对于有master主节点,首先有集群中机器选举出主节点,只能有主节点进行操作变更数据。从节点可以进行读取数据。

集群中对于同一数据进行修改需要,同一时间只能有一个操作流程对于数据进行操作。设计到分布式锁。

基于Zookeeper 是最好实现分布式锁,zookeeper的客户端curator实现分布式锁,选举,信号量,回环栅栏分布式锁。主要基于zookeeper的节点抢占创建和节点变化通知机智实现。

Redis的分布式锁,redis的客户端redisSession实现分布式锁。主要试用redis的key创建和key的过期时间。利用redis实现分布式锁,可能会与到锁超时问题。

基于数据的住建唯一性进行分布式锁,性能不是很好,容易造成持有锁的服务器宕机是失败之后。导致锁一直存在。

https://blog.csdn.net/huyaowei789/article/details/87873977

https://yq.aliyun.com/articles/674394

分布式集群中间ACP(可用性,一致性,分区容错性质):

基本不可能三个都兼顾,主要是AC或者AP实现。

分为数据的强一致性,需要在分布式集群的所有副本数据都确认完成才算完成。

最终一致性,只需要主节点副本或者一般以上确认完成,其他节点采用异步方式完成数据同步。

分布式集群中负载均衡问题:

主要采用的负载均衡算法:轮训,随机,权重,轮训+权重,随机+权重,原地址IP(对于原地址IP进行hash映射和集群数量取模得到处理服务器),最小连接数(当前服务器的连接数,处理的快,多处理),连接+权重。

分布式集群的脑裂问题:

在集群的网络环境出现问题,造成重新选举leader,集群环境中有多个leader问题。

主要解决思路,分裂出来的集群中少于一半原集群数据量的少数集群停止服务,多数据机器的继续提供服务。

脑裂问题的避免:在硬件上增加网络心跳检测,有唯一的一个Leader信息存储地方。

只有超过半数以上的投票才能成为集群的leader。

https://www.codingapi.com/

 

保证接口一致性:

   采用状态标识

   采用唯一标识(唯一标识可放在redis中)

  https://blog.csdn.net/zzti_erlie/article/details/106910362

 

 

推荐阅读