分布式系统遇到的问题及解决方案

主要参考: 分布式常见的十大坑,你了解几个?

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,如果没有,
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值