【从 0 开始学架构】学习笔记 Day8 高可用系统架构方案

一、解耦

• 高内聚、低耦合的组件设计原则
• 面向对象基本设计原则
• 面向对象设计模式
• 领域驱动设计建模

二、隔离

• 业务与子系统隔离
• 微服务与中台架构
• 生产者消费者隔离
• 虚拟机与容器隔离

三、异步

• 多线程编程
• 反应式编程
• 异步通信网络编程
• 事件驱动异步架构

四、备份

• 集群设计
• 数据库复制
• CAP原理

五、Failover(失效转移)

数据库主主失效转移
负载均衡失效转移

如何确认失效,需要转移?
设计无状态的服务

六、幂等

应用调用服务失败后,会将调用请求重新发送到其他服务器,但是这个失败可能是虚假的失败。服务重复调用有时候是无法避免的,必须保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。

有些服务天然具有幂等性,比如将用户性别设置为男性,不管设置多少次,结果都一样。但是对于交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才继续执行。

七、事务补偿

通过执行业务逻辑逆操作,使事务回滚到原来的状态

(1)传统事务的ACID

原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation,又称独立性)
持久性(Durability)

(2)分布式事务的BASE

基本可用(BasicAvailability)
软状态(Soft-state)
最终一致性(Eventualconsistency)

八、重试

远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用的故障

上游调用者超时时间要大于下游调用者超时时间之和

九、熔断

当某个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用

断路器三种状态:关闭,打开,半开

十、限流

在高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问系统的

限流的算法:

• 计数器算法(固定窗口,滑动窗口)
• 令牌桶算法
• 漏桶算法

十一、自适应限流

实时自动评估QPS

十二、降级

有一些系统功能是非核心的,但是它也给系统产生了非常大的压力

解决办法就是在系统高并发的时候,将非核心的功能关闭,留出资源给核心功能

十三、异地多活

为了应对一个地方出现问题导致整个系统不可用的问题,采用了异地多活的多机房架构策略,也就是说将数据中心分布在多个不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问,这样每个机房都可以提供完整的系统服务,即使某一个机房不可使用,系统也不会宕机,依然保持可用

异地多活的难点是数据一致


参考

《从 0 开始学架构》05 | 复杂度来源:高可用

《从 0 开始学架构》22 | 想成为架构师,你必须知道CAP理论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值