作家
登录

避免大规模故障的微服务架构设计之道

作者: 来源: 2017-09-28 09:37:22 阅读 我要评论

对于一些场景-比如数据库链接损掉,这个时刻实现高等的自我修复功能是颇为棘手的。在这种情况下,须要为应用添加额外的逻辑去处理这些特例,并且让外部体系知道办事的实例不须要急速从新启动。

故障转移缓存(Failover Caching)

因为收集问题和体系中的变革,办事平日会出现故障。然而,这些故障中断大年夜多是临时的,这要归功于自我修复和高等负载均衡的功能,我们应当找到一个解决筹划,能使办事即使在出现故障的时刻也能工作。这就是故障转移缓存(Failover Caching),它能赞助为我们的应用供给必须的数据。

避免大年夜范围故涨9依υ?办事架构设计之道
故障转移缓存

特别须要提示的是,只有当供给过时的数据比没稀有据更好的情况下,才能应用故障转移缓存。

要设置缓存和故障转移缓存,可以在HTTP中应用标准响应头。

例如,应用max-age头可以指定某个资本为新资本的最大年夜时光(译者注:意即设定max-age后,浏览器不再发送请求到办事器)。可以应用stale-if-error 头去肯定在出现故障的情况下,大年夜缓存获取资本的时光长短。

重试逻辑(Retry Logic)

在某些情况下,我们可能无法缓存数据,或者想对数据进叙蹦更,然则操作最终掉败了。在这种情况下,我们就可以选择重试操作,因为我们可以预期资本将在一段时光后恢复,或者负载均衡会将请求发送到健康的实例上。

你应当当心肠为应用法度榜样和客户端添加重试逻辑,因为更大年夜量的重试操作可能会使工作变得更糟,甚至阻拦应用法度榜样恢复。

在分布式体系中,微办事体系重试可能会触发多个其他请求或重试操作,并导致级联效应。为削减重试带来的影响,你应当削减重试的数量,并应用指数退避算法(exponential backoff algorithm)来持续增长重试之间的延迟时光,直到达到最大年夜限制。

因为重试是由客户端(浏览器,其他微办事等)提议的,并且客户端在处理请求前后是不知道草走掉败的,你应当为你的应用法度榜样供给幂等处理才能。例如,当你重试购买操作时,不该该向客户收两次钱。给每个事务应用独一的幂等键(idempotency-key)是解决重试问题的办法。

限流器和负载开关(Rate Limiters and Load Shedders)

限流是指在一段时光内,定义某个客户或应用可以接收或处理若干个请求的技巧。例如,经由过程限流,你可以过滤掉落产生流量峰值的客户和微办事,或者可以确保你的应用法度榜样在主动扩大(Auto Scaling)掉效前都不会出现过载的情况。

你还可以阻拦较低优先级的流量,以便为关键事务供给足够的资本。

避免大年夜范围故涨9依υ?办事架构设计之道
限流器可以阻拦流量峰值

别的有一种限流器,称为 “并发请求限流器(concurrent request limiter)”。当你有一些比较昂贵和重要的端点(endpoint),欲望它不该该被调用跨越指定的次数,但仍然想要供给流量办事时,这个限流器就十分有效了。

应用负载开关可以确保对于关键的事务总能供给足够的资本保障。它为高优先级的请求保存一些资本,并且不许可低优先级的事务去占用这些资本。负载开关会根据体系的┞符体状况做出决定,而不是基于单个用户的请求桶(request bucket)大年夜小。负载设备有助于你的体系恢复,因为它们在持续产生故障事宜时,依然能保持核心功能正常工作。

快速且零丁掉效(Fail Fast and Independently)

在微办事体系架构中,我们欲望办事可以快速、零丁地掉效。为了在办事层面隔离故障,我们可以应用隔板模式(bulkhead pattern)。可以在本文稍后看到相干介绍。

如今的CDN和负载均衡器供给了各类缓存和故障转移的解决筹划,然则你也可以在你的公司中建立一个共享库,个中包含这些标准的靠得住性解决筹划。

你想到的第一个办法,可能是对每个办事的调用都定义超时的级别。这种做法的问题是,你不克不及真正知道到底什么是恰当的超时价,因为当收集故障和其他问题产生时,某些情况下只会影响一两次操作。在这种情况下,如不雅只有个一一些产生超时,你可能不想拒绝所有这些请求。

我们可以说,经由过程应用超时(timeout)来实现微办事中的快速掉败是一种反模式,这是应当避免的。可以应用基于操作的成功/掉败筒计ノ数的熔断模式,而不是应用超时。

舱壁模式(Bulkheads)

在工业范沉闼楝常应用舱壁将划分为几个部分,以便在有某部分船体产生决裂时,其他部分依然能密封安然无事。

经由过程应用舱壁模式,我们可以保护有限的资本不被用尽。例如,如不雅我们有两种类型的操作的话,它们都是和同一个数据库实例进行通信,并且数据据库限制连接数,这时我们可以应用两个连接池而不是应用一个共享的连接池。因为这种客户端和资本分别,超时或过度应用池的操作不会令所有其他操作掉效。

泰坦尼克号沉没的重要原因之一是其舱壁设计掉败,水可以经由过程膳绫擎的船面倒在舱壁的顶部,最后全部船吞没。

避免大年夜范围故涨9依υ?办事架构设计之道
泰坦尼克号故障的舱壁

断路器(Circuit Breakers)

为了限制操作的持续时光,我们可以应用超时。超时可以防止挂起操作并包管体系可以响应。然而,在微办事架构通信中应用静态、微调的超时是一种反模式,因为我们处于高度动态的情况中,几乎弗成能肯定在每种情况下都能正常工作的精确的时光限制。


  推荐阅读

  破局移动时代即时通讯 云服务路在何方?

曾几何时,OICQ、QQ、MSN等专注于即时通信的平台独树一帜,将即时通信打造为PC时代的三大年夜盈利模式之一。如今,移动互联网已渗入生活的“骨髓”,即时通信已无处不在,成为几>>>详细阅读


本文标题:避免大规模故障的微服务架构设计之道

地址:http://www.17bianji.com/lsqh/37626.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)