如何选择适合你的微服务 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 网关有哪些?

正因为微服务 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 和 APISIX 都是非常好的选择。如果你有其他推荐的 API 网关,或者有更多的观点,欢迎留言。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
错误 trk0005 是指在编译或构建程序时,无法找到“cl.exe”文件的问题。这是由于系统无法找到Visual C++编译器(cl.exe)的位置或配置错误导致的。 要解决此问题,可以尝试以下几种方法: 1. 检查Visual C++是否已正确安装:确保您的计算机上已正确安装了Visual C++编译器。可以通过在命令提示符下输入“cl”,看看是否存在“cl.exe”文件。如果不存在,可能需要重新安装Visual C++。 2. 检查环境变量设置:确保您的系统已正确设置了Visual C++编译器的路径。可以在系统的环境变量中添加Visual C++的安装路径,以确保系统可以找到“cl.exe”。如果是在命令提示符下使用Visual C++编译器时出现该错误,也可以尝试重新启动终端。 3. 更新和修复Visual C++:如果您已经安装了Visual C++但仍然遇到问题,可以尝试更新或修复Visual C++。可以通过打开“控制面板”->“程序”->“程序和功能”来查找Visual C++的安装,并选择相应的选项进行更新或修复。 4. 检查项目配置:如果是在特定的项目中遇到该问题,可能需要检查项目配置是否正确。确保正确设置了Visual C++编译器的路径,以及您所使用的编译器版本是否与项目要求的兼容。 总结起来,错误 trk0005 是由于无法找到“cl.exe”文件导致的。您可以通过检查Visual C++的安装、环境变量设置、更新或修复Visual C++,以及检查项目配置等方式来解决此问题。希望这些方法能够帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值