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.使用超时模式,可以确保对有问题的集成点的调用能及时返回