Board logo

标题: Reddit引入Envoy支持架构改造(1) [打印本页]

作者: look_w    时间: 2019-4-12 17:04     标题: Reddit引入Envoy支持架构改造(1)

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支持的代理、路由、请求/响应指标和速率限制。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0