架构未来,高性能网关在大规模系统中的角色与挑战 | QCon上海

百家 作者:InfoQ 2023-12-22 17:29:35

作者 | 陈华昌
策划 | 李忠良  

Edith 网关是我们为了更好地适应小红书特有的社交业务模式,解决业务扩展性和微服务治理问题,提高系统稳定性和效率而研发的重要 API 网关产品。

在小红书整体云原生技术的加持下,南北向接入架构进行了一次革命性升级。在 12 月 28-29 日的上海 QCon 全球软件开发大会上,小红书基础技术部通用网关负责人陈华昌(空古)老师将分享 Edith 网关的设计理念,核心功能,以及如何在实际业务中发挥关键作用。在正式演讲之前,QCon 会议采访了陈华昌老师进行了采访,希望能帮助大家了解小红书的网关技术。

InfoQ:您知道有哪些事故是因为网关设计的不合理导致的?网关设计应该保障哪些事情?

陈华昌(空古):因为在 Edith2.0 上线前,小红书的业务网关仍然是处于单体应用程序的初级原始阶段。因此这样引发了诸如 A 业务发布更新却带崩了 B 业务、C 业务线研发写了一个 bug 带崩一整个机房的网关应用、D 同学错删除了 Ingress 路由数据,导致小红书崩溃了近 2 小时等等故障。也因此『小红书崩了』一而再地出现在微博热搜,内部稳定性目标也一度把不再上热搜作为目标。

网关在设计上应该保障如下方面:

  • 发布安全:通过技术设计,实现路由、API 配置等元数据隔离发布能力,包含多版本、灰度、回滚等能力。强管控删除、下线等高危操作。

  • 系统稳定性:网关应具备高可用和容错性,如多活部署、限流、熔断、超时控制、服务动态降级、跨机房切流等能力,保障异常情况下,能有对应处置手段,保障业务稳定性。

  • 可观测性:网关应该具备完善的指标监控(机器维度和协议传输维度)和实时告警能力,例如 Prometheus、Grafana 等开源工具。

  • 可扩展性:业务上要具有可扩展的能力,方便不同业务方的定制化需求。例如:Edith 网关提供了插件市场、服务市场、OpenAPI 等对业务友好的扩展性设计。

  • 易用性:网关应该提供友好的用户界面和 OpenAPI,方便开发者进行开发维护,同时提高业务发布效率和运维效率。

  • 数据安全:除接入 Waf 的外层手段外,网关应该提供集群限流、反爬、业务风控等能力,以确保业务数据的安全性。

InfoQ:在开发高性能 Edith 网关的过程中,您遇到了哪些主要的技术挑战和困难?

陈华昌(空古):定位决策上,起初项目新立的时候,有多种声音,很多人觉得应该偏向流量性能方向,靠近 Nginx 的设计会更好,更有接入和业务二合一的效果,当时市面上有诸如 APISIX、Envoy 这样优秀的项目。但我们在做了很多调研,并且结合小红书的现状,觉得那个时候的小红书,更需要的是一款偏向业务属性的业务网关,亦或是 API 网关。并且在整体接入层架构设计中,应该是把接入网关和业务网关分为两层,这样层次分明,职责清晰,灵活性高。

技术设计和产品功能上的实现挑战,技术上我们坚持自研,实现了诸如泛化调用、前缀字典树、基于 etcd 的热更新和灰度等多种有难度的技术功能。产品角度,我们非常注重易用性的产品体验,开发者所需要使用的功能都实现了白屏化操作。实现了诸如一键 IDL 生成 API、API 配置『三步曲』、精细化百分比灰度、一键回滚、熔断 / 限流 / 降级等产品能力。

迁移难度大,新网关上线后,就需要针对已有业务进行迁移。由于历史技术债问题,有些业务不得不做一些代码上下沉和改造,这就需要业务研发投入一些时间。面对这样的问题,一方面我们需要跟每条业务线讲清楚新网关给业务带来的收益,另一方面我们提供了较为完备的迁移指南和尽可能多的迁移协助,最后在公司整体稳定性目标中,我们也得到了技术委员会的支持。截止目前,整体的迁移率达到了 99.5%,这在小红书这样体量的互联网公司中是非常难以达到的。

InfoQ:面对业务扩展性和微服务治理的挑战,Edith 网关采取了哪些具体的措施和技术解决方案?

陈华昌(空古):业务扩展性主要通过以下方式实现:

  • 插件市场,我们先将一些业务共性的通用能力抽象成基础插件,并按照使用属性进行分类,比如验签、鉴权、安全类插件都属于业务上通用型组件能力。除此以外,允许业务根据自身业务特点,按照网关插件标准,进行定制化开发,适配自身业务后,并反哺至公司其它业务使用。

  • OpenAPI 生态,Edith 网关在实际运行中,经常会遇到内部一些其它技术系统需要打通某些技术流程,将网关的部分功能『借用』走的情况。所以我们开放了一套基于通用基础能力的 OpenAPI,方便业务技术之间的能力拓展,也为更多的技术系统集成网关能力做好了标准通道。

服务治理方面:

  • 首先是标准化的推行,这里包含的是 API/ 服务规范、域名规范、路由规则规范等。网关作为一个公司业务的重要技术出口,应当有推荐的标准规范,输出给业务技术。比如我们不再推荐业务使用 Restful 风格的路由规则,约束内外网不同类型域名使用方式等,这些规范都是在历史上踩过坑的总结。一个快速发展中的公司,不需要百家争鸣的技术种类,而是尽可能收敛快速向前。

  • 基础服务治理能力,比如限流、熔断、超时控制等功能。Edith 网关提供了三个维度的限流,集群限流、路由规则限流、API 限流,方便业务根据自身业务需求进行选取。熔断方面,我们基于 Sentinel 开源组件做的基于每个 API 维度的熔断保护,支持用户自定义选择配置。

  • 小红书特色的降级能力,在 2022 年初的时候,小红书上线了一个推荐降级能力,故障降级情况下,给用户看的数据仍然是『千人千面』,这在业内是非常罕见的。这是多端合作实现,服务端就依赖 Edith 网关提供的通用降级能力,用户只要配置一下备用数据源和降级触发条件,即可启用。也因为这个功能,大幅度减少『小红书崩了』的热搜出现次数。

InfoQ:能否针对这个网关系统进行错误注入,以方便 Chaos Monkey 测试?

陈华昌(空古)目前 Edith 网关的故障注入是使用公司内部的混沌平台的能力,主要是使用在 Pod 维度。针对网关集群的某个 Pod 实现服务或者网络端口上的故障注入,以此达到验证某些高可用能力。比如网关的动态降级、熔断等能力均通过此项能力来做验收。

InfoQ:如何支持跨语言开发?譬如可以通过 Wasm 技术手段。

陈华昌(空古):Edith 网关有一个大的特性是支持自定义插件的集成,并且在内部形成了一个相对完善的插件市场。在接下来的规划里,将会使用 Wasm 实现支持跨语言开发的能力。Go1.21 版本新支持了 WASI 特性,这对我们来说是一个很好的消息。

InfoQ:需要进行升级时,如何对现有链接进行优雅关闭?

陈华昌(空古):两方面的优雅关闭,一是 Golang 程序的优雅关闭,实现的方式主要通过 for-select 来实现。二是注册服务的优雅关闭,网关服务向注册中心进行反注册,等待一段时间后,我们的上层将会不再收到网关的节点信息。

InfoQ:网关 Prometheus Metrics,目前量级是多少?如何考虑以后 Metrics 指标过多后可能影响网关性能的问题?

陈华昌(空古):目前总的量级已经达到千万级别。当以后 Metrics 过多后,网关会采取一定的措施进行优化。比如:自动减少一些不必要的采集指标,保证指标的健康度。调整 Metrics 采集频率,避免过于频繁的采集。另外还会联合可观测团队,对 Metrics 指标进行聚合和切片,以减少 Metrics 的数量和存储空间。

InfoQ:目前支持哪些路由策略?

陈华昌(空古):网关主要使用的是前缀树匹配的路由策略,并且自行研发了一套字典树的实现。定义了两种层级概念,路由规则和 API Path(1:N 的关系),路由规则属于静态路由,在 API Path 支持了动态路由。

InfoQ:网关的健康检查是如何进行的?

陈华昌(空古):不使用 Mesh 的分组:每隔一段时间 ping 下游节点,如果连续失败 3 次,会把节点标记为不健康状态,进行摘除。之后如果从注册中心再次拿回该节点,则再进行 3 次 ping 尝试,成功后重新转为健康节点进行使用。

使用 Mesh 的分组,则使用 Istio 的健康检查能力。

InfoQ:是否支持 HTTPS 加密?相比 HTTP,是否会显著影响通信性能。

陈华昌(空古):支持,但是我们的 HTTPS 卸载是在云的 LB 层做的,到内部后只是通过 HTTP 和 TCP 的方式进行通信。

InfoQ:针对高并发场景,Edith 网关如何实现有效的负载均衡和流量管理?

陈华昌(空古):默认情况下,Edith 网关通过获取注册中心提供的下游服务节点信息,进行正常的轮询式负载均衡,此时实现了流量均衡。

在开启动态加权轮询的情况下,会根据下游服务 CPU 负载情况(机器性能或有不同),动态地分配请求,此时实现了下游机器处理能力的负载均衡。动态调权比较复杂,源于下游服务的数据指标采集,根据指标 R 选取需要目标 R_target,选定偏离目标 R_target 一定范围的实例作为本轮的调权对象,最后根据指标的差值比例来调整权重。

InfoQ:在保障网络安全方面,您采用了哪些策略和技术来防御潜在的网络攻击和威胁?

陈华昌(空古):方式一:使用了 Waf,有效地防止 SQL 注入、跨站点脚本攻击(XSS)、跨站点请求伪造(CSRF)等。

方式二:不同业务集群使用不同的限流策略,提供基础流量保护能力,防止集群异常情况被冲垮。

方式三:Edith 网关中有众多的安全风控插件,会有效地防止爬虫、恶意用户请求等。

InfoQ:如何评价 Edith 网关的高性能与否以及高性能网关的 ROI?

陈华昌(空古):我认为 Edith 网关,现在没有花特别多的时间在性能的提升优化中,只是做了一些协议转化、字段映射方面的性能优化。目前公司业务处于快速发展过程中,我们更多的精力是花在了丰富功能、支持业务上。还有一个重要专注点是稳定性建设,网关处于非常重要的基建位置,需要提供较高的稳定性保障。

关于高性能的 ROI,从技术逻辑上讲,提升性能,一定是有降本增效的收益。但这个事情仍需要结合公司业务现状特性来做判断,找出当前最需要解决的事情去做处理。不赞成一味地为了对标行业性能标杆,而投入大量的人力去做性能优化。反而应该在性能够用的基础上,脚踏实地把功能做扎实,服务好业务。

第二部分:用户体验与行业洞见
InfoQ:您认为其他企业在开发或部署高性能网关时应该注意哪些常见的陷阱和误区?您能提供一些实用的经验和建议,帮助他们避免这些问题吗?

陈华昌(空古):常见的陷阱和误区:

  • 不了解业务真实需求,闭门造车。建议:在做产品和技术设计的时候,应该了解业务真实需求,且需要匹配公司其它基建方向的选型,比如中间件、容器等,向合适的方向去做设计。

  • 忽视易用性,只当做一个程序应用来做。建议:网关的用户就是内部开发者,配置和管理功能需要简单易用,方便操作。多考虑『一键式功能』『配置界面化』。

  • 稳定性能力不足。建议:在快速迭代过程中,对于线上业务保持谨慎的心态,对于生产变更要有追溯和回滚能力。同时建设例如熔断限流、降级保护这样的基础容灾能力,并且定期要做生产演练,以达到定期巡检确认。

  • 可观测性能力不足。建议:主要建设三方能力:指标、日志、监控告警,尤其是监控报警能力,应当根据不同业务场景,分级进行配置。在发生故障时,网关的告警基本上是需要早于业务发现问题的。公司一般都有专业的可观测性团队,利用好这部分能力。

InfoQ:在网关技术发展的未来趋势中,您如何看待人工智能和机器学习在网关性能优化中的应用?

陈华昌(空古):人工智能方面目前看还比较有限,大模型的决策精确度依赖输入参数,但一家公司的技术背景和业务场景是远远超出了模型入参的大小上限。现在能使用的是,在一些小范围做一些技术方案上的交互讨论。

机器学习方面,我觉得是有很多方面可以落地的,比如自动化运维能力(AIOps),比如资源的潮汐处置、弹性扩缩容、故障预测、故障处置等。这些对于网关来说都是非常有用的功能,可以节省人力,提高效率。

InfoQ:云原生层面的规划能否透露?

陈华昌(空古):未来将会向 Serverless 的方向去做规划,主要是通过将以 Kubernetes 为核心的基础设施细节屏蔽,并通过对应用、资源编排模型进行进一步抽象,让用户在使用的时候,可以不感知基础设施的配置。只需要把应用打包至平台,就可以分发到对应的模块系统中。主要解决资源弹性、构建、可观测等方面的 Serverless 工程能力落地。

采访嘉宾:

陈华昌(空古):小红书 基础技术部通用网关负责人

曾就职于多家头部互联网公司,一直专注于计算机工程领域,专注于基础架构、计算机视觉工程、服务端工程等技术方向。目前聚焦在打造符合小红书业务特性的通用 API 网关技术产品方案。

活动推荐

12 月 28-29 日, 2023 年最后一场 QCon 全球软件开发大会 & QCon 中国 15 周年 Party 即将落地上海。除了精彩演讲之外,还有 7 大亮点活动,等你一起来玩~

① 承载着最前沿生成式 AI 技术之旅「 下一站 GenAI 」;

②「云原生时代的数据架构与性能提升」专场免费报名;

③五场高端闭门交流会议;

④大模型精彩公开路演,免费参与;

⑤大模型展区新升级,10+ 大模型及应用厂商现场 Battle;

⑥「2023 数字化践行者年度力量榜」榜单评选结果正式发布;

⑦ 两大抽奖活动,80% 中奖率!

现日程已全部上线,点击「阅读原文」即可自行定制您的参会议程,更多大会相关资讯可扫描下方二维码进行了解。咨询购票可联系票务经理 18514549229,锁定最新优惠。

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接