Reddit引入Envoy支持架构改造,性能显著提升

2019 年 2 月 12 日

Reddit引入Envoy支持架构改造,性能显著提升

Reddit引入Envoy到其后端框架,作为服务到服务代理以支持其正在进行的架构改进。通过采用Envoy作为服务到服务第4层/第7层代理,他们发现在可观察性、易采用性和性能上有显著的改进。


Reddit 引入 Envoy 到其后端框架,作为服务到服务代理以支持其正在进行的架构改进。随着其架构从单体架构发展到更小的服务,支持和调试其现有框架极为复杂,变得过于昂贵。通过采用 Envoy 作为服务到服务第 4 层/第 7 层代理,他们发现在可观察性、易采用性和性能上有显著的改进。


根据 Reddit 的资深软件工程师Courtney Wang的说法, 在过去的三年中,Reddit 工程团队的规模和产品复杂性上已经有了显著的增加。这与其后端架构的改进并行进行,因为他们从单一应用程序转向,开始采用更加面向服务的架构 。这些改变已经增加了他们调试其应用程序方式的复杂性,从调查函数调用转变成了跟踪多个服务之间的 RPC。此外,在提供新服务时,工程师需要考虑的注意事项数量也变多了,如今包括了解客户请求行为、重试处理、断路和粒度路由控制。


自从 Reddit 开始把服务从其整体中分离出来,他们一直在使用 Airbnb 的SmartStack作为其服务网格。当建立及拆除服务实例时,由 SmartStack Nerve处理注册问题。Nerve 是一个Ruby处理进程,在每个实例上运行边车并把它们注册到一个中央Zookeeper集群中。为了简化程序开发人员的工作,Reddit 开发了Baseplate,这是一个提供健康检查界面和连接到 Nerve 抽象层的通用框架。


Reddit 利用Synapse(每个实例的 Ruby 进程)来管理其服务端点的发现。Synapse 读取 Nerve 填充的 Zookeeper 注册表,然后把端点条目写入本地HAProxy配置文件。HAProxy 作为边车进程运行,处理下流服务流量的代理和负载平衡。



最初的 Reddit 服务架构(来源:Reddit


尽管 SmartStack 的实现保持了相对不变和可操作性,但是,其不断发展的基础架构已经开始不断挑战 SmartStack 所能提供的极限。正如 Courtney Wang 所指出的,这导致团队重新评估服务网格的全景,看看替换它们是否有意义。他们希望解决的关键痛点是:


  • Nerve和Synapse只能接受静态配置、服务注册更新所需的Puppet配置更改以及跨其服务集群的更新

  • Synapse的HAProxy配置编写器只提供基本的路由定义

  • 由于HAProxy不理解Thrift(Reddit的主要内部协议),它们对通过HAProxy的流量的观察能力很低


在选取一个新的服务网格的候选者时,Courtney Wang 指出,他们的关键需求是确保对性能无影响、获得代理中的第 7 层 Thrift 的支持,并易于扩展及集成新工具。该团队决定采用 Envoy,因为它符合这些要求,并且他们认为这些权衡是可以接受的。


Envoy 最大的问题是缺乏一流 Thrift 的支持。Courtney Wang 回忆道,他们和 Turbine Labs(Turbine Labs 最近宣布支持 Envoy)合作,为 Thrift 支持合同开发。借助该合作关系,他们可以引入Thrift支持的代理路由、请求/响应指标和速率限制


他们部署 Envoy 的第一个步骤是取代 HAProxy 以获得基本的 TCP 代理支持。Nerve 和 Synapse 仍将处理服务注册和发现,这意味着它们将无法利用 Envoy 的动态发现服务。这允许他们保持其服务发现层的稳定,同时将 Envoy 部署到生产环境中。通过并行运行 HAProxy 和 Envoy,监听不同的端口,它们能够通过调整配置简单地回滚。这也允许它们针对其 HAProxy 配置审核 Envoy 配置,以验证其Synapse配置生成器的准确性。



引入 Envoy 过程中的 Reddit 架构(来源:Reddit


Courtney Wang 表示,Envoy 现在已经顺利地为生产流量服务了近 4 个月了。他说,没有停止的问题,但是,描述了 Envoy 的网络连接处理与 HAProxy 的不同,导致在应用程序连接管理代码中出现意外错误。


借助 Envoy 和新的Thrift过滤器,他们发现在网络层有更好的可观察性,包括请求和响应指标,它们在应用程序代码没有更改前是无法获得的。因为 HAProxy 仍然作为边车运行,以便在此过渡期间快速回滚,所以,它们还未能对服务延迟进行准确测量。


随着在代理级采用 Envoy 管理第 4 层流量的成功,Reddit 计划下一步是部署 Enovy 的发现服务 API,该 API 由集中式配置存储支持 。进一步达成的计划包括调查在边缘运行的 Envoy,以取代 HAProxy(针对核心 Reddit 后端应用程序服务)和 AWS ALBs(针对其部分外部入口点)作为负载平衡器。Courtney Wang 认为,这将提供更好的可观察性和服务路由控制,如:遮蔽入站流量和边缘的流量转移。最近,eBay 进行了类似的迁移,利用Envoy取代外部入口点的物理负载平衡器,并报告了 Courtney Wang 及团队所期望实现的一些成功。Courtney Wang 希望,更进一步采用 Envoy 将有助于团队把其单一的应用程序拆分成更小的服务。


阅读英文原文:Adopting Envoy as a Service-to-Service Proxy at Reddit


2019 年 2 月 12 日 10:356044
用户头像

发布了 199 篇内容, 共 64.2 次阅读, 收获喜欢 270 次。

关注

评论

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

小程序云开发实战:从0搭建科技爱好者周刊小程序

薛定喵君

微信小程序 小程序云开发 云开发

来自阿里面试官的Java面试连珠炮,让你自由发挥你能撑到哪一步?

Geek_71bb95

Java 程序员 架构 面试 编程语言

Vidyo的技术特点都有哪些?

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

你有时间吗?

池建强

时间

30 岁的码农人生 ——人生至暗时,你依然能窥见光明

cxuan

程序员 程序人生 感悟

分布式文件存储QoS硬核黑科技,真香

焱融科技

高性能 存储 HPC 分布式文件存储 QoS

我服了,难倒无数程序员的源码面试,就这样被轻轻松松讲透彻

小Q

Java 学习 源码 架构 面试

以A.I.之力打破方言沟通障碍 科大讯飞重磅发布智慧翻译系统

Talk A.I.

一文读懂GaussDB(openGauss) 的六大关键技术特性

华为云开发者社区

数据库 数据 存储

搜狗搜索或成为企鹅号流量入口:腾讯欲实现自己的流量闭环

石头IT视角

API生态的发展与机遇:从5000组数据看中国API生态与开发者现状

华为云开发者社区

华为 API

如何生成 Flink 作业的交互式火焰图?

Apache Flink

flink

.NET可视化权限功能界面设计

力软.net/java开发平台

.net 可视化 权限

uni-app支持PC宽屏适配

崔红保

uni-app 前端框架

程序员不愿意说的秘密!Java进阶架构师必看:架构完美设计+程序员三门课+架构修炼之道

Java架构追梦

爬虫“学前班”,记住这些不踩坑!

华为云开发者社区

爬虫 数据 搜索

求职时这样回答问题你就输了!来自IT类面试官视角的深度解读

华为云开发者社区

面试 软件开发

10 张图打开 CPU 缓存一致性的大门

小林coding

缓存 cpu 操作系统 计算机

架构师训练营第六周作业

Geek_4c1353

基于阿里云容器的CI/CD落地实践

LorraineLiu

阿里云 k8s Helm jenkins CI/CD

【JSRC小课堂】Web安全专题(一)认证缺失和认证缺陷漏洞

京东智联云开发者

WEB安全

即构SDK10月迭代:新增多款语音音效、外部采集码流控制及Android SDK 最低支持操作系统版本调整

ZEGO即构

android RTC

「深度解析」告诉你如何选择容器存储

焱融科技

Kubernetes 云原生 焱融科技 容器存储 分布式文件存储

接口测试工具

测试人生路

接口文档 接口测试

最近程序员频繁被抓,如何避免面向监狱编程!?

Java架构师迁哥

大企程序员亲身经历告诉你,CRM系统,自己的才是最好的

Learun

敏捷开发

WebSocket-技术专题-服务器端消息推送

李浩宇/Alex

阿里巴巴专属著作超赞,就是名字起得有点狂“成神之路”???

Java架构师迁哥

实用!8个 chrome插件玩转GitHub,单个文件下载小意思

程序员内点事

GitHub

MySql从青铜到王者晋级之路,阿里大牛经验总结让牛少走弯路!

Geek_71bb95

Java 程序员 架构 面试 编程语言

个人计算机、工作站、服务器的主要区别

德胜网络-阳

Reddit引入Envoy支持架构改造,性能显著提升-InfoQ