分布式系统设计:弹性设计

分布式系统,在高并发等情况下,需要有系统容错能力。系统需要具备弹性(Resiliency)的能力。

Resiliency:系统从错误,故障中恢复的能力。保障系统的可用性。

可用性定义:A=\frac{MTBF}{MTBF+MTTR}

AvailabilityDowntime
90% (1-nine)36.5 days/year
99% (2-nines)3.65 days/year
99.9% (3-nines)8.76 hours/year
99.99% (4-nines)52 minutes/year
99.999% (5-nines)5 minutes/year
99.9999% (6-nines)31 seconds/year !

(   参考:https://www.eventhelix.com/fault-handling/reliability-availability-basics/

例如:一些常见的故障:软件设计,硬件,网络问题,网络提供商网络故障,部署在云端的服务遇到故障(云厂商机房掉电,硬件系统故障自动迁移引起延迟,云厂商例行维护或故障重启数据库,redis重启等等)

引起宕机的主要原因:

1.网络问题:网络带宽满,链路问题

2.性能问题:存储层缓慢(数据库,kv等),java Full gc,硬盘大量读写,cpu 使用率过高

3.安全问题:网络攻击,DDos,CC(Challenge Collapsar)

4.运维问题:数据库维护,应用维护,软件升级,中间件维护,操作系统维护,网络维护。监控问题。DNS配置错误

5.管理问题:没有关键服务的依赖关系,运行信息监控等

6.硬件问题:硬盘损坏,网卡损坏,路由器,硬件损坏,机房掉电,光纤意外破坏

分布式系统的弹性设计很难:

1.网络不可靠

2.依赖性的服务总是会失败

3.用户行为是不可预测的

需要考虑的模式:

1.nocode:减少代码:编写可靠且安全的应用程序最佳方式是不写任何代码----无需写入和部署

2.设置超时时间:

     防止级联失败

     提供故障隔离

3.重试:

     如果发生异常失败,请重试

      重试可以减少恢复时间,对于间歇性故事,很有效。

      重试请求也可以设置超时,例如指数退避算法

       需要保证幂等性

4.优雅的回退

       系统故障是,使用其他的机制降级响应,而不是完全失败。

5.断路器:熔断设计

   保护服务的调用依赖。当某个系统或接口不健康,并允许其恢复时,应该停止对下游的服务调用。

    eg:Netflix 的Hystrix

6.弹性测试

    模拟系统中的各种故障,eg:模拟网络故障,网络延迟,依赖服务缓慢,

     注入故障

     eg:Chaos Monkey等工具

系统设计上需要考虑:

隔离设计

异步通讯

幂等性

补偿事务

重试机制

熔断设计(断路器)

限流设计

降级设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值