出售本站【域名】【外链】

首页 AI人工智能软件 qqAI人工智能 微信AI人工智能 抖音AI人工智能 快手AI人工智能 云控系统 手机AI人工智能

【韧性架构设计】分布式系统的韧性

2022-07-09

由很多协同工做的微效逸构成的云本生使用步调架构造成为了一个分布式系统。确保分布式系统可用——减少其停机光阳——须要进步系统的弹性。弹性是运用进步可用性的战略。弹性战略的示例蕴含负载平衡、超时和主动重试、截行日期和断路器。

弹性可以通过不行一种方式添加到分布式系统中。譬喻,让每个微效逸的代码都包孕对具有弹性罪能的代码库的挪用,大概让非凡的网络代办代理办理微效逸乞求和回复。弹性的最末目的是确保特定微效逸真例的毛病或降级不会招致招致整个分布式系统停机的级联毛病。

正在分布式系统的高下文中,弹性是指分布式系统能够正在晦气状况发作时主动适应以继续效逸于其宗旨。

术语“可用性”和“弹性”具有差异的含意。可用性是分布式系统启动的光阳百分比。弹性是运用战略来进步分布式系统的可用性。

弹性的次要目的之一是避免一个微效逸真例的问题招致更多问题,那些问题晋级并最末招致分布式系统毛病。那被称为级联毛病。

弹性战略


分布式系统的弹性战略但凡用于 OSI 模型的多个层,如图所示。譬喻,物理和数据链路层(第 1 层和第 2 层)波及物理网络组件,譬喻取 Internet 的连贯,果此数据核心和云效逸供给商将卖力为那些层选择和施止弹性战略。


使用层是使用驻留的处所;那是人类用户(以及其余使用步调)间接取之交互的层。使用步调级(第 7 层)弹性战略内置于微效逸自身。组织的开发人员可以设想和编写使用步调,使其正在降级形态下继续工做,供给重要罪能,纵然其余罪能由于一个或多个微效逸的舛错、妥协或其余问题而失败。

正在风止的视频流使用步调的引荐罪能中可以看到此类罪能的一个示例。大大都时候主页包孕赋性化引荐,但假如相关的后端组件显现毛病,则会显示一系列通用引荐。此毛病不会影响您搜寻和播放视频的才华。

传输层(第 4 层)供给网络通信才华,譬喻确保牢靠的通信传输。网络级弹性战略正在第 4 层工做,以监控每个微效逸已陈列真例的网络机能,并将微效逸运用乞求定向到最佳真例。譬喻,假如某个特定的微效逸真例由于其所正在位置的毛病(譬喻网络中断)而进止响应乞求,则新乞求将主动定向到该微效逸的其余真例。

将云本生使用步调陈列为分布式系统的组织应思考网络和/或使用步调级其它弹性战略。正在那里,咱们将钻研云本生使用步调的四种此类战略:

负载均衡

超时和主动重试

截行日期

断路器

负载平衡、超时和主动重试撑持分布式系统组件的冗余。截行日期和断路器有助于减少分布式系统任何局部的降级或毛病的影响。

负载均衡


云本生使用步调的负载平衡可以正在 OSI 模型的多个层执止。就像咱们方才探讨的弹性战略一样,负载平衡可以正在第 4 层(网络或连贯级别)或第 7 层(使用步调级别)执止。

应付 Kubernetes,第 4 层负载均衡默许运用 kube-proxy 真现。它正在网络连贯级别平衡负载。Pod IP 地址的打点和虚拟/物理网络适配器之间的流质路由是通过容器网络接口 (CNI) 真现或笼罩网络(譬喻 Calico 或 Weave Net)来办理的。

回到第 4 层负载均衡,如因一个网络连贯每秒向一个使用步调发送一百万个乞求,而另一个网络连贯每秒向同一个使用步调发送一个乞求。负载均衡器不晓得那种不同;它只看到两个连贯。假如它将第一个连贯发送到一个微效逸真例,并将第二个连贯发送到第二个微效逸真例,它会认为负载是平衡的。

第 7 层负载平衡基于乞求自身,而不是连贯。第 7 层负载均衡器可以看到连贯中的乞求,并将每个乞求发送到最佳微效逸真例,那可以供给比第 4 层负载均衡器更好的均衡。正常来说,当咱们说“负载平衡”时,咱们指的是第 7 层负载平衡。另外,尽管第 7 层负载均衡可以使用于效逸或微效逸,但那里咱们只关注将其使用于微效逸。

应付云本生使用步调,负载平衡是指正在微效逸的运止真例之间平衡使用步调的乞求。负载均衡如因每个微效逸有多个真例;每个真例都有多个真例供给了冗余。只有可止,真例都是分布式的,果此假如特定效逸器以至站点显现毛病,并非任何微效逸的所有真例都将变得不成用。

抱负状况下,每个微效逸都应当有足够的真例,那样纵然发作毛病(譬喻站点中断),每个微效逸依然有足够的可用真例,以便分布式系统继续为其时须要它的所有人一般运止。

负载平衡算法


有很多用于执止负载平衡的算法。让咱们认实看看此中的三个。

轮询是最简略的算法。每个微效逸的真例轮流办理乞求。譬喻,假如微效逸 A 有三个真例——1、2 和 3——第一个乞求将发送到真例 1,第二个发送到真例 2,第三个发送到真例 3。一旦每个微效逸支到乞求,下一个乞求将分配给真例 1 以初步另一个循环通过真例。

起码乞求是一种负载均衡算法,它将新乞求分发给其时待办理乞求起码的微效逸真例。譬喻,如因微效逸 B 有四个真例,真例 1、2 和 3 如今划分办理 10 个乞求,但真例 4 只办理两个乞求。运用最小乞求算法,下一个乞求将转到真例 4。

会话亲和性,也称为粘性会话,是一种检验测验将会话中的所有乞求发送到雷同微效逸真例的算法。譬喻,假如用户 Z 正正在运用一个使用步调并招致乞求被发送到微效逸 C 的真例 1,这么正在同一用户会话中对微效逸 C 的所有其余乞求都将被定向到真例 1。

那些算法有很多变体——譬喻,加权但凡被添加到循环和最小乞求算法中,那样一些微效逸真例接管的乞求份额比其余微效逸真例更大或更小。譬喻,您可能欲望撑持但凡比其余人更快地办理乞求的微效逸真例。

正在理论中,径自的负载平衡算法但凡不能供给足够的弹性。譬喻,它们会继续向曾经失败且不再响应乞求的微效逸真例发送乞求。那便是添加超时和主动重试等战略的好处。

超时和主动重试


超时是任何分布式系统的根柢观念。假如系统的一局部发出乞求,而另一局部正在一定光阳内未能办理该乞求,则乞求超时。而后,乞求者可以运用系统毛病局部的冗余真例主动重试乞求。

应付微效逸,正在两个微效逸之间建设并强制执止超时。假如微效逸 A 的真例向微效逸 B 的真例发出乞求,而微效逸 B 的真例没有实时办理,则乞求超时。而后,微效逸 A 真例可以运用微效逸 B 的差异真例主动重试乞求。

无奈担保正在超时后重试乞求会乐成。譬喻,假如微效逸 B 的所有真例都有雷同的问题,则对此中任何一个的乞求都可能失败。但是,假如只要一些真例遭到影响——譬喻,一个数据核心的中断——这么重试很可能会乐成。

另外,乞求不应总是主动重试。一个常见的起果是防行不测复制曾经乐成的事务。如因从微效逸 A 到微效逸 B 的乞求被 B 乐成办理,但它对 A 的回复延迟或损失。正在某些状况下可以从头发出此乞求,但正在其余状况下则不止。

安宁事务是雷同乞求招致雷同结因的事务。那类似于 HTTP 中的 GET 乞求。GET 是一个安宁事务,果为它从效逸器检索数据但不会招致效逸器上的数据被变动。多次读与雷同的数据是安宁的,果此从头发出安宁事务的乞求应当没问题。安宁事务也称为幂等事务。

不安宁的事务是雷同乞求招致差异结因的事务。譬喻,正在 HTTP 中,POST 和 PUT 乞求是潜正在的不安宁事务,果为它们将数据发送到效逸器。复制乞求可能会招致效逸器不行一次地接管该数据并可能不行一次地办理它。假如买卖正正在授权付款或订单,您虽然不欲望它发作太多次。


截行日期


除了超时,分布式系统另有所谓的分布式超时,大概更常见的是截行日期。那些波及系统的两个以上局部。如因有四个互相依赖的微效逸:A 向 B 发送乞求,B 对其停行办理并将原人的乞求发送给 C,C 对其停行办理并向 D 发送乞求。回复以另一种方式运动,从 D 流向 C ,C 到 B,B 到 A。

下图形容了那种状况。如因微效逸 A 须要正在 2.0 秒内回复其乞求。正在最后期限内,完成乞求的剩余光阳取中间乞求一起挪动。那使每个微效逸能够劣先办理它支到的每个乞求,并且当它联络下一个微效逸时,它会通知该微效逸剩余的光阳。


断路器


超时和截行日期划分办理分布式系统中的每个乞求和回复。断路器对分布式系统有更多的“全局”视图。假如一个特定的微效逸真例没有回复乞求大概回复乞求的速度比预期的慢,这么断路器可能会招致后续乞求被发送到其余真例。

断路器通过为单个微效逸真例设置效逸降级或毛病程度的限制来工做。当真例赶过该级别时,会触发断路器并招致微效逸真例暂时进止运用。

断路器的目的是避免一个微效逸真例的问题对其余微效逸孕育发作负面影响并可能招致级联毛病。问题处置惩罚惩罚后,可以再次运用微效逸真例。

级联毛病但凡是由于针对教训降级或毛病的微效逸真例的主动重试而初步的。如因您有一个微效逸真例,乞求不堪重负,招致它响应迟缓。假如决路器检测到那一点并暂时阻挡新乞求进入真例,则真例有机缘逢上其乞求并规复。

但是,假如决路器不止动并且新乞求继续发送到真例,则该真例可能会彻底失败。那会强制所有乞求转到其余真例。假如那些真例曾经濒临容质,新乞求也可能使它们不堪重负并最末招致它们失败。那个循环继续下去,最末整个分布式系统都失败了。

运用库施止弹性战略


到目前为行,咱们曾经探讨了几多种弹性战略,蕴含三种模式的负载平衡加上超时和主动重试、截行日期和断路器。如今是时候初步思考如何施止那些战略了。

初度陈列微效逸时,施止弹性战略的最常见办法是让每个微效逸运用撑持一个或多个战略的范例库。Hystrix 便是一个例子,它是一个为分布式系统添加弹性特性的开源库。由 Netflix 开发到 2018 年,Hystrix挪用可以包裹正在一个微效逸中依赖于另一个微效逸乞求的任何挪用。弹性库的另一个示例是Resilience4j,它旨正在用于运用 Java 停行函数式编程。

通过使用步调库施止弹性战略虽然是可止的,但它其真不折用于所有状况。弹性库是特定于语言的,微效逸开发人员但凡为每个微效逸运用最好的语言,果此弹性库可能不撑持所有必要的语言。为了运用弹性库,开发人员可能必须运用供给不抱负机能或具有其余严峻缺陷的语言编写一些微效逸。

另一个问题是依赖库意味着为每个微效逸中的每个易受打击的挪用添加挪用包拆器。一些挪用可能会损失,一些包拆可能包孕舛错——让所有微效逸的所有开发人员一致地办工作是一个挑战。另有维护问题——将来每个处置惩罚微效逸工做的新开发人员都必须理解挪用包拆器。

运用代办代理施止弹性战略


跟着光阳的推移,基于库的弹性战略真现已被基于代办代理的真现所替代。

正常来说,代办代理位于两方之间的通信中间,并为那些通信供给某种效逸。代办代理但凡正在两方之间供给某种程度的分袂。譬喻,A 标的目的 B 方发出乞求,但该恳务真际上是从 A 发送到代办代理,代办代理办理该乞求并将原人的乞求发送给 B。A 和 B 不间接互相通信。

下图显示了那种通信流程的示例。一个会话发作正在微效逸 A 的真例及其代办代理之间,一个径自的会话发作正在 A 的代办代理和微效逸 B 的真例之间。A 到代办代理和代办代理到 B 会话怪异供给 A 和B.


正在分布式系统中,代办代理可以正在微效逸真例之间真现弹性战略。继续前面的示例,当微效逸 A 的真例向微效逸 B 发送乞求时,该恳务真际上会发送到代办代理。代办代理会办理 A 的乞求并决议它应当转到哪个微效逸 B 的真例,而后它会代表 A 发出乞求。

代办代理会监督来自 B 真例的回复,假如没有实时支到回复,它可以主动运用差异的微效逸 B 真例重试乞求。图中,微效逸 A 的代办代理有微效逸 B 的三个真例可供选择,它选择了第三个。假如第三个真例的响应速度不够快,则代办代理可以运用第一个或第二个真例来与代。

基于代办代理的弹性的次要劣点是无需批改单个微效逸便可运用非凡库;任何微效逸都可以被代办代理。

原文 https://www.jiagoushi.pro/resilience-distributed-systems 探讨:知识星球【首席架构师圈】大概加微信小号【ca_cto】大概加QQ群【792862318】 公寡号

【jiagoushipro】
【超级架构师】
出色图文详解架构办法论,架构理论,技术本理,技术趋势。
咱们正在等你,连忙扫描关注吧。

【ca_cea】
50000人社区,探讨:企业架构,云计较,大数据,数据科学,物联网,人工智能,安宁,全栈开发,DevOps,数字化.


QQ群

【792862318】深度交流企业架构,业务架构,使用架构,数据架构,技术架构,集成架构,安宁架构。以及大数据,云计较,物联网,人工智能等各类新兴技术。
加QQ群,有贵重的报告和干货量料分享。


视频号 【超级架构师】
1分钟快捷理解架构相关的根柢观念,模型,办法,经历。
每天1分钟,架构心中熟。


知识星球 【首席架构师圈】向大咖提问,近距离接触,大概与得私密量料分享。

喜马拉雅 【超级架构师】路上大概车上理解最新黑科技资讯,架构心得。 知识星球 意识更多冤家,职场和技术闲聊。 微博 【超级架构师】 哔哩哔哩 【超级架构师】

抖音 【cea_cio】超级架构师

快手 【cea_cio_cto】超级架构师

小红书 【cea_csa_cto】超级架构师

网站 CIO(首席信息官) https://cio.ceo
CIO,CTO和CDO https://cioctocdo.com
使用开发和开发平台 https://apaas.dev
开发信息网 https://xinxi.dev
首席架构师社区 https://jiagoushi.pro
超级架构师 https://jiagou.dev
企业技术培训 https://peixun.dev

谢谢各人关注,转发,点赞和点正在看。

热门文章

推荐文章

友情链接: 永康物流网 本站外链出售 义乌物流网 本网站域名出售 手机靓号-号码网