作家
登录

如何设计高可用的微服务架构

作者: 来源: 2017-09-13 15:05:01 阅读 我要评论


图:掉效备援缓存

不过须要留意的是,掉效备援缓存的数据可能是已经由时的数据,所以要确保这对于你的应用法度榜样来说是可接收的。

可以经由过程HTTP的标准响应头来设置缓存或掉效备援缓存。例如,经由过程max-age指定资本的最长过不时光,经由过程stale-if-error指定在产生故障时缓存的有效时光。

现代的CDN和负载均衡器供给了各类各样的缓存和掉效备援机制,你也可认为本身的公司创建合适本身应用的缓存解决筹划。

办事总会因各类原因产生掉效,比如收集问题等。不过,大年夜部分如许的缺点都是临时性的,而体系的自愈才能和高等负载均衡特点可以让应用实例在出现这些问题时仍然可以或许供给办事才能。掉效备援缓存在这个时刻就可以派上用处,它可认为应用法度榜样供给须要的数据。

重试

在某些情况下,我们无法缓存数据,或者我们想要更新缓存内容但更新掉败。在这个时刻,我们可以进行重试,因为我们认为相干资本稍后会从新恢复过来,或者负载均衡器会将请求发送给正常的实例。

在应用法度榜样里添加重试逻辑的时刻要十分当心,因为大年夜量的重试操作会让工作变得更糟糕,甚至导致应用法度榜样无法大年夜故障中恢复。

在分布式体系中,一个微办事体系可能会触发多个请求或重试操作,大年夜而产生级联效应。为了降低重试带来的影响,应当要限制重试的次数,可以应用指数退避(exponential backoff)算法来慢慢增长重试之间的延迟,直到达到重试的上限。

重试是由客户端(比如浏览器、其他微办事,等等)提议的,而客户端并不会知道之前请求处理是否成功,所以在进行重试时要留意处理幂等性问题。例如,在重试一个购买操妆厩?不该该反复计费。可认为每个事务应用独一的幂等性键,如许有助于解决幂等性问题。

速度限制规定了应用法度榜样在一个时光窗口内可以或许接收或处理的请求个数。经由过程速度限制,你可以在流量岑岭弃过滤掉落一些用户请求或发出请求的微办事,确保你的应用法度榜样不会出现过载。

你也可以是以限制低优先级的流量,将更多的资本竽暌古先用在处理更关键的事务上。

若何设计高可用的微办事架构
图:速度限制孀镛制流量岑岭

速度限制和负载倒注器(Shedder)

应用负载倒注器可以确保老是存在足够的资本来处理关键性的事务。它为高优先级的请求保存了一些资本,这些资本不会被用在低优先级的事务上。负载倒注器基于全部体系的状况来决定若何保存资本,而不是基于请求桶大年夜小。负载倒注器有助于体系在产生故障时进行恢复,因为在产生故障的时刻,它们仍能包管体系核心功能正常运行。Stripe的文┞仿里具体介绍了速度限制器和负载倒注器。

快速而自力地掉效

在微办事架构里,如不雅办事产生掉效,我们就要让它们快速而自力产生。我们可以应用隔板(bulkhead)模式在办事层面对问题进行隔离。稍后会对隔板模式进行更多的介绍。

如不雅办事组件产生掉效,那么就要让它尽快掉效,因为我们不想浪费太多时光等它产生超时。没有什么比一个被挂起的要乞降无响应的界面更让人认为沮丧的了,它不仅浪费了资本,也给用户体验造成影响。在办事生态体系里,办事之间互相调用,我们要防止挂起的请求操作造成雪崩效应。

你可能起首会想到为每个办事调用定义二级超不时光,但问题是,你无法确切地知道多长的超不时光擦?鲱合适的,因为有时刻收集故障等问题只会影响到一两个操作。很显然,如不雅是这种情况,那么就不该该因为少数的请求过时就拒绝其他请求。

可以说,在微办事架构里经由过程应用超时来实现快速掉效机制是一种反模式,所以应当尽量避免这么做。相反,我们可以应用回路断路器(circuit breaker)模式,它基于成功操作和掉败操作的统计结不雅来决定办事是否已经掉效。

微办事架构的风险

隔板

在造船业,隔板被用于将船隔成多个部分,如不雅船体产生泄漏,产生泄漏的部分就可以被零丁封闭。

隔板的概念也被应用在软件开辟里,用于分隔资本。

经由过程应用隔板模式,我们可以防止有限的资本被耗尽。例如,如不雅我们有两种针对数据库的操作,我们可以应用连个连接池,而不是一个。如许一来,如不雅有些操作超时或者过度应用了连接池,就不会对另一个连接池上的操作造成影响。

回路断路器

为了限制操作的时长,我们可认为操作定义超不时光。超机会制可以防止出现长时光的挂起操作,包管体系可以正常响应。不过,在微办事架构里应用固定的超机会制是一种反模式,因为我们的情况是高度动态的,所以几乎弗成能为每一种情况定义精确的限准时光。

我们可以应用回路断路器,而不是应用固定的超机会制。回路断路器的名字源竽暌冠真实世界的电子元件,因为它们的行动极其类似。它们可以保护资本,有助于进行体系恢复。在分布式体系里,它们可以或许起到很大年夜的感化,特别是当反复性的故障造成雪崩效应进而威逼到全部体系的时刻。

如不雅某种类型的缺点在一准时光段内多次产生,回路断路器就会断开。断开的回路断路器会阻拦后续的请求,就像电子元件里的断路器一样。回路断路器会在一段时光之后封闭,给底层的办事更多的空间进行恢复。

要记住,并不是所有的缺点都须要触发还路断路器。例如,你可能想要忽视客户端的一些问题,比如那些包含4xx响应码的请求,但同时想要保存5xx的办事器端缺点。有些回路断路器会出现半开闭状况。这个时刻,办事会发送一个请求来检测体系的可用性,同时拒绝其他的请求。如不雅检测体系可用性的请求成功返回,那么就会封闭断路器,持续处理后续的请求。不然的话,它就保持打开状况。

若何设计高可用的微办事架构


  推荐阅读

  中医药现代化用上大数据 未来还要有人工智能帮忙

51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦!“‘神农尝百草’一日遇七十毒,所得三百六十物后形成《神农本草经》。这是将人身作为测试‘mode>>>详细阅读


本文标题:如何设计高可用的微服务架构

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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