从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路

Apache APISIX 在升级 etcd 到 3.x 后面临基于 HTTP 操作的局限性,包括默认未启用 gRPC-gateway、响应大小限制等。为解决问题,APISIX 决策迁移到 gRPC,克服了 lua-protobuf 的 bug、调整行为以匹配 HTTP、切换到长连接。迁移后,连接数显著减少,解决了 mTLS 等问题,提高了效率和稳定性。API7.ai 作为 APISIX 的主要支持者,持续推动其发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

罗泽轩,API7.ai 技术专家/技术工程师,Apache APISIX PMC 成员。

原文链接

Apache APISIX 现有基于 HTTP 的 etcd 操作的局限性

etcd 在 2.x 版本的时候,对外暴露的是 HTTP 1 (以下简称 HTTP)的接口。etcd 升级到 3.x 版本后,其对外 API 的协议从普通的 HTTP 切换到了 gRPC。为了兼顾那些不能使用 gRPC 的特殊群体,etcd 通过 gRPC-gateway 的方式代理 HTTP 请求,以 gRPC 形式去访问新的 gRPC API。

APISIX 开始用 etcd 的时候,用的是 etcd v2 的 API。从 2020 年的 APISIX 2.0 版本起,我们把要求的 etcd 版本升级到 3.x。etcd 对 HTTP 的兼容帮了我们很大的忙,这样就不用花很大心思去重新实现操作 etcd 的方式了,只需调整下新的一组 API 的调用方式和响应处理。然而在实践过程中,我们也发现了跟 etcd 的 HTTP API 相关的一些问题。事实上,拥有 gRPC-gateway 并不意味着能够完美支持 HTTP 访问,这里还是有些细微的差别。

我把过去几年来在 etcd 上遇到的相关问题列了一下:

  1. 在某些情况下,etcd 默认没有启用 gRPC-gateway。由于维护者的疏忽,在某些平台上,etcd 在配置时没有默认启用 gRPC-gateway,所以我们不得不在文档中添加一个注释,以检查 etcd 当前是否启用了 gRPC-gateway。具体可参考 https://github.com/apache/apisix/pull/2940。
  2. gRPC 默认将响应限制在 4MB 以内。etcd 在其提供的 sdk 中解除了这一限制,但忘记了在 gRPC-gateway 中解除。因此,官方的 etcdctl(使用了 sdk)工作正常,但 APISIX 却无法正常访问。具体可参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

API7.ai 技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值