使用 Kubernetes 和 Istio 进行基于容器的全面服务监控
原文链接:https://www.infoq.com/articles/envoy-service-mesh-cascading-failure
作者:Jose Nino 作者:Daniel Hochman
译者:殷龙飞
关键要点 在过去的四年中,Lyft 已从单体架构转变为数百个微服务。随着微服务数量的增加,由于级联故障或意外内部拒绝服务导致的中断次数也在增加。 今天,这些故障情况在 Lyft 基础设施中基本上是一个已解决的问题。Lyft 部署的每项服务都通过使用 Envoy 代理自动获得吞吐量和并发保护。 Envoy 可以作为中间件部署或仅在请求入口时部署,但最大的好处来自于在应用程序本地的入口和出口部署它。在请求的两端部署 Envoy 允许它充当服务器的智能客户端和反向代理。 在接下来的几个月里,Lyft 将与 Netflix 的并发限制库背后的团队合作,将基于其库的系统带入 Envoy L7 过滤器。 级联故障是高吞吐量分布式系统中不可用的主要原因之一。在过去的四年中,Lyft 已从单体架构转变为数百种微服务。随着微服务数量的增加, 由于级联故障或意外内部拒绝服务导致的中断次数也在增加。今天,这些故障情况在 Lyft 基础设施中基本上是一个已解决的问题。 Lyft 部署的每项服务都会自动获得吞吐量和并发保护。通过对我们最关键的服务进行一些有针对性的配置更改,基于负载的事件减少了 95%,从而影响了用户体验。
在我们检查特定的故障情况和相应的保护机制之前,让我们首先了解如何在 Lyft 部署网络防御。Envoy 是一个 源自 Lyft 的代理, 后来开源并捐赠给 Cloud Native Computing Foundation 。Envoy 与许多其他负载均衡解决方案的区别在于它被设计为以“网格”配置部署。 Envoy 可以作为中间件部署或仅在请求入口时部署,但最大的好处来自于在应用程序本地的入口和出口部署它。在请求的两端部署 Envoy 允许它充当服务器的智能客户端和反向代理。 在双方,我们可以选择采用速率限制和断路来保护服务器免受各种情况下的过载。
核心概念 并发和速率限制 并发和速率限制是相关的,但不同的概念; 同一枚硬币的两面。在考虑限制系统负载时,运营商传统上会考虑每秒的请求数。 限制发送到系统的请求的速率的行为是速率限制的。通常进行压力测试以确定服务将变为过载的请求率,然后将限制设置在低于该点的某处。 在某些情况下,业务逻辑决定了速率限制。
在硬币的另一面,我们有并发性,即同时使用多少个单元。这些单位可以是请求,连接等。例如,我们可以考虑某个时间点的并发飞行请求数,而不是考虑请求率。 当我们考虑并发请求时,我们可以应用排队理论来确定服务在队列开始构建之前可以处理的并发请求数,请求延迟增加,以及服务因资源耗尽而失败。
全局与本地决策 Envoy 中的断路器是根据本机信息计算的。每个 Envoy 实例都会跟踪自己的统计数据并制定自己的断路决策。与全局系统相比,该模型具有一些优势。 第一个是可以在内存中计算限制,而无需对中央系统进行网络调用。第二个是限制随着集群的大小而扩展。第三,限制考虑了机器之间的差异, 无论它们是否收到不同的查询组合,或者在性能上有差异。
[Read More]