「前所未有!」服务网格与 Envoy Gateway,客户端可用性和弹性双提升,完美演绎 IT 新时代!

本文主要是介绍「前所未有!」服务网格与 Envoy Gateway,客户端可用性和弹性双提升,完美演绎 IT 新时代!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片

目录

如何从客户端角度思考服务的可用性和弹性

每个服务都有一个“网关”

以三个九的价格获得五个九的高可用能力:一个真实的案例

服务网格中的客户端负载均衡:超越组件之和

重试

异常检测

断路器

超时

限流

低成本下的高感知可用性

下一步

参考链接


如何从客户端角度思考服务的可用性和弹性

这是一系列关于 Envoy Gateway 价值的文章之一,该网关已经达到了 1.0 版本的发布里程碑,可以投入生产使用。

在讨论可用性和弹性时,我们通常是从基础设施和服务的角度来探讨的。我们很少考虑是否可以在客户端采用某种方法来提高后端服务的“实际感知可用性”(即在客户端测量到的服务的可用性)。这主要是因为我们在大部分情况下都无法控制客户端与服务的交互方式。但实际上我们有办法对客户端和服务之间的交互进行控制,从而提高客户端对服务的“实际感知可用性”。

本文将讨论服务网格如何通过下面这六种方式提高客户端对服务的“感知可用性”,从而增强系统的整体弹性:

  1. 1. 客户端负载均衡

  2. 2. 重试

  3. 3. 超时

  4. 4. 断路器

  5. 5. 异常检测

  6. 6. 限流

本文将依次介绍每种功能及其提供的价值。但需要注意的是,虽然每种功能单独提供了一些好处,但只有它们共同作用,才能为真正地为我们的系统提高可用性。

每个服务都有一个“网关”

我们可以在后端服务的入口或 API 网关处控制“客户端”的行为,通过使用网关保护我们的内部系统免受外部发生的任何异常情况的影响。在该网关处,我们可以实现诸如负载均衡、重试、超时、限流等众所周知的模式。随着服务网格的引入,我们在基础设施中为每个服务都都部署了一个“网关” —— 服务网格的边车。边车不仅在服务器端起作用,提供(m)TLS 和策略执行点。它还在客户端(调用者)端提供了重要的功能。由于网格提供了集中式控制,服务所有者可以轻松地为调用其服务的客户端设置默认行为。因此,我们不再只是从基础设施故障域、数据库影响范围等服务的角度来讨论系统的弹性,还可以从客户端如何与服务器通信的角度对此进行讨论。

边车为客户端带来的第一个最重要的功能是客户端负载均衡。边车中有客户端可能要与之通信的每个服务实例的信息,在客户对外通信时直接在这些服务实例之间进行流量负载均衡。该模式中流量直接从客户端到服务器,而无需通过中央负载均衡器(如F5)这样的中间人。同时,由于我们在客户端处理负载均衡,网格还可以提供一系列其他强大的工具。

以三个九的价格获得五个九的高可用能力:一个真实的案例

为了提供一个采用这些工具改善应用程序的感知可用性能力的真实证据,可以看一下我在上一个雇主那里工作时的一个服务。该服务主要方法对外宣称的 SLA 是五个九:在保持 P90 时延为 10ms 以内的同时可用性达到 99.9995%。(习惯于使用高可用性系统的人会意识到实现这种稳定运行时间所需的成本。对于不了解的人,我使用的经验法则是:“从1000美元开始,每增加一个9,就增加一个零”。当然,短时间内也许可以更便宜,但如果要长时间(多年)维持该可用性稳定运行,那么这大概就是要考虑的正确成本。)

与其通过构建昂贵的服务器端的能力来提供这种高可用性,我们可以以较低的成本构建一个“厚客户端”来实现相同的高可用性能力,该“厚客户端”采用服务网格的边车来提供这些能力。使用该客户端的重试、超时、异常检测、断路器——以及一些高级模式,如请求对冲¹——我们能够交付一个感知可用性满足五个九目标的系统,而后端本身则只需提供了略高于三个九(99.95%)的可用性。由于我们能够隔离我们的故障域,结合智能的客户端行为,我们可以使请求的失败“看起来”是不相关的。

服务网格中的客户端负载均衡:超越组件之和

客户端负载均衡意味着客户端知道它们可以与之通信的所有可能的后端,并且可以在和某服务通信时选择该服务的任意一个实例。我们可以使用各种不同的算法来选择负载均衡的服务器端点。在这个基本功能上,我们可以建立我们列表中的其他能力。

重试

重试有助于减轻瞬时故障的影响。在后端存在不稳定性、不可靠网络、服务器过载和故障等情况下,重试使我们有能力尝试使用不同的后端来处理同一请求,在各个后端的故障是不相关的情况下,重试可能成功。Envoy 会避免将重试请求发送到任何已经失败的后端上——在部署了足够多的后端的情况下,Envoy 会保证重试请求会发送到一个新的后端服务。然而,盲目地重试也会导致问题,下面的两个功能可以帮助解决这个问题。

异常检测

异常检测是一种被动的服务健康检查,异常检测观察每个服务实例如何响应来自客户端的请求,并标记那些与其他实例相比表现不佳的实例(例如,连续返回错误或反复超时的实例)。如果一个实例持续表现不佳,则将其从活动负载均衡实例池中移除——换句话说,Envoy 将暂时停止向其发送流量。对于异常的实例, Envoy 采用下面的策略判断其状态是否恢复:Envoy 将逐步尝试向先前表现不佳的实例发送流量,以查看它们是否恢复正常。如果恢复正常,则将被放回到活动负载均衡池中,重新参与正常的流量分发。

当我们将异常检测与重试结合在一起时,对于单个请求,我们可以避免向已知的异常实例发送重试;通过汇总分析所有请求,客户端可以了解每个实例的健康状况,并更倾向于向行为良好的实例发送流量。

断路器

断路器有助于限制每个客户端到每个后端的最大并发数量——由于存在正在进行的重试,使用断路器来避免由于大量重试而导致的级联故障至关重要!断路器限制并发,包括连接的生存时间、客户端和每个后端服务器之间的最大 TCP 连接数、每个后端服务器上允许的最大 HTTP 请求数量等等。当一个服务实例触发断路器时,它会触发该端点的异常检测,将其移出活动负载均衡池。

因此,当我们将重试、异常检测和断路器三者结合在一起时,我们得到了一个强大的客户端,可以继续将流量转发到正常工作的后端,并避免异常的后端,同时不会因为超载系统而导致其他故障。

超时

大量的重试也会对系统产生更重的资源负担——即使服务端失败了,接受和处理请求也会消耗服务端的资源!因此,限制系统的行为非常重要:不仅可以减少用户可能遇到的最坏延迟,还可以避免太多请求导致的资源消耗(当请求超时时,Envoy 可以选择执行关闭到服务器的连接等操作,表示应该停止请求“浪费”的工作)。超时通过限制客户端等待服务器响应的时间(总体和每次重试)来限制消耗的系统资源。一旦超时时间到达,Envoy 将关闭连接并向调用方返回超时错误,释放客户端和服务器端的资源。

限流

超时有助于限制我们在任一请求上花费的资源,限流则有助于限制系统中同时存在的请求总数。我们可以将超时和重试看作控制的深度(为任一请求等待/支付的成本),而将限流看作控制的宽度(某一时刻的服务总量)。限流制旨在保护服务器不会被大量并发的客户端压垮,而断路器则有助于保护服务器不会被特定的单一客户端压垮。

可以将限流视为保护服务器的共享资源免受过载的影响,而断路器则保护服务器的每个单个实例免受过载的影响。

Envoy 支持进行本地限流,每个 Envoy 实例跟踪其看到的请求并应用速率限制。这在将 Envoy 作为入口网关使用时是非常有用的。Envoy 也支持“全局”限流,其限流的额度由所有 Envoy 实例共享。全局限流需要部署一个用于存储速率限制的 Redis 实例,以及一个位于其前面的限流服务器。Tetrate Enterprise Gateway for Envoy (TEG)²—Tetrate 针对 Envoy Gateway³ 的企业版本中提供了全局限流所需的所有组件,并以 helm chart 的方式进行发布。

当你的服务是无状态服务时,通常情况下,你不需要引入速率限制及其所需要的额外机制就能达到很好的效果(无状态服务具有较好的伸缩性,如果一个实例被过多的请求所淹没,你可以在短时间内简单地增配更多实例)。

低成本下的高感知可用性

通过本文的介绍,希望您能清楚地理解为什么我们需要一起讨论所有这些功能,而不只是是单独讨论其中任何一个。完整考虑到您系统中的不同故障模式和资源约束,并构建一套全面的客户端策略——结果是以较低的成本获得显著提高的客户端感知可用性。

下一步

Envoy Gateway (EG)³ 是由 Envoy 社区驱动的一个项目,旨在简化 Envoy 的使用和操作,使其成为网关的首选。它专注于易用性,让常见用例变得简单,并利用 Kubernetes Gateway API⁴ 来管理 Envoy 和对外暴露应用。Tetrate 协助启动了 EG 项目并持续对其进行大量投入。

Tetrate 提供了一款企业级的 Envoy 网关分发产品——Tetrate Enterprise Gateway for Envoy ——您可以立即开始使用。欢迎查看文档以了解更多信息并试用⁵。

参考链接

  1. 1. https://grpc.io/docs/guides/request-hedging

  2. 2. https://tetrate.io/tetrate-enterprise-gateway-for-envoy

  3. 3. https://gateway.envoyproxy.io

  4. 4. https://gateway-api.sigs.k8s.io

  5. 5. https://docs.tetrate.io/envoy-gateway

  6. 6. https://tetrate.io/blog/client-side-availability-and-resiliency-with-envoy-gateway

这篇关于「前所未有!」服务网格与 Envoy Gateway,客户端可用性和弹性双提升,完美演绎 IT 新时代!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918181

相关文章

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

内卷时代无人机培训机构如何做大做强

在当今社会,随着科技的飞速发展,“内卷”一词频繁被提及,反映了各行业竞争日益激烈的现象。对于无人机培训行业而言,如何在这样的时代背景下脱颖而出,实现做大做强的目标,成为每个培训机构必须深思的问题。以下是从八个关键方面提出的策略,旨在帮助无人机培训机构在内卷时代中稳步前行。 1. 精准定位市场需求 深入研究市场:通过市场调研,了解无人机行业的最新趋势、政策导向及未来发展方向。 明确目标

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止