新闻资讯
如何搭建一套高可用系统?
发布时间:2021-10-09 10:20:50
  |  
阅读量:4128

高可用性(High Availability) 指系统通过专门设计,最大限度减少停工时间,持续提供稳定服务。诚直科技在多年实践中,总结出一套覆盖架构、编码、运维等多个层面的高可用设计要点,现梳理如下。

一、架构层面的高可用设计

1. 减少单点故障

  • 全面识别单点:包括机房(同城异地双机房)、应用服务器、DNS服务器、SFTP服务器、负载均衡器(LBS)、缓存服务器、数据库、消息服务器、代理服务器及专线等。

  • 专线冗余:若系统通过专线调用外部服务,同时接入联通和电信两条专线,降低单条专线故障风险。

  • 负载均衡策略:优先使用软负载(如Nginx、HAProxy),以硬负载(如F5)作为兜底方案。

2. 减少依赖

  • 减少DNS依赖:通过配置本地hosts文件,并用自动化工具向所有服务器推送最新域名映射,避免DNS解析故障。

  • 减少远程服务依赖:利用本地缓存或近端服务替代RPC调用。

3. 依赖简化与解耦

  • 消息驱动:系统间通过消息服务器传递数据,降低直接耦合。

  • 读写分离:A系统负责写数据库,B系统负责读数据库,即使A不可用,短时间内B仍可提供服务。

4. 系统分级

  • 将系统分为A、B、C三个等级,高级别系统不依赖低级别系统,且要求更高的可用性指标。

5. 服务权重与弹性扩容

  • 动态权重:集群中自动识别高性能服务,降低超时服务的权重,优先调用高权重节点。

  • 弹性扩容:根据资源使用率(如带宽)自动或手动扩容,快速增加资源。

二、编码与设计规范

1. 限制循环

  • 避免无限死循环导致CPU 100%。为for循环设置最大迭代次数(如1000次)。

2. 无状态服务

  • 服务器不保存用户状态数据:集群环境下禁用static变量存储用户数据,不将用户文件长期存放在本地。有状态服务难以扩容且易产生单点问题。

3. 功能开关

  • 提供开关控制功能启用/关闭。例如消息量过大时开启开关直接丢弃消息;新功能上线默认带开关,出现问题可快速关闭。

4. 超时与重试策略

  • 超时设置:内部调用连接超时1秒、读超时3秒;外部调用连接超时3秒、读超时20秒。

  • 重试策略:外部服务异常时递增重试间隔,同时设置最大重试次数和总开关,避免对下游造成压力。

5. 隔离机制

  • 应用隔离模块隔离机房隔离线程池隔离

  • 按变更频率隔离:抽象且不变的代码放入高可用模块;频繁变化的业务逻辑放入独立模块,故障影响范围可控。

  • 线程池隔离:不同业务使用独立线程池,防止低优先级任务阻塞高优先级,或高优先级任务过度占用导致低优先级任务饿死。

6. 异步调用

  • 将同步调用改为异步,避免远程调用故障或超时阻塞主流程。

7. 减少远程调用

  • 优先调用本地JVM内服务 → 同机房服务 → 同城服务 → 跨城服务。

  • 通过缓存加“保鲜度”策略,减少对下游依赖。

  • 配置中心主动推送服务地址至本地;参数中心将配置推送到本地内存,避免远程获取。

8. 运行时加载模块

  • 将经常变化的业务代码封装为独立模块,利用Java ClassLoader实现运行时动态加载与卸载,实现热修复。

9. 代码扫描

  • 使用IDEA代码分析等工具定期扫描,发现空指针异常、循环依赖等潜在Bug。

三、流量控制与容灾

1. 控制流量

  • 对指定服务设置限流阈值:QPS、TPS、QPH(每小时总请求量)、QPD(每天总请求量),防止异常流量冲击。

2. 热点缓存

  • 对热点数据进行缓存。例如B系统提供名单服务,同时提供Client SDK实现近端缓存,定期拉取数据,减少RPC调用。

3. 缓存容灾与分级

  • 数据库不可用时,降级使用缓存数据。

  • 分级缓存:优先读本地缓存(通过推模式更新),其次读分布式缓存。

4. 服务降级

  • 系统响应缓慢时,关闭部分非核心功能释放资源。例如大量消息涌入导致服务不可用时,直接丢弃消息;或通过流控拒绝低级别系统请求。

5. 流量蓄洪(削峰填谷)

  • 流量陡增时将请求暂存(如存入数据库),然后按指定QPS泄洪,保护下游系统。对方系统响应缓慢时,自动触发蓄洪。

6. 熔断机制

  • 监控数据出现大幅跌涨时,及时中断操作。例如指标计算时,若某用户指标环比/同比增长一倍或跌零,则中止该用户计算并保存原始消息,避免错误扩散。

四、监控与运维

1. 精准监控

  • 监控指标:CPU利用率、load、内存、带宽、系统调用量、应用错误量、PV、UV、业务量。

  • 精准报警阈值:例如平时内存利用率50%,设置60%报警,提前感知内存泄露趋势,避免应用无响应。

2. 容量规划

  • 定期评估容量,大促前执行压测和容量预估,按需扩容。

3. 自动备份

  • 对程序、系统配置、数据定期自动备份(使用Linux命令和Shell脚本),支持本地或异地备份,确保故障后快速重建。

4. 线上压测

  • 对外服务必须进行压测,明确可承受的QPS/TPS,从而制定准确的限流策略。

5. 灰度发布与回滚

  • 新功能仅对部分服务器生效,观察数天逐步切流,出现问题仅影响少量客户。支持快速回滚或直接下线灰度机器。

五、总结

诚直科技的高可用设计体系,从消除单点、减少依赖、流量管控、缓存容灾、服务降级、熔断隔离、弹性扩容、灰度发布、精准监控等多个维度入手,形成了一套覆盖全链路的保障方案。实践中需要根据业务场景灵活组合上述策略,并持续通过压测和监控验证系统的韧性,才能真正实现高可用目标。


上一篇:2023年电动汽车安全的9个大趋势

下一篇:没有了!

💬咨询电话
微信:40930845
📧 邮箱:40930845@qq.com
🌐官方网站
官方网站
Copyright ©2015 - 2023 北京诚直科技有限公司 All Rights Reserved. 京ICP备16037445 XML地图