分布式系统常见设计

博客:cbb777.fun

全平台账号:安妮的心动录

github: https://github.com/anneheartrecord

下文中我说的可能对,也可能不对,鉴于笔者水平有限,请君自辨。有问题欢迎大家找我讨论

分布式核心要素

通常来说设计分布式系统的时候最需要考虑的核心要素有五个image.png

  • Capacity 容量(能力) 指的是分布式系统里的CPU 内存 硬盘 网络 文件描述符 socket连接数等等硬性的指标
  • Perfomant 性能 指的是IOPS TPS QPS Latency Jitter之类的性能指标要求,性能受限于容量,性能同时又影响了可靠性以及可用性
  • Availablility 可用性 指的是产品或者服务在随机事件内调用时处于可服务状态的概率 也就是正常运行的时间/总时间 之前说的异地多活也是为了保证可用性而出现的
  • Reliability 可靠性 一般是不出故障的概率 通常企业级产品是5个9打底的 可以简单的和可用性划上约等号
  • Scalability 可伸缩性 指的是处理集群能否动态缩扩容 使得处理能力越来越多和越来越少的某种能力 系统的可伸缩性决定了该系统能不能伸缩

一个分布式系统通常会面临以下几个个难题:故障传播性、业务拆分与聚合、以及分布式事务

为了解决故障传播性的难题,我们可以采用"隔板" "熔断" "降级" "限流" "容错"以及"资源管控"等方式

微服务服务治理几大模式

隔板模式

场景: 在分布式系统中通常将进程容器化 以进行资源隔离,然后在同一个进程中的所有业务都共享线程池,对外提供服务,但是这就导致了会经常遇到这样的问题:

  1. 业务A负载较高,抢占了线程池里的大部分线程资源,从而导致其他业务的服务质量下降
  2. 同一个进程内新加一个业务,这个业务会抢占其他业务的资源,可能会造成系统的不稳定,比如业务性能抖动
  3. 难以调试,多个业务共享一个线程池,当出现故障的时候很难通过简单的日志判断是哪个业务出了问题

隔板模式:在分布式系统里进行资源的隔离,资源隔离通常按照业务粒度分为进程级别和线程级别

进程隔离:通常使用的是容器化进行隔离,比如通过docker实现业务进程之间的资源隔离,底层就是通过namespace实现的操作系统级别的隔离,比如隔离进程、网络、通信等等。cgroup实现的硬件层面的隔离,比如CPU、内存等等。具体实现笔者之前的博客有提到

线程隔离:指给每个跑在进程里的业务按照业务类型创建一个线程池,从而实现线程级别粒度的资源隔离

优势:

  • 提高业务可靠性,减少业务受其他业务影响的程度,当一个业务耗尽自身资源后也不会影响到其他业务的服务质量
  • 降低新加入的业务给系统带来的风险,减少新加业务导致其他业务可能出现的性能抖动
  • 利于调试,通过线程池可以很方便的定位是哪个服务出了故障,并且可以通过监控线程池的请求失败次数、超时次数、拒绝请求次数等可以实时反应当前的业务质量

劣势:

粒度更细,很容易就能想到劣势是引入了额外的开销,具体开销的点如下

  1. 对象分配 创建多个线程对象
  2. 并发 可能会有一些竞态问题 为了避免竞态问题 则必须进行并发控制
  3. 线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值