架构师训练营第 1 期第 11 周作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
一、导致系统不可用的原因有:
系统硬件故障
软件开发引入bug
不规范的发布流程
突发的外部高并发压力
外部网络攻击或网络故障
外部灾害。
二、保障系统稳定高可用的手段包括:
开发设计环节:
1、设计高内聚、低耦合软件系统。解耦软件依赖,可增加软件的可维护性、可扩展性。主要手段包括:面向对象的设计原则、设计模式、DDD。
2、设计系统隔离。隔离的系统可以有效的隔离故障传递。主要手段包括:按业务进行子系统隔离,合理利用微服务或中台架构,使用消息队列隔离生产者消费者,使用虚拟机或容器隔离服务运行环境。
3、使用异步编程或异步架构。异步调用能够降低系统间依赖,提升上游性能。主要手段包括:多线程编程、反应式编程、一部网络编程、事件驱动异步架构。
4、设计系统备份冗余和故障失效转移。主要手段包括:无状态负载均衡处理集群,主主、主从复制数据库系统,以及各自对应的失效转移架构。
5、设计可重试幂等接口。基于幂等接口,在系统间响应超时后,执行多次重试。
6、设计事务补偿机制。当多个分布式调用的某一个失败,通过补偿调用,回滚其它成功调用到初始状态,保证系统分布式事务调用的原子性。
7、设计熔断机制。利用熔断器快速隔离故障系统、通过快速失败,防止上游系统级联阻塞和资源消耗。
8、设计限流机制。在高并发下限制丢弃一部分流量,保护系统可用性。主要限流算法包括:计数器(固定、滑动窗口)、令牌桶、漏桶、自适应限流。
9、设计降级机制。在高并发下关闭非核心业务,从而增加核心业务处理能力。
10、设计异地多活部署方案。通过在多个地点部署多个数据中心,降低外部灾害带来的冲击。
发布环节:
1、自动化测试。软件发布前需要对主要流程和核心功能执行回归测试。利用自动化测试脚本或工具,可降低发布前的测试成本。
2、自动化部署。向公共分支提交的代码后,软件自动打包部署到各测试环境,自动执行自动化测试,自动部署推送到生产环境。
3、预发布验证。在生产环境的建立隔离用户的预发布机器,在正式发布前,针对环境兼容性执行预发布验证。
4、代码版本控制。分支开发,主干发布。保证开发、发布互不影响。
5、自动化发布。
6、灰度发布。按批次滚动更新系统版本。控制版本升级风险、回滚成本。
监控环节:
1、日志收集。
2、监控服务器性能。CPU负载、内存占用、磁盘、网络IO等。可以对系统故障和性能瓶颈做提前预警、及时调整伸缩性策略。
3、获取业务运行数据报告。与业务场景相关的技术指标,如缓存命中率、响应延迟时间、待处理任务数等。
4、监控管理。监控报警,自动失效转移、自动扩容、自动限流。
评论