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

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

  1. PHP 8引入JIT支持,以提高CPU性能

    3月30日消息,随着绝大多数人赞成合并的投票结果出炉,PHP 8将正式引入JIT(Just-In- Time 即时编译) 支持.引入JIT支持将进一步提升PHP性能,JIT编译器被视为PHP版本中下一 ...

  2. Mycat+Mysql分布式架构改造和性能压力测试

    架构实现 Mycat作为数据库高可用中间件具备很多的功能,如负载均衡,分库分表,读写分离,故障迁移等.结合项目的实际情况,分库分表功能对于关联查询有很高的要求,需要从业务角度考虑分库分表后的关联查询S ...

  3. 没有银弹,微服务架构改造的一条不归路。。。

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:https://www.cnblogs.com/skabyy ...

  4. 可能是全网最通俗易懂的微服务架构改造解读

    古霜卡比 DBAplus社群排版 读完需要 10 分钟 速读仅需 4 分钟 作者介绍 古霜卡比,7年开发和架构经验.喜欢探索新事物.造轮子与瞎折腾.认为与其追逐日新月异的技术,不如研究底层的基础理论. ...

  5. Dubbo to Mesh 云原生架构改造方案解析

    作者 | 腾讯云泛互云原生团队 责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) Dubbo 是一款高性能的 Java RPC 框架,它除了拥有卓越的 ...

  6. .NET系统架构改造的经验和教训

    转自: http://robbinfan.com/blog/43/rid-off-dotnet-experience 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方 ...

  7. 疯狂架构师最强分享:分布式架构与性能优化,你学会了吗?

    分布式系统在如今越来越普及,了解分布式系统中的原理与实现更是很重要,本系列从分布式原理以及性能优化角度来剖析分布式架构 彻底搞通服务发现的原理和实现 服务发现,作为互联网从业人员,大家应该都不陌生,一 ...

  8. 前端工程化-基于Taro的Web端Monorepo架构改造

    前端工程化-Genebox小程序端Monorepo架构改造中介绍了在使用Taro框架下,结合yarn workspace + lerna 来改造Monorepo架构的方式和流程,这篇文章与本篇文章内容 ...

  9. 股市风暴下的雪球架构改造经验分享

    本文根据唐福林老师在"高可用架构"微信群所做的<股市风暴下的雪球架构改造经验分享>整理而成. 转自微信公众号ArchNotes. 唐福林,雪球首席架构师,负责雪球业务快 ...

最新文章

  1. Matplotlib基础绘图功能 — 以折线图为例
  2. PHP获取文件后缀名
  3. Codeforces Round #401 (Div. 1) C(set+树状数组)
  4. SQL字符串操作汇总
  5. Android 目录
  6. 百度feeds联盟软件测试开发,UI 自动化测试用例整理举例-百度首页
  7. Java常见GC算法_垃圾收集器及内存分配_G1垃圾收集器
  8. plsql能连mysql吗_面试官:能给我讲讲用代码实现MySQL的读写分离的思路吗?
  9. 地线与接地螺丝_快来看看新能源电动汽车充电时,地线的安装情况吧!
  10. 再一次站在捆绑销售风口的携程该何去何从?
  11. 贴片电容封装及尺寸示意图
  12. 世界三大短篇小说之王 代表作介绍
  13. Python基础知识:切片
  14. Jenkins项目自动化部署工具的安装、配置及使用
  15. Flume 1.9.0用户指南
  16. 用c语言如何以图形方式显示家谱,数据结构_家谱管理系统
  17. 【Android效果集】下雨效果
  18. 【Rust】argh:基于 derive 宏且对二进制体积进行优化的命令行解析工具
  19. 安装ubuntu系统时硬盘分区方案
  20. element-ui弹出层置于遮罩层下面问题

热门文章

  1. 吴恩达、谷歌、Facebook纷纷开源研究数据集
  2. SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
  3. 和AI结对编程!OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大
  4. 强弱AI的辩论:关于人工智能意识的奇妙理论
  5. Science评论:量子计算目前最大的挑战,在0和1之间
  6. 我的业务要不要用人工智能?引入AI前你需要评估的(一)
  7. SAP S/4 HANA的物料编码40位设置
  8. 几道 BAT 算法面试中经常问的「字符串」问题
  9. 车路协同让城市更智慧
  10. 深度揭秘AI换脸原理,为啥最先进分类器也认不出?