第 11 周作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
引起故障的原因:
1.硬件故障
1)备份:集群设计,数据库主从复制
2)失效转义:数据库主主失效转义,负载均衡失效转移
3)幂等:通过添加附件信息例如交易编号对服务有效性进行校验。只有有效的操作才继续执行。
4)事务补偿
2.软件bug
1)解耦:故障原因大多数是代码质量引起的bug导致的,通过遵循设计模式以及模型建设提高代码质量降低耦合度,减少bug。
2)隔离:通过业务模块隔离,架构设计隔离,角色隔离,硬件隔离降低耦合度减少bug。
3.系统发布
1)人工测试到自动化测试过度:随着系统的稳定性,与业务的匹配度不断提升,系统的确定性不断提高,可以减少人工测试,提高自动化测试来提高系统发布效率,降低人员成本,降低时间成本。
2)自动化部署:前提自动化的测试、自动打包、部署、发布。
3)预发布验证:构建跟线上环境一样的一套环境(预发布环境或者仿真环境),在上线之前进行测试,验证。
4)代码版本控制:主干开发分支发布;分支开发主干发布
5)自动化发布
6)灰度发布:上线之后随时根据线上反馈建立回滚机制。
7)系统运行监控
4.并发压力
1)异步:异步网络架构
2)重试:远程服务器由于线程阻塞、垃圾回收或者网络抖动,无法及时返回响应,调用者可以通过重试方式修复单词调用故障
3)熔断:当某个服务出现故障导致响应延迟或者失败率增加,继续调用会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用。
4)限流:高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。
5)降级:特定场景下,对非核心功能进行关闭,把系统资源留给业务关键功能。
5.网络攻击
安全策略、流量策略
6.外部灾害
异地多活:当出现整个数据中心不可用的时候,比如遭遇自然灾害或者战争或者停电等不可抗拒的因素,此时我们应该考虑的是如何保证这些外部灾害会在所有数据中心同时发生,将数据中心分布到不同的地点可以解决该问题。
评论