写点什么

GO 训练营第 6、7 周——可用性设计

用户头像
Glowry
关注
发布于: 2021 年 03 月 19 日

隔离

资源分割


超时控制

良好的超时策略,保证请求不堆积,释放资源给正常的流程使用。


过载保护

拒绝服务也会消耗资源,所以过载保护无法完全保护系统

参考:

token-bucket rate limit algorithm: /x/time/rate

token-bucket rate limit algorithm: /x/time/rate

限流

  1. 单机限流

  2. 分布式限流

拒绝服务也会消耗资源,所以限流也无法完全保护系统;

系统一般需要立体保护,如客户端+服务端

熔断

挂起操作,能够在高负载、高并发时候保护系统

做法:

全关闭:google sre 熔断概率计算

半开半闭

  1. 客户端流控:避免失败时,客户积极重试

  2. gutter 双熔断,用少量资源支撑主线熔断溢出的流量

降级

必要时减少不重要的工作,提供有损的服务

重试

问题:

客户端积极重试

内部不必要的重试:nginx upstream 重试过大;多层级重试;

解决:

约定过载条件,不进行重试

负载均衡

均衡的流量分发

动态根据机器负载进行分发,参考:The power of two choices in randomized load balancing https://ieeexplore.ieee.org/document/963420


最佳实践

以上+极限压测+故障演练

用户头像

Glowry

关注

还未添加个人签名 2019.02.13 加入

还未添加个人简介

评论

发布
暂无评论
GO训练营第6、7周——可用性设计