没有设置超时时间的集成点,必定会导致层叠失效
1. 水平扩展
1.1. 增加服务器来增加容量
1.1.1. 这些服务器集群被称为“农场”
1.2. 负载均衡的服务器集群
1.2.1. 不易遭遇单点系统失效
1.2.2. 高负载比低负载更易导致竞态条件的并发缺陷
1.3. 如果双节点集群出现失效,那么幸存服务器的工作负载将增加一倍
1.4. 承担其原始负载(占总负载的一半),也要承担失效节点的负载(另一半)
2. 垂直扩展
2.1. 构建越来越大的服务器
2.1.1. 为主机添加CPU核数、内存和存储空间
3. 部分交互式工作负载通过垂直扩展实现,大多数交互式工作负载则依赖水平扩展
4. 同层连累反应
4.1. 由于一台服务器停机,其他服务器必须负担其工作负载,这样就会发生同层连累反应
4.2. 如果应用程序存在缺陷(通常是资源泄漏或与负载相关的崩溃),就会发生
4.2.1. 如果应用程序发生内存泄漏,便会发生同层连累反应
4.2.2. 同构层的每台服务器都会有同样的缺陷
4.2.3. 当一台服务器耗尽内存并停机时,其他服务器不得不负担它的工作负载,但所增加的流量会加快内存泄漏
4.3. 寻找难以捕捉的时序缺陷
4.3.1. 流量状况也可能引发难以捕捉的竞态条件
4.3.2. 同构层的每台服务器都会有同样的缺陷
4.3.3. 如果一台服务器陷入死锁,其他服务器所增加的负载也极易使它们陷入死锁
4.4. 修复潜在的软件缺陷成了避免同层连累反应的唯一方法
4.5. 某一层上同层连累反应的系统失效容易导致其调用层上的层叠失效
4.6. 舱壁模式
4.6.1. 分隔服务器,可以防止同层连累反应毁掉整个系统服务
4.7. 将一层细分成多个池
4.7.1. 将单个同层连累反应分成速率不同的同层连累反应
4.8. 采用自动扩展
4.8.1. 将关闭未通过健康状况检查的服务器实例,并启动新的实例
4.8.2. 只要自动扩展机制的响应速度比同层连累反应的蔓延速度快,那么系统服务就依然可用
5. 层叠失效
5.1. 有一个将系统失效从一个层级传到另一个层级的机制
5.2. 当服务提供方的系统失效状态触发调用层的不良反应时,系统失效就会“跳过层级之间的间隙”,蔓延开来
5.3. 推测性重试也会让系统失效“跳过层级之间的间隙”而蔓延
5.4. 通常源于枯竭的资源池
5.4.1. 资源池枯竭的原因往往是较低层级所发生的系统失效
5.5. 下层提供的细节不足以区分是瞬态错误还是更严重的错误
5.5.1. 一旦下层开始出现一些真正的问题
5.5.2. 调用层就开始越来越频繁地访问下层
5.5.3. 下层越难以响应,调用层访问越频繁
5.5.4. 调用层会倾尽全部CPU资源调用下层,并把调用失败记录到日志中
5.6. 没有设置超时时间的集成点,必定会导致层叠失效
5.6.1. 集成点是裂纹的头号来源
5.6.2. 层叠失效是裂纹的头号加速器
5.7. 防止发生层叠失效,是保障系统韧性的关键
5.7.1. 断路器和超时是克服层叠失效最有效的模式
5.7.2. 断路器模式通过避免向已经陷入困境的集成点发出调用请求,进而保护系统
5.7.3. 使用超时模式,可以确保对有问题的集成点的调用能及时返回
posted @
2023-06-19 06:46
躺柒
阅读(
62)
评论()
编辑
收藏
举报