分布式系统设计策略

分布式系统设计策略

在分布式环境下,有几个问题是普遍关心的

  • 如何检测当前节点还活着?
  • 如何保障高可用?
  • 容错处理
  • 负载均衡

心跳检测:就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为一个节点和现在的网络是良好的,但是收不到心跳也不能认为该节点就已经宣告“死亡”。此时,可以通过一些方法帮助Server做决定: 周期检测心跳机制累计失效检测机制

  • 周期检测心跳机制:Server端每间隔 t 秒向Node集群发起监测请求,设定超时时间,如果超过超时时间,则判断“死亡”。可以把该节点踢出集群
  • 累计失效检测机制:在周期检测心跳机制的基础上,统计一定周期内节点的返回情况(包括超时及正确返回),以此计算节点的“死亡”概率。另外,对于宣告“濒临死亡”的节点可以发起有限次数的重试,以作进一步判断。如果超过次数则可以把该节点踢出集群

高可用:通过设计来减少系统不能提供服务的时间,系统高可用性的常用设计模式包括三种:主备(Master-SLave)互备(Active-Active)集群(Cluster)

  • 主备模式:主备模式就是Active-Standby模式,当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动(热备)或手动(冷备)方式将服务切换到主机上运行。在数据库部分,习惯称之为MS(Master/Slave)模式,这在数据库高可用性方案中比较常用,如MySQL、Redis等就采用MS模式实现主从复制

  • 互备模式:互备模式指两台主机同时运行各自的服务工作且相互监测情况。在数据库高可用部分,常见的互备是MM(Multi-Master)模式,指一个系统存在多个master,每个master都具有read-write能力,会根据时间戳或业务逻辑合并版本

  • 集群模式:集群模式是指有多个节点在运行,同时可以通过主控节点分担服务请求。集群模式需要解决主控节点本身的高可用问题,一般采用主备模式

容错性:容错的处理是保障分布式环境下相应系统的高可用或者健壮性,一个典型的案例就是对于缓存穿透 问题的解决方案

负载均衡:其关键在于使用多台集群服务器共同分担计算任务,把网络请求及计算分配到集群可用的不同服务器节点上,从而达到高可用性及较好的用户操作体验;负载均衡器有硬件解决方案,也有软件解决方案。硬件解决方案有著名的F5,软件有LVS、HAProxy、Nginx等;
以Nginx为例,负载均衡有以下6种策略:

方式说明
轮询默认方式,每个请求会按时间顺序逐一分配到不同的后端服务器
weight权重方式,在轮询策略的基础上指定轮询的几率,权重越大,接受请求越多
ip_hash依据ip分配方式,相同的客户端的请求一直发送到相同的服务器,以保证session会话
least_conn最少连接方式,把请求转发给连接数较少的后端服务器
fair响应时间方式,按照服务器端的响应时间来分配请求,响应时间短的优先分配
url_hash依据URL分配方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器
拓展——高可用下的“脑裂问题

脑裂的说明

在高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,两个节点上的HA软件像"裂脑人"一样,“本能"地争抢"共享资源”、争起"应用服务"。就会发生严重后果

  • 共享资源被瓜分、两边"服务"都起不来了;
  • 两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。
    出现的原因
  • 高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信。
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
  • 因心跳线间连接的设备故障(网卡及交换机)。
  • 因仲裁的机器出问题(采用仲裁的方案)。
  • 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输。
  • 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
  • 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
    预防方案
  • 添加冗余的心跳线 [即冗余通信的方法]:同时用两条心跳线路 (即心跳线也HA),这样一条线路坏了,另一个还是好的,依然能传送心跳消息,尽量减少"脑裂"现象的发生几率。
  • 仲裁机制:当两个节点出现分歧时,由第3方的仲裁者决定听谁的。这个仲裁者,可能是一个锁服务,一个共享盘或者其它什么东西
  • Lease机制:颁发者发出Lease后,不管是否被接收,只要Lease不过期,颁发者都会按照协议遵守承诺
  • 隔离(Fencing)机制
    共享存储fencing:确保只有一个Master往共享存储中写数据。
    客户端fencing:确保只有一个Master可以响应客户端的请求。
    Slave fencing:确保只有一个Master可以向Slave下发命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值