写点什么

Netflix 为 Envoy 开发新功能,实现零配置服务网格

作者:Claudio Masolo

  • 2023-10-06
    北京
  • 本文字数:1208 字

    阅读完需:约 4 分钟

大小:715.05K时长:04:04
Netflix为Envoy开发新功能,实现零配置服务网格

Netflix 在这篇文章中描述了他们为什么与 Envoy 社区和Kinvolk合作为 Lyft 开源的代理Envoy实现了一项新功能。这个叫作按需集群发现的新功能帮助 Netflix 实现了零配置服务网格。


进程间通信(IPC) 对于 Netflix 来说至关重要。自 Netflix 从 2010 年将所有基础设施转移到云端(AWS),就一直需要使用针对云原生环境的工具。其中一些工具是商业版的,一些是内部开发的。为了方便管理 IPC,Netflix 开发了用于服务发现的Eureka和用于 IPC 的Ribbon。Eureka 的主要目标是用虚拟 IP(VIP)抽象目标服务的名称,并且如果有必要的话还可以确保与安全虚拟 IP(VIP)的安全通信。目标服务名称和通信类型(安全或不安全)是服务连接到另一个服务所需的信息。IPC 客户端使用目标 VIP 或 SVIP 实例化,Eureka 客户端负责 VIP 或 SVIP 和端口到 IP 的转换,从 Eureka 服务器获取信息。其缺点是从负载均衡器迁移到 Eureka 存在单点故障问题。



使用Eureka的IPC


这种架构存在了很长时间,不过 Netflix 因为一些原因需要迁移到服务网格,主要的三个原因如下:


  1. 现在使用了RESTgraphQLgRPC混合的 IPC 技术。

  2. 已经从 Java 基础架构迁移到了多语言架构。

  3. 向 IPC 客户端中添加功能。


Netflix 决定使用 Envoy 集中实现 IPC 功能集,并让使用各种语言开发的客户端尽可能简单。此外,Envoy 支持发现抽象(Discovery Abstraction),因此 IPC 客户端可以继续使用它。缺点是 Envoy 需要在代理配置中指定集群,这对 Netflix 架构来说是个问题,因为一个服务可能与十几个集群进行通信。此外,Netflix 的架构是不断变化的,这意味着集群会随着时间的推移而变化。为了解决这个问题,Netflix 团队调研了一些方案:


  • 让服务所有者定义他们的服务需要通信的集群。

  • 根据服务的调用图自动生成 Envoy 配置。

  • 将所有的集群信息推送给每个应用。


但所有这些方案都存在缺点,因此他们最终的解决方案是在运行时按需获取集群信息。为了实现这个解决方案,Envoy 需要一个新特性。于是,Envoy 社区、Netflix 和 Kinvolk 合作开发了按需集群发现(ODCDS) 功能。现在,代理可以在第一次连接时查找集群信息。新的流程如下:


  1. 客户端的请求进入 Envoy;

  2. 根据主机地址提取目标集群信息。如果集群是已知的,进入步骤 7;

  3. 如果集群不存在,请求被暂停;

  4. 向控制平面上的集群发现服务(CDS)端点发出请求。控制平面根据服务的配置和 Eureka 注册信息生成自定义 CDS 响应;

  5. Envoy 拿到集群信息(CDS),通过端点发现服务(EDS)拉取端点信息,然后根据 VIP 或 SVIP 的 Eureka 状态信息返回集群的端点;

  6. 客户端的请求继续;

  7. Envoy 像往常一样处理请求:使用负载均衡算法选择一个端点并发出请求。



使用Eureka和Envoy的IPC


这个流程的执行速度为毫秒级,但在某些场景中,服务需要更低的延迟。为了解决这个问题,目前的解决方案有:


  1. 服务需在发出第一个请求之前预先定义目标集群或建立主要连接。

  2. 在代理启动时,根据历史请求模式从控制平面预推送集群信息。


Netflix 和 Envoy 社区将继续合作改进 Envoy。


原文链接

https://www.infoq.com/news/2023/09/zero-config-service-mesh-netflix/

2023-10-06 08:004594

评论

发布
暂无评论
发现更多内容

一款开源的Diffy自动化对比测试框架:超详细实战讲解

狂师

开源 测试 测试驱动开发实战营 自动化测试

面向对象设计原则

陈皮

架构师训练营第二周总结

极客大学架构师训练营

Libra教程之:Libra testnet使用指南

程序那些事

比特币 区块链 以太坊 libra blockchain

重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」

小傅哥

设计模式 小傅哥 重构 代码优化

Libra教程之:来了,你最爱的Move语言

程序那些事

比特币 区块链 以太坊 libra blockchain

【架构师训练营】第2周总结

花生无翼

极客大学架构师训练营

如何高效开会?

石云升

高效工作 时间管理 高效 开会

[Redis源码阅读]redis持久化

老胡爱分享

数据库 redis 缓存 持久化

架构师训练营第二周总结:软件开发简史和框架设计的方法

hifly

设计模式 极客大学架构师训练营

第二周作业

大雄

依赖倒置

听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理

小林coding

面试 计算机网络 计算机基础

「架构师训练营」第 2周作业

旭东(Frank)

架构 极客大学架构师训练营

架构师训练营作业 --Week2

吴炳华

极客大学架构师训练营

BAT面试题汇总:分布式+Dubbo +JVM+微服务+多线程+Spring附答案(建议收藏)

程序员生活志

Java spring 面试 分布式 mybatis

架构师训练营-week2命题作业

J.Smile

极客大学架构师训练营

学习一下:我的学习之道

非著名程序员

学习 程序员 程序人生 提升认知

为什么 Vue 更符合这个时代的大势所趋

葡萄城技术团队

Vue SpreadJS

Spring BeanPostProcessor 你不能不知道的事

CoderLi

Java spring 程序员 源码分析 后端

2020年6月17日 MySQL基准测试

瑞克与莫迪

【架构师第二周】总结

浪浪

基于 Docker 实现 MySQL 主从复制

ytao

MySQL Dockerfile

架构师训练营-第二周-作业1

狂奔嘀兔纸

极客大学架构师训练营

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十二)编写测试-超时

编程道与术

Java 编程 TDD 单元测试 JUnit

Redis系列之扫盲篇(一)

z小赵

Java 分布式 高并发系统设计

0616作业2

Geek_10

「架构师训练营」第2周作业 - 设计原则

guoguo 👻

极客大学架构师训练营

Libra教程之:运行自定义move modules

程序那些事

比特币 区块链 以太坊 libra blockchain

第二周总结

changtai

程序员开发色情游戏,赴日寻找AV女优真人拍摄,结果...

程序员生活志

程序员 游戏开发

依赖倒置原则理解

Thrine

Netflix为Envoy开发新功能,实现零配置服务网格_DevOps & 平台工程_InfoQ精选文章