主要参考: 分布式常见的十大坑,你了解几个?
CAP理论
- 分布式系统在设计时只能在一致性(consistency)、可用性(availability)、分区容忍性(partition)中满足两种。
- 一致性指所有节点访问同一份最新的数据副本,可用性指系统提供的服务一直处于可用状态,分区容错性指分布式系统在遇到任何网络分区故障的时候,仍需要保证对外提供一致性和可用性服务。在一个分布式系统中,不可能同时满足三个特性,最多满足两个。
- CA放弃分区容忍性,关系数据库按照CA设计
- AP放弃一致性,追求最终一致性,许多非关系型数据库按照AP进行设计。
- CP放弃可用性,比如跨行转账,要求等待双方银行系统都完成整个事务才算完成。
BASE理论
- BASE是基本可用(basically available)、软状态(soft state)和最终一致性(eventually consistent) 三个短语的缩写。
- base理论是对CAP中AP的一个扩展,通过牺牲强一致性来获得可用性,当出现故障允许部分不可用但保证核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致性状态。
- 基本可用:允许损失部分可用功能,保证核心功能可用。
- 软状态:允许存在中间状态,这个状态不影响系统可用性,如订单中的“支付中”,“数据同步中”等状态。待数据最终一致后,改为成功状态。
- 最终一致性: 指经过一段时间后,所有节点数据都将会达到一致。如“支付中”状态最终会变为“支付成功”或者“支付失败”。
熔断、降级限流
参考:浅析降级、熔断、限流
降级
- 降级也就是服务降级,当我们的服务器压力剧增,为了保证核心功能的可用性,而选择性的降低了一些功能的可用性,或直接关闭该功能。
- 比如贴吧类型的网站,当服务器吃不消时,可以选择关闭发帖功能、用户服务相关的功能等,保证登录和浏览帖子这种核心功能。
熔断
- 降级一般指我们自身的系统出了故障而降级。而熔断一般指依赖的外部接口出现故障,断绝和外部接口的关系。
- 比如A服务中的一个功能依赖B服务,这时B服务出现了问题,返回很慢。此时就需要熔断。即当发现A要调用B,此时就直接返回错误。
限流
- 限流指对某一时间窗口内的请求进行限制,保持系统可用性和稳定性,防止因流量暴增而导致系统运行缓慢或宕机。
- 一般限制的指标是请求总量或某段时间内请求总量。
消息队列如何做分布式?
幂等性概念
- 无论做多少次操作和第一次操作的结果一样,则为幂等。用于解决消息重复消费问题。
解决重复消费问题
- 插入数据库场景:
- 每次插入数据时,先检查数据库中是否有这条数据的主键id,如果没有,则进行更新操作。
- 写redis场景:
- redis的set操作天然幂等性
- 其他场景:
- 生产者发送每条数据时,增加一个全局唯一id,每次消费时,去redis中检查是否有这个id,如果没有