前言
根据CAP理论,分布式环境系统需要尽量保证C 一致性 A 可用性 P 容错性。分布式系统,从本质上来讲,就是通过一些低廉的硬件来实现系统更好的吞吐、性能以及可用性。分布式系统,有一套通用的系统设计策略。大致上分为:
- 心跳检测
- 高可用保障
- 容错处理
- 重试机制
- 负载均衡
心跳检测
在分布式系统环境中,对于能够检测众多节点的活性是很有必要的。只有当节点存活,才可以进行执行对应的业务任务。传统来说,解决该类问题,一般都是通过心跳检测手段。如同医生通过仪器探测病人心跳一样,去判定服务器众节点的存活。
客户端,在请求对应的服务节点前,需要经过心跳检测服务器,进行路由转发到对应的节点处理。
心跳检测服务器,检测众多分发或者路由节点的活性,如果存活正常,路由才会转发到该节点。
传统心跳检测,存在一定的局限性
- 如果节点没有挂,但是ping超时,导致,判定死亡,就会造成很大的资源损失
- 心跳检测如果出现问题,则也会造成很大的影响
总结来说,心跳检测收到心跳正常,是正常的,但是心跳检测收不到心跳,也不代表节点存在异常,判定死亡
优化心跳检测策略
- 周期检测心跳机制
- 累计失效检测机制
高可用设计
系统高可用性的常用设计模式包括三种:主备、互备、集群模式
- 主备模式
主备模式,就是Active Standby,当主机宕机时,备机接管主机一切工作,待主机正常之后,会通过两种方式自动(热备)、手动(冷备),恢复主机的工作
数据库高可用方案中,一般都是MS主从模式 Matser-Slave
2.
3.互备模式
互备模式,指的是多台主机同时运行各自的服务工作且互相检测,同步。在数据库高可用部分,采用互备,主要是MM模式(Multi-Master)。多个master都具有read - write 能力,需根据时间戳或者版本,最终合并。分布式版本管理系统git就可以理解为MM模式
4.集群模式
集群模式,指的是,多个节点同时运行服务,可以通过类似心跳服务器这种分担服务请求。
容错性
容错性,指系统对于错误、异常的包容能力,为了更好地提供用户的舒适度或者说客户端的响应合理,做出来的一些系统的让步处理。
容错,并非容忍错误。以分布式环境下的,缓存举例说明:
一个查询业务,先通过缓存查询,如果缓存没有,再去数据库查询。如果没有查询得到,可能的原因包括以下几个方面:
- 数据库连接未知异常
- 数据库真的没有
那么,用户可以进行间隔一定时间发起重试,可以一定程度友好的,解决问题
另外,如果出现缓存失效的情况下,恶意攻击,调用查询接口,查询缓存中不存在的key,导致大量流量进入DB,导致DB崩溃。
为了解决这个问题,我们可以考虑,如果在高频、短周期内,当客户查询不存在的key时,我们可以对当前key进行赋值,直接返回。响应给系统用户,截断恶意操作。
负载均衡
分布式系统环境,通过负载均衡,达到资源的合理分配利用
负载均衡,分为硬件和软件。硬件常见的设备F5,软件的LVS 、Nginx等等
以nginx为例,常见的负载均衡策略如下
- 轮询
- 最少连接
- IP地址Hash
- 基于权重的负载均衡
- 自定义实现负载均衡算法
<end>