一 背景介绍

下图是我从网络上找到的一个微服务架构的简单架构图,如图可见 API Gateway 在其中起到一个承上启下的作用,是关键组件。

图片来源于网络

在更通用的场景下我们会使用 NGINX 这样的软件做前置,用来处理SLB负载均衡过来的流量,作用是反向代理、集群负载均衡、转发、日志收集等功能。

然后再将 NGINX 的请求 proxy 到 API Gateway 做统一网关处理。

在上面的这个场景下 API Gateway 可以包含以下功能:

  • 安全

  • 限流

  • 缓存

  • 熔断

  • 重试

  • 负载

  • 反向路由

  • 认证、鉴权

  • 日志收集和监控

  • 其他

熟悉 NGINX 的朋友应该可以看出来,上面列出的这些功能和 NGINX 的部分功能是重合的,不过由于架构结构不同,在上面我提到的场景中,即 NGINX 在前 API gateway 在后的结构中,他们两者关注的维度也不一样,所以即使有重合也正常。

二 架构调整

下图是我基于云原生微服务架构设计的架构图其中前端流量是通过 SLB -> NGINX -> API Gateway 再到具体服务。

三 java技术栈的 API Gateway 选型

由于后端采用java 的 spring cloud 开发的,所以在语言一致性上更倾向 java 语言开发的组件。如上图虽然在 API Gateway 的位置上写的是 spring cloud gateway,然而也可以采用像 zuul、zuul2 这些同样是 java 语言开发的组件。对于具体 zuul 和 spring gateway的选型,是这样考虑的:

|
| spring cloud gateway | zuul |
| — | — | — |
| 性能 | 性能比 Netflix Zuul 好将近一倍 | Zuul1 的性能较差 Zuul2 较 Zuul1 有较大的提升 |
| 社区和文档 | spring社区非常活跃 | 一般 |
| 可维护性 | 基于spring官方维护性强 | 经常跳票、Spring Cloud暂时还没有对Zuul2.0的整合计划 |
| 亮点 | 异步、配置灵活 | 成熟、简单门槛低 |
| 不足 | 早期产品、新版本踩坑 | 性能一般、可编程一般 |

Spring Cloud Gateway 的性能比 Zuul 好基本上已经是业界公认的了,实际上,Spring Cloud Gateway 官方也发布过一个性能测试,这里节选如下数据:

Spring Cloud Gateway 构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。同时,它支持 websockets,和 Spring 框架紧密集成。从目前来看,gateway替代zuul是趋势。基于以上这些,综合考虑在架构中使用Spring Cloud Gateway。

四 非java技术栈的 API Gateway 选型

现代 API Gateway 越来越需要或者流行可编程网关了。上面介绍的都是基于 java 语言开发的可编程的 API Gateway。下面我们来聊聊非 java 语言开发的网关。从前面的架构图上看,我们完全可以将 NGINX 和 API Gateway 合并起来,他们的功能的重合点自然消除了,也能降低架构的复杂性和运维成本。

NGINX 是一款优秀的软件,然而它在动态性方面的不足导致不太灵活,后面出现的 OpenResty、tengine 这些基于NGINX 和 Lua 的软件在动态性、灵活方面有本质上的改善,加上基于Lua脚本和插件,可以实现所谓的可编程。

市面上基于OpenResty 以 API Gateway 为应用场景的应用软件有 Kong、APISIX、tyk 等。以下是CNCFland scape 的一个概览

比较了一下 NGING 和 KONG

经过考虑,在架构上,后期有可能将 NGINX、Spring Cloud Gateway 替换成KONG 或其他软件。

比较了一下,目前最火的应用是Kong,另一个国产的 APISIX 趋势也是很猛,且他们的技术栈雷同,所以我在选型上找到了APISIX的作者做的对比:

从 API 网关核心功能点来看,两者均已覆盖:

更详细的比较:

通过性能测试可以看到,在不开启插件的情况下,Apache APISIX 的性能(QPS 和延迟)是 Kong 的2倍,但开启了两个常用插件后,性能就是 Kong 的十倍了。

无论从性能、可用性、可编程代码量等各个维度APISIX都是非常优秀的,目前唯一担心的就是这种早期项目没有太多大规模应用实践,如果上生产还是有风险,可在测试环境调研,并等待有更多生产实践作为依据。 当然如果架构师认为风险并不大,且经过了测试调研也是可以上的。

API 网关选型及包含 BFF 的架构设计相关推荐

  1. api网关选型_如何轻松打造百亿流量API网关?看这一篇就够了(下)

    如何轻松打造百亿流量API网关?看这一篇就够了(上) 上篇整体描述了网关的背景,涉及职能.分类.定位环节,本篇进入本文的重点,将会具体谈下百亿级流量API网关的演进过程. 准备好瓜子花生小板凳开始积累 ...

  2. 武林外传—一灯大师与众弟子漫谈Api网关选型

    南帝段王爷隐居桃源后,潜心研究,构筑了一套武林秘籍访问系统,系统是微服务部署的,拆分为多个模块,每个模块只做一件事情.系统刚上线的时候非常顺利,但随着访问量的增大,模块的增多,新问题越来越显现出来,他 ...

  3. api网关选型_微服务 API 网关 APISIX 发布 0.5 版本,达到可用状态

    项目介绍 APISIX (https://github.com/iresty/apisix)  是一个云原生.高性能.可扩展的微服务 API 网关. APISIX 基于 OpenResty 和 etc ...

  4. 微服务 API 网关架构演进 Spring Cloud Gateway ShenYu APISIX

    目录 后台服务网关 Spring Cloud Gateway 遇到问题 Apache ShenYu Higress fizz-gateway-community 企业案例 前台流量网关 APISIX ...

  5. 10Wqps 超高并发 API网关 架构演进之路

    说在前面 在尼恩的(50+)读者社群中,经常遇到一个 API网关 架构方面的问题: (1) 尼恩老师,最近公司我们在规划业务出口网关(目的,整合规范外部调用,如短信平台 mqtt 等) 我在做整理技术 ...

  6. API网关介绍及选型(kong)

    文章目录 为什么需要 API 网关 API网关的功能 API网关选型 API 网关实现对比 kong vs tyk kong Kong 支持功能 Kong 的管理方式 kong端点 kong策略模式 ...

  7. 揭秘 Uber API 网关的架构,建议收藏!

    来源:InfoQ 近年来,API 网关成为微服务架构中不可或缺的一部分.因此,一个架构良好的 API 网关显得尤为重要.本文详细介绍了 Uber API 网关的架构设计,以飨读者. 近年来,API 网 ...

  8. 亿级流量架构演进实战 | 从零构建亿级流量API网关 01

    这不是一个讲概念的专栏,而且我也不擅长讲概念,每一篇文章都是一个故事,我希望你可以通过这些故事了解我当时在实际工作中遇到问题和背后的思考,架构设计是种经验,我有幸参与到多个亿级系统的架构设计中,有所收 ...

  9. 亿级流量架构演进实战 | 从零构建亿级流量API网关 02

    这不是一个讲概念的专栏,而且我也不擅长讲概念,每一篇文章都是一个故事,我希望你可以通过这些故事了解我当时在实际工作中遇到问题和背后的思考,架构设计是种经验,我有幸参与到多个亿级系统的架构设计中,有所收 ...

最新文章

  1. vue图片点击超链接_vue使用v-for实现hover点击效果
  2. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
  3. 牛客网---Java题库(1~10)
  4. 2018.12.26 作业
  5. PowerShell校验哈希
  6. Shiro和Zuul权限管理整合方案
  7. 横向合计代码 锐浪报表_锐浪报表使用技巧
  8. Linux 内核调试指南[转载]
  9. Toshiba e-STUDIO5616AC 一体机驱动
  10. ES6 数组函数forEach()、map()、filter()、find()、every()、some()、reduce()
  11. 武汉市计算机学校报名条件,自主招生报名条件
  12. Pytorch下的卷积和池化
  13. 含8的数字的个数 (10分)
  14. html5 调用系统相册,iOS之H5调用系统相册相机浏览文件
  15. AndroidX初识
  16. Snort入侵检测系统实验
  17. Bean对象的拷贝方法BeanCopier和BeanUtils
  18. 【云服务器 ECS 实战】一文掌握弹性伸缩服务原理及配置方法
  19. 万兴pdf编辑解压后打不开_如何使用万兴PDF专家编辑PDF文档?
  20. PyQt5随笔:QTextEdit和QTextBrowser文本框多次设置输入内容时,显示全部内容的方法

热门文章

  1. 理想的程序大师是如何样炼成的
  2. tikz包 安装_LaTex各种安装
  3. PHP时间日期操作增减(date strtotime) 加一天 加一月
  4. 米达机器人_《星球大战》历史中最佳机器人排名TOP10,你知道几个?
  5. nginx配置vhost
  6. 华为mate40pro和华为mate40pro+的区别
  7. NFC以及NFC支付简介
  8. Windows 删除恢复分区
  9. Windows使用命令行删除恢复分区
  10. 最新面试题汇总(附带答案)【建议看看】