若谷学院
互联网公司技术架构分享

企业级微服务网关的选型 API网关选型指南

API Gateway(API 网关),是在系统边界上的一个面向内外部,用作API路由,转发,过滤,管理的服务系统。API网关起到隔离API的消费方与API的提供方的作用,可以灵活组拼和开放内部服务。在微服务流行以前,API 网关实际上已经广泛应用在各大互联网产品的开放平台上,我的印象中2011年前后各大开发者平台上已经有了API网关。所以API网关并不是一个新事物。随着微服务架构的演进,微服务架构的普及和完善,API网关的定位,架构设计也日趋完善,大量功能逐渐标准化。

早些年的API网关的需求,主要是用于隔离外部与内部,比如移动端APP调用后台API,通过API网关加上安全,授权机制,以及加密,流控,计费,数据字段的隐藏控制(部分条件下并不需要API返回的所有字段),内部API数据的聚合(比如把多个API的结果合并后返回),提供统一的API入口等等。现在的API,更多在安全控制,路由,监控,服务管理,甚至在缓存,性能优化,优雅降级,包括版本发布的灰度发布上,这也是架构不断演进的结果。

本文发自若谷技术学院,采用CC License,欢迎转载,转载清注明出处。 

为什么要有企业网关?

抽象/架构通用的功能

传统系统的架构 微服务API网关架构
Complex API architecture without Kong

 

Simple API architecture with Kong API Management 

传统不使用API网关架构的特点

1.通用的功能散落在多个服务上;

2.系统倾向于单体,并且难于维护;

3.难以扩展,并且服务升级时容易影响其他服务;

4.由于功能的重复导致开发/维护效率低下

以kong为例,展示了典型了API网关架构:

1.把通用的功能集中到了一个地方;

2.构建有效率的可扩展的分布式架构;

3.使用一个简单的命令就可以扩展功能(插件支持);

4.团队聚焦于自己的产品即可,API网关完成其他事; 

 

 

企业网关选型需要考虑的因素

微服务的架构体系中,有非常多的API服务,可能成百上千上万的服务,这些服务都通过API网关统一开放和管理。服务于这么多的系统,API网关的安全性和可靠性,包括性能也变得非常关键。在选型时如下因素需要考虑。

  • API管理:API的注册、路由、定义,API的版本管理,API的发布与下线。这个是基本功能。完善一些的话,可以配置API的请求条件预处理比如请求参数验证,API结果的处理,比如返回字段的筛选,多个请求结果的聚合。
  • 安全性:是否能够做调用方的认证,授权,日志记录,调用审计; 是否能够配置安全策略,对调用方进行管理,对于指定特征的请求进行过滤,即是否带有API防火墙功能,比如可以配置防SQL注入,IP黑名单,API账号禁用等;
  • 流控:是否能够控制调用方的流量;能否做API调用降级,熔断;
  • 性能:引入API网关以后,提供的服务性能下降是否可以接受,一般对系统性能影响应当在5%以内。并且随着后端服务容量的扩展,API网关不成为瓶颈;
  • 高可用:是否提供分布式的API网关方案,避免API网关服务成为单点,引起单点故障(SPOF); 包括网关服务的维护,平滑升级,是否都有支持;
  • 可测试性:是否提供便捷的API在线测试功能; 是否有提供测试环境的数据混淆功能;
  • API调用的管理:能否在线管理API消费方的账号,管理账号的流量控制,账号的配置参数,账号的权限等等;
  • 可管理性:是否提供Web界面对API进行管理,维护;是否能够对调用账号的生命周期进行管理,API账号申请,审核,流控的配置; API账号的禁用,API账号的消息通知(API消费者沟通);
  • API文档管理:是否提供便捷的API文档管理功能,能否发布API文档。比如根据后端的API接口自动开放API文档。减少维护的工作量,并且提高API消费方的工作效率;
  • 统计报表:是否能够统计调用的性能,消费方的调用量,QPS的情况,包括平均响应实际,95线,高峰并发,稳定率等等;
  • 监控与流量分析:实时的监控,每天/每周的报表,流量分析, 消费方的分析。 比如谁是API调用的大头。哪些API响应慢,哪些API访问量高等等。

 

几种典型企业网关选型方案对比

API网关有不少开源的产品,也有商业化的产品。 常用的有Nginx, Kong, Netflix Zuul。以下从多个方面对这几个产品进行对比分析。

维度Nginx + Lua 商业版Mashape Kong

Mashape Kong商业版

Netflix Zuul
提供商NginxKong Inc.Kong Inc.Netflix
产品协议 商业

 开源  Apache 15k star@github

 商业 开源 Apache 4k star@github
文档N/A

Kong Community

Kong EnterpriseNetflix Zuul Wiki
API注册/动态路由在Nginx中配置 通过Admin API管理 Admin API管理,+ Web后台管理动态路由,跟Eureka有很好地集成
支持协议RESTful API RESTful API RESTful APIRESTful API
插件机制 Lua插件机制

提供Lua插件机制

★★★★★

提供Lua插件机制★★★★★

可以基于源码定制开发,基于Servlet/Filter

★★★★

安全认证&鉴权  N/A

支持OAuth2.0,黑白名单,ACL,JWT,SSL等

★★★★

社区版基础上 + 角色控制,Open ID, 第三方 OAuth 2.0

★★★★★ 

支持 OAuth, JWT 等,支持折腾

★★★★

限流  N/A

支持Rate Limiting

★★★★

 ★★★★★ 

通过插件支持

★★★

高可用集群  N/A

支持集群

★★

可Web管理★★★★★ 

可以通过部署多个Zuul做负载均衡

★★★

可测试性 N/A

无便捷的测试界面

开发者可以在界面测试Swagger API

★★★★★

 N/A
可管理性 N/A

提供Rest API交互

★★

提供 Admin GUI管理API, 插件,上下游,安全,监控统计

★★★★★

没有GUI管理台

日志记录Nginx可灵活记日志★★★★★ 

日志可以记录到磁盘,或者HTTP, TCP, UDP发出去

★★★★★ 

同社区版

★★★★★

可自行配置

★★★

开发者管理 无 无 ★★★★★  无
API文档管理 无  无 ★★★★★

可自己整合swagger

★★

监控与统计报表

可以配置 

★★

可以后台监控 

★★★

实时监控,API流量分析,延迟报表

★★★★★ 

 N/A
性能

★★★★★

★★★★★★★★★ 高并发下性能不好

★★

开放性★★★★★★★★★★★★★★
整体推荐度★★★★★★★★★★★★★
整体评价Nginx Plus上的功能,商业软件,文档没有开放

基于Nginx + OpenResty + Lua

功能相对完善。

 在社区版的基础上,更强大的管理控制,安全,监控报表,功能完善,定制性略差跟Netflix内部系统关系紧密,功能相对较弱,跟Spring Boot集成较好,可以作为入门级API网关。

如果想要快速上手,且为内部项目,并发量,复杂度不高,建议可以考虑Zuul。

对性能要求高,需要对外开放,建议考虑使用Kong,Kong的Dashboard可以参考Github上的Kong Dashboard

土豪建议考虑使用Kong Enterprise版本,评估是否满足自己各个维度的需求,主要的维度可参考上表。

研发团队在200人以上的规模,建议自行基于开源API网关,或者使用Netty,GO开发一套网关API。

另外Go语言开发的API网关Tyk看起来不错,等有空了试用一下这个网关,再分享Tyk:https://tyk.io/docs/

您可以关注本站微信,获得关于网关架构的最新文章。

本文发自若谷技术学院,采用CC License,欢迎转载,转载清注明出处。 

好烂呀没啥价值凑合看看还不错很精彩 (1 人评了分, 平均分: 5.00 )
Loading...
本站文章来自互联网一线技术博客,若有侵权,请联系我们:若谷技术学院 » 企业级微服务网关的选型
关注若谷技术,获得个性化即时架构文章推送

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    太厉害了,真的是超级牛

    wanwan1个月前 (04-24)回复

全球互联网技术架构,前沿架构参考

联系我们博客/网站内容提交