当前位置: 首页 > news >正文

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作为边车进程运行,处理下流服务流量的代理和负载平衡。

\"image\"

最初的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配置生成器的准确性。

\"image\"
引入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

相关文章:

  • 弄懂Favicon
  • 基于django的视频点播网站开发-step15-项目部署
  • php任务队列
  • OpsRamp推出以服务为中心的AIOps和云监控功能
  • C# 如何在Excel 动态生成PivotTable
  • 08.Android之View事件问题
  • .naturalWidth 和naturalHeight属性,
  • 数据模型
  • 深度解析利用ES6进行Promise封装总结
  • 上传本地项目到git.oschina
  • ES6系统学习----从Apollo Client看解构赋值
  • 前端临床手札——文件上传
  • IDEA Git版本回滚提交方式
  • spring framework 模块简介
  • Vue2.5 零基础开发去哪儿网实战(二) - 起步 Vue.js
  • 【node学习】协程
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 0基础学习移动端适配
  • 2017届校招提前批面试回顾
  • Android 控件背景颜色处理
  • Flex布局到底解决了什么问题
  • go append函数以及写入
  • Node项目之评分系统(二)- 数据库设计
  • php中curl和soap方式请求服务超时问题
  • python_bomb----数据类型总结
  • React+TypeScript入门
  • SpringBoot几种定时任务的实现方式
  • vue-router 实现分析
  • 机器学习中为什么要做归一化normalization
  • 记录:CentOS7.2配置LNMP环境记录
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 通过npm或yarn自动生成vue组件
  • 我建了一个叫Hello World的项目
  • 携程小程序初体验
  • 移动端唤起键盘时取消position:fixed定位
  • 06-01 点餐小程序前台界面搭建
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​configparser --- 配置文件解析器​
  • #include
  • #大学#套接字
  • $$$$GB2312-80区位编码表$$$$
  • (2)Java 简介
  • (4)事件处理——(7)简单事件(Simple events)
  • (BFS)hdoj2377-Bus Pass
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)JAVA使用POI操作excel
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (数据结构)顺序表的定义