架构师训练营第 1 期第 11 周作业

用户头像
du tiezheng
关注
发布于: 2020 年 12 月 07 日

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。



一、导致系统不可用的原因有:

系统硬件故障

软件开发引入bug

不规范的发布流程

突发的外部高并发压力

外部网络攻击或网络故障

外部灾害。



二、保障系统稳定高可用的手段包括:



开发设计环节:

1、设计高内聚、低耦合软件系统。解耦软件依赖,可增加软件的可维护性、可扩展性。主要手段包括:面向对象的设计原则、设计模式、DDD。

2、设计系统隔离。隔离的系统可以有效的隔离故障传递。主要手段包括:按业务进行子系统隔离,合理利用微服务或中台架构,使用消息队列隔离生产者消费者,使用虚拟机或容器隔离服务运行环境。

3、使用异步编程或异步架构。异步调用能够降低系统间依赖,提升上游性能。主要手段包括:多线程编程、反应式编程、一部网络编程、事件驱动异步架构。

4、设计系统备份冗余和故障失效转移。主要手段包括:无状态负载均衡处理集群,主主、主从复制数据库系统,以及各自对应的失效转移架构。

5、设计可重试幂等接口。基于幂等接口,在系统间响应超时后,执行多次重试。

6、设计事务补偿机制。当多个分布式调用的某一个失败,通过补偿调用,回滚其它成功调用到初始状态,保证系统分布式事务调用的原子性。

7、设计熔断机制。利用熔断器快速隔离故障系统、通过快速失败,防止上游系统级联阻塞和资源消耗。

8、设计限流机制。在高并发下限制丢弃一部分流量,保护系统可用性。主要限流算法包括:计数器(固定、滑动窗口)、令牌桶、漏桶、自适应限流。

9、设计降级机制。在高并发下关闭非核心业务,从而增加核心业务处理能力。

10、设计异地多活部署方案。通过在多个地点部署多个数据中心,降低外部灾害带来的冲击。



发布环节:

1、自动化测试。软件发布前需要对主要流程和核心功能执行回归测试。利用自动化测试脚本或工具,可降低发布前的测试成本。

2、自动化部署。向公共分支提交的代码后,软件自动打包部署到各测试环境,自动执行自动化测试,自动部署推送到生产环境。

3、预发布验证。在生产环境的建立隔离用户的预发布机器,在正式发布前,针对环境兼容性执行预发布验证。

4、代码版本控制。分支开发,主干发布。保证开发、发布互不影响。

5、自动化发布。

6、灰度发布。按批次滚动更新系统版本。控制版本升级风险、回滚成本。



监控环节:

1、日志收集。

2、监控服务器性能。CPU负载、内存占用、磁盘、网络IO等。可以对系统故障和性能瓶颈做提前预警、及时调整伸缩性策略。

3、获取业务运行数据报告。与业务场景相关的技术指标,如缓存命中率、响应延迟时间、待处理任务数等。

4、监控管理。监控报警,自动失效转移、自动扩容、自动限流。



用户头像

du tiezheng

关注

还未添加个人签名 2018.08.16 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 11 周作业