对于一些场景-比如数据库链接损掉,这个时刻实现高等的自我修复功能是颇为棘手的。在这种情况下,须要为应用添加额外的逻辑去处理这些特例,并且让外部体系知道办事的实例不须要急速从新启动。
故障转移缓存(Failover Caching)
因为收集问题和体系中的变革,办事平日会出现故障。然而,这些故障中断大年夜多是临时的,这要归功于自我修复和高等负载均衡的功能,我们应当找到一个解决筹划,能使办事即使在出现故障的时刻也能工作。这就是故障转移缓存(Failover Caching),它能赞助为我们的应用供给必须的数据。

故障转移缓存
特别须要提示的是,只有当供给过时的数据比没稀有据更好的情况下,才能应用故障转移缓存。
要设置缓存和故障转移缓存,可以在HTTP中应用标准响应头。
例如,应用max-age头可以指定某个资本为新资本的最大年夜时光(译者注:意即设定max-age后,浏览器不再发送请求到办事器)。可以应用stale-if-error 头去肯定在出现故障的情况下,大年夜缓存获取资本的时光长短。
重试逻辑(Retry Logic)
在某些情况下,我们可能无法缓存数据,或者想对数据进叙蹦更,然则操作最终掉败了。在这种情况下,我们就可以选择重试操作,因为我们可以预期资本将在一段时光后恢复,或者负载均衡会将请求发送到健康的实例上。
你应当当心肠为应用法度榜样和客户端添加重试逻辑,因为更大年夜量的重试操作可能会使工作变得更糟,甚至阻拦应用法度榜样恢复。
在分布式体系中,微办事体系重试可能会触发多个其他请求或重试操作,并导致级联效应。为削减重试带来的影响,你应当削减重试的数量,并应用指数退避算法(exponential backoff algorithm)来持续增长重试之间的延迟时光,直到达到最大年夜限制。
因为重试是由客户端(浏览器,其他微办事等)提议的,并且客户端在处理请求前后是不知道草走掉败的,你应当为你的应用法度榜样供给幂等处理才能。例如,当你重试购买操作时,不该该向客户收两次钱。给每个事务应用独一的幂等键(idempotency-key)是解决重试问题的办法。
限流器和负载开关(Rate Limiters and Load Shedders)
限流是指在一段时光内,定义某个客户或应用可以接收或处理若干个请求的技巧。例如,经由过程限流,你可以过滤掉落产生流量峰值的客户和微办事,或者可以确保你的应用法度榜样在主动扩大(Auto Scaling)掉效前都不会出现过载的情况。
你还可以阻拦较低优先级的流量,以便为关键事务供给足够的资本。

限流器可以阻拦流量峰值
别的有一种限流器,称为 “并发请求限流器(concurrent request limiter)”。当你有一些比较昂贵和重要的端点(endpoint),欲望它不该该被调用跨越指定的次数,但仍然想要供给流量办事时,这个限流器就十分有效了。
应用负载开关可以确保对于关键的事务总能供给足够的资本保障。它为高优先级的请求保存一些资本,并且不许可低优先级的事务去占用这些资本。负载开关会根据体系的┞符体状况做出决定,而不是基于单个用户的请求桶(request bucket)大年夜小。负载设备有助于你的体系恢复,因为它们在持续产生故障事宜时,依然能保持核心功能正常工作。
快速且零丁掉效(Fail Fast and Independently)
在微办事体系架构中,我们欲望办事可以快速、零丁地掉效。为了在办事层面隔离故障,我们可以应用隔板模式(bulkhead pattern)。可以在本文稍后看到相干介绍。
如今的CDN和负载均衡器供给了各类缓存和故障转移的解决筹划,然则你也可以在你的公司中建立一个共享库,个中包含这些标准的靠得住性解决筹划。
你想到的第一个办法,可能是对每个办事的调用都定义超时的级别。这种做法的问题是,你不克不及真正知道到底什么是恰当的超时价,因为当收集故障和其他问题产生时,某些情况下只会影响一两次操作。在这种情况下,如不雅只有个一一些产生超时,你可能不想拒绝所有这些请求。
我们可以说,经由过程应用超时(timeout)来实现微办事中的快速掉败是一种反模式,这是应当避免的。可以应用基于操作的成功/掉败筒计ノ数的熔断模式,而不是应用超时。
舱壁模式(Bulkheads)
在工业范沉闼楝常应用舱壁将划分为几个部分,以便在有某部分船体产生决裂时,其他部分依然能密封安然无事。
经由过程应用舱壁模式,我们可以保护有限的资本不被用尽。例如,如不雅我们有两种类型的操作的话,它们都是和同一个数据库实例进行通信,并且数据据库限制连接数,这时我们可以应用两个连接池而不是应用一个共享的连接池。因为这种客户端和资本分别,超时或过度应用池的操作不会令所有其他操作掉效。
泰坦尼克号沉没的重要原因之一是其舱壁设计掉败,水可以经由过程膳绫擎的船面倒在舱壁的顶部,最后全部船吞没。

泰坦尼克号故障的舱壁
断路器(Circuit Breakers)
为了限制操作的持续时光,我们可以应用超时。超时可以防止挂起操作并包管体系可以响应。然而,在微办事架构通信中应用静态、微调的超时是一种反模式,因为我们处于高度动态的情况中,几乎弗成能肯定在每种情况下都能正常工作的精确的时光限制。
推荐阅读
曾几何时,OICQ、QQ、MSN等专注于即时通信的平台独树一帜,将即时通信打造为PC时代的三大年夜盈利模式之一。如今,移动互联网已渗入生活的“骨髓”,即时通信已无处不在,成为几>>>详细阅读
本文标题:避免大规模故障的微服务架构设计之道
地址:http://www.17bianji.com/lsqh/37626.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示