第 11 周学习总结
1.导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
解答:
导致系统不可用的原因主要有:
-硬件故障
-软件Bug
-系统发布
-并发压力
-网络攻击/故障
-外部灾害
保障系统高可用的方案主要有:
思考:面对这种问题,其实底层思维就是分工协作
分工
解耦:需要对不同任务、不同职责进行、现实中就是划分不同的岗位。
隔离:为了不相互影响,不同职责的团队进行因为隔离,因为隔离需要进行异步化通信,异步化是手段
冗余:同一职责多人负责,防止单点。服务上称之为集群,数据上称之为备份
协作
团队内协作
失效转移:不论何时总有人负责完成业务
无状态:业务和人无关
可重试、幂等
团队间协作
事务补偿
限流熔断
解耦(逻辑层面)
保持自身相对的独立性,不会被其他系统拖累,也不会拖累其他系统。耦合越多越容易出错
-高内聚、低耦合的组件设计原则
-面向对象基本设计原则
-面向对象设计模式
-领域驱动设计建模
隔离(物理层面)
-业务与子系统隔离
-微服务与中台架构
-生产者消费者隔离
-虚拟机与容器隔离
异步
应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。
常见的异步调用方式:
-多线程编程
-反应式编程
-异步通信网络编程
-事件驱动异步架构
备份:
-集群设计
-数据库复制(主从复制、主主复制)
-CAP原理
失效转移
当数据服务器集群中任何一台服务器宕机,应用针对这台服务器的所有读写操作应该重新路由到其他服务器上,保证数据访问不会失败。
幂等
重要的服务必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。
事务补偿
对于分布式系统而言,不能依靠传统的ACID来保证事务。
分布式事务的BASE:基本可用(Basic Availability )、软状态(Soft-state)、最终一致性(Eventual consistency)
事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前状态。
重试
远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用的故障。
熔断
当某个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用。
限流
在高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行
保护。
降级
访问高峰时,服务可能因为大量并发调用而性能下降,严重时导致服务宕机,为了确保核心应用和功能正常运行,需要对服务进行降级。
异地多活
将数据中心分布在多个不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问,这样每个机房都可以提供完整的系统服务,即使某一个机房不可使用,系统也不会宕机,依然保持可用。
注意:异地多活的难点是保证数据一致性。
评论