如何选择适合你的微服务API⽹关:对⽐Kong、APISIX、
Trk、Apigee和其他⽹关
微服务 API ⽹关有什么作⽤?
让我们先来看下微服务 API ⽹关的作⽤,下图是⼀个简要的说明:
API ⽹关并⾮⼀个新兴的概念,在⼗⼏年前就已经存在了,它的作⽤主要是作为流量的⼊⼝,统⼀的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:
1. 反向代理和负载均衡,这和 Nginx 的定位和功能是⼀致的;
2. 动态上游、动态 SSL 证书和动态限流限速等运⾏时的动态功能,这是开源版本 Nginx 并不具备的功能;
3. 上游的主动和被动健康检查,以及服务熔断;
4. 在 API ⽹关的基础之上进⾏扩展,成为全⽣命周期的 API 管理平台。
在最近⼏年,业务相关的流量,不再仅仅是由 PC 客户端和浏览器发起,更多的来⾃⼿机、IoT 设备等,未来随着 5G 的普及,这些流量会越来越多,同时,随着微服务架构的结构变迁,服务之间的流量也开始爆发性的增长。在这种新的业务场景下,催⽣了API ⽹关更多、更⾼级的功能:
1. 云原⽣友好,架构要变得轻巧,便于容器化;
2. 对接 Prometheus、Zipkin、Skywalking 等统计、监控组件;
3. ⽀持 gRPC 代理,以及 http 到 gRPC 之间的协议转换,把⽤户的 http 请求转为内部服务的 gPRC 请求;
4. 承担 OpenID Relying Party 的⾓⾊,对接 Auth0、okta 等⾝份认证提供商的服务,把流量的安全作为头等⼤事来对待;
5. 通过运⾏时动态执⾏⽤户函数的⽅式来实现 serverless,让⽹关的边缘节点更加灵活;
6. 不锁定⽤户,⽀持混合云的部署架构;
7. 最后就是⽹关节点要状态⽆关,可以随意的扩容和缩容。
⼀个微服务 API ⽹关具备了上述⼗⼏项功能,就可以让⽤户的服务只关⼼业务本⾝,⽽和业务实现⽆关的功能,⽐如服务发现、服务熔断、⾝份认证、限流限速、统计、性能分析等,就可以在独⽴的⽹关层⾯来解决。从这个⾓度来看,API ⽹关既可以替代 Nginx 的所有功能,来处理南北向的流量,也可以完成 Istio 控制⾯和 Envoy 数据⾯的⾓⾊,来处理东西向的流量。
备选的 API ⽹关有哪些?
nginx和网关怎么配合使用正因为微服务 API ⽹关的地位如此重要,所以它⼀直处于兵家必争之地,传统的 IT 巨头在这个领域很早就都有布局,⽐如⾕歌、CA、IBM、红帽、salesforce、以及 AWS、阿⾥云等公有云⼚商。
这些闭源的商业产品,它们的功能都很完善,覆盖了 API 的设计、多语⾔ SDK、⽂档、测试和发布等全⽣命周期管理,并且提供 SaaS 服务,有些还与公有云做了集成,使⽤起来⾮常⽅便,但同时也带来两个痛点:
1. 平台锁定。API ⽹关是业务流量的⼊⼝,它不像图⽚、视频等 CDN 加速的这种⾮业务流量可以随意迁移,API ⽹关上会绑定不少业
务相关的逻辑,⼀旦使⽤了闭源的⽅案,就很难平滑和低成本的迁移到其他平台。
2. ⽆法⼆次开发。⼀般的⼤中型企业都会有⾃⼰独特的需求,需要定制开发,这时候你就只能依靠⼚商,⽽不能⾃⼰动⼿去做⼆次开
发。
所以我们更偏重于开源的 API ⽹关⽅案,⽐如 Kong、APISIX 和 Trk 等。这些 API ⽹关是从云原⽣软件基⾦会(CNCF)的全景图中摘选的:
对⽐选型的依据
部署和维护成本
是可以在单机就能完整部署,还是需要多个节点配合才能使⽤?
是否有外部的数据库依赖?⽐如 MySQL、Postgres?
是否有 web 控制台可以操作整个集?
开源还是闭源
你是否可以编写⾃⼰的插件来扩展 API ⽹关的功能?
当你使⽤了某个 API ⽹关后,是否可以平滑⽽且低成本的迁移到其他 API ⽹关?
是否会被锁定在特定的平台上?
能否私有化部署
是否⽀持部署在⽤户⾃⼰的内部服务器中?
是否⽀持多云、混合云的部署模式?
功能
是否⽀持动态上游、动态 SSL 证书、主动/被动健康检查这些基本的功能
能否对接 Prometheus、Zipkin、Skywalking 等统计、监控组件
是否可以通过 HTTP REST API 和 yaml 配置⽂件这两种⽅式,来控制⽹关配置
社区
使⽤者能否通过 Github、QQ 、Stack Overflow 等⽅式联系到社区的开发者?
开源许可证是否友好?
是否可以⽅便的提交⾃⼰的修改到主线版本?
背后是否有商业公司⽀持?
商业⽀持和价格
开源版本和商业版本差异是否很⼤?
商业版本是按照 API 调⽤次数还是订阅⽅式收费?
API ⽹关对⽐
下⾯是各个 API ⽹关多个⾓度的对⽐结果:
API ⽹关 Kong APISIX Trk Apigee AWS
Aliyun
部署模式单机和集单机和集单机和集不⽀持单机PaaS PaaS
数据存储Postgres
或者
Cassandra
etcd Redis Postgres,Cassandra和Zookeeper PaaS PaaS
是否开源Apache 2.0 协议Apache 2.0 协议MPL
协议
否否否
核⼼技术Nginx+Lua Nginx+Lua Golang    未知未知未知私有部署是是是否否否⾃定义插件是是是否否否社区活跃度⾼⾼⾼中低低对接外部 IdP否是否是是否⽀持yaml是是否否否否
从中我们可以看出,Kong 和 都是⾮常好的选择。如果你有其他推荐的 API ⽹关,或者有更多的观点,欢迎留⾔。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。