分布式系统概述
分布式系统通过将多台普通性能的服务器组合起来协同工作,以相对低廉的硬件成本实现比单台高性能服务器更好的吞吐量、性能指标以及系统可用性。
四大核心设计策略
-
节点存活检测(Health Check)
- 心跳机制:节点定期发送心跳包到监控中心
- 超时检测:设置合理的响应超时时间
- 探针检查:对关键服务端口进行探测
- 示例:Zookeeper的Session机制,Kubernetes的Liveness Probe
-
高可用保障(High Availability)
- 冗余设计:多节点部署,避免单点故障
- 故障转移:主备切换机制(如Redis Sentinel)
- 服务降级:核心服务与非核心服务隔离
-
容错处理(Fault Tolerance)
- 重试机制:对暂时性故障进行自动重试
- 熔断机制:防止故障扩散(如Hystrix)
- 数据一致性:分布式事务处理(2PC,TCC)
-
负载均衡(Load Balancing)
- 算法选择:轮询、加权、最少连接等
- 动态调整:根据节点负载情况实时调度
- 多级负载:DNS→LVS→Nginx→服务层
心跳检测机制详解
心跳检测是分布式系统中用于监控节点存活状态的常用技术。
核心实现方式
1. 主动推送模式
- 被监控节点(Client)定期向监控节点(Server)发送心跳包
- 典型间隔:30秒-2分钟
- 报文示例:包含nodeID、timestamp、load等信息
2. 被动请求模式
- 监控节点主动轮询各个被监控节点
- 使用GET/POST请求或专门的健康检查接口
- 超时时间通常设置为心跳间隔的2-3倍
携带的信息内容
心跳报文通常包含:
- 基础状态:CPU使用率、内存占用、磁盘空间
- 业务指标:当前连接数、请求处理量、队列长度
- 元数据:节点角色、服务版本、配置哈希值
周期检测心跳机制
Server端会建立一个定时检测任务,每隔固定时间间隔t秒(例如t=5秒)向Node集群中的所有节点发送心跳检测请求。每个心跳请求都会附带一个预设的超时时间阈值(例如3秒):
- 第一次超时:标记该节点为”疑似故障”状态
- 连续N次超时(例如N=3):正式将该节点判定为”死亡”状态
累积失效检测机制
在基础心跳机制的基础上,系统会维护一个滑动窗口统计模型,记录每个节点的响应情况:
- 统计指标:成功响应次数、超时次数、平均响应时间
- 根据历史数据计算节点的健康评分
- 当评分低于阈值时标记为相应状态
- 对”濒临死亡”节点启动密集检测流程
挑战与解决方案
- 网络分区问题:引入第三方仲裁节点,使用lease机制避免脑裂
- 资源消耗平衡:使用轻量级二进制协议,心跳聚合压缩技术
- 时钟漂移处理:NTP时间同步,逻辑时钟补偿机制
高可用设计
高可用(High Availability,HA)是指通过特定的架构设计和技术手段,最大限度地减少系统不可用时间。
高可用核心指标
- MTBF:系统正常运行的平均时间
- MTTR:故障发生后恢复服务的平均时间
- SLA:承诺的服务可用性百分比
高可用模式
1. 主备模式(Master-Slave)
主备架构是最基本的高可用方案,由一个主节点(Master)和一个或多个备用节点(Slave)组成。主节点处理所有业务请求,备用节点处于待命状态,定期与主节点同步数据。当主节点故障时,备用节点通过故障转移(Failover)机制接管服务。
- 优点:实现简单,资源利用率要求不高
- 缺点:备用节点平时不提供服务,资源存在浪费
- 应用场景:数据库主从复制(如MySQL主从架构)、负载均衡器的主备部署
2. 互备模式(Active-Active)
互备架构又称双活模式,所有节点都处于活动状态,同时对外提供服务,并相互备份。当某个节点故障时,其负载会自动转移到其他节点。
- 优点:资源利用率高,无单点故障
- 缺点:实现复杂度高,需要考虑数据一致性问题
- 应用场景:分布式数据库集群(如MongoDB副本集)、多活数据中心部署
3. 集群模式(Cluster)
集群架构由多个节点组成一个逻辑整体,通过分布式协调服务来管理节点状态。
- 关键特性:节点对等、自动故障转移、弹性扩展
- 典型实现:Kubernetes容器编排集群、Hadoop大数据集群、Redis Cluster
容错性
容错是保障分布式环境下系统的高可用或者健壮性。
缓存穿透问题解决方案
使用一个巧妙的方式:将不存在的Key预先设定一个值,比如key = null,在返回这个null值时,应用可以决定是否继续等待访问还是放弃操作。
负载均衡
关键在于使用多台集群服务器共同分担计算任务。
负载均衡策略
- 轮询:按顺序依次分发客户端请求到不同后端服务器
- 最少连接:当前谁连接最少,分发给谁
- IP地址哈希:确定相同IP请求转发给同一个后端节点
- 基于权重:配置更多请求分发到高配置服务器
负载均衡工具
- 硬件方案:F5
- 软件方案:LVS、HAProxy、Nginx