今天介绍分布式系统下的一些通用的设计策略
心跳检测
- 多个节点分担任务的运行、计算或者程序逻辑处理,需要检测一个节点出现了故障乃至无法工作
- 可使用周期检测心跳机制、累计失效检测机制
- 周期检测心跳机制:Server端每间隔t秒向Node集群发起监测请求,设定超时时间,如果超过超时时间,则判断“死亡”。这里的超时时间设置带有随意性,容易误判。进一步,可以统计实际检测Node的返回时间,包括得到一定周期内的最长时间。那么可以根据现有没有正确返回的时间在历史统计的分布中计算得到“死亡”概率,同时对于宣告濒临死亡的节点可以发起有限次数的重试,以作进一步判定。心跳检测本身也是有效资源利用和成本之间的一种权衡,如果迟迟不能判断节点是否“死亡”,会影响业务逻辑的处理
高可用设计
- 主备模式:当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动(热备)或手动(冷备)方式将服务切换到主机上运行
- 互备模式:指两台主机同时运行各自的服务工作且相互监测情况。在数据库高可用部分,常见的互备是MM模式。MM模式即Multi-Master模式,指一个系统存在多个master,每个master都具有read-write能力,需根据时间戳或业务逻辑合并版本。比如分布式版本管理系统git可以理解成multi-master模式,具备最终一致性
- 集群模式:集群模式是指有多个节点在运行,同时可以通过主控节点分担服务请求,比如zookeeper。集群模式要特别解决主控节点本身的高可用问题
容错性
- 容错的处理是保障分布式环境下相应系统的高可用或者健壮性,如缓存的雪崩问题
负载均衡
- 关键在于使用多台集群服务器共同分担计算任务,把网络请求及计算分配到集群可用服务器上去,从而达到可用性及较好的用户操作体验
- 一些策略:
- 轮询:即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器
- 最少连接:当前谁连接最少,分发给谁
- IP地址哈希:确定相同IP请求可以转发给同一个后端节点处理,以方便session保持
- 基于权重的负载均衡:配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器