API 网关选型及包含 BFF 的架构设计
一 背景介绍下图是我从网络上找到的一个微服务架构的简单架构图 , 如图可见 API Gateway 在其中起到一个承上启下的作用 , 是关键组件 。
文章插图
图片来源于网络
在更通用的场景下我们会使用 NGINX 这样的软件做前置 , 用来处理SLB负载均衡过来的流量 , 作用是反向代理、集群负载均衡、转发、日志收集等功能 。
然后再将 NGINX 的请求 proxy 到 API Gateway 做统一网关处理 。
在上面的这个场景下 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 好基本上已经是业界公认的了 , 实际上 , 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都是非常优秀的 , 目前唯一担心的就是这种早期项目没有太多大规模应用实践 , 如果上生产还是有风险 , 可在测试环境调研 , 并等待有更多生产实践作为依据 。当然如果架构师认为风险并不大 , 且经过了测试调研也是可以上的 。
五 BFF 层建设迭代
文章插图前面我们将 API Gateway 的网关选型介绍了一下 , 请求通过网关后一般不会直接打到具体微服务上的 , 而是会通过BFF层 , 所谓的BFF , 即 backend for frontend 面向前端的后端 。 具体来说它的职能包括:
- 开发者|华为鸿蒙 HarmonyOS API Version 7 版本发布
- ui|华为鸿蒙 HarmonyOS API Version 7 发布
- 组件|低代码:可视化逻辑编排选型
- 微软计划为 Excel 引入新的 JavaScript API,可自定义数据类型
- 供应链管理|Apiiro 开源模块化框架,防止依赖混淆攻击
- 全栈式|英特尔与中科院计算所将共同建立 oneAPI 卓越中心
- fpg英特尔将与中科院计算所共同建立oneAPI卓越中心
- 聚合网| “北京微控工业网关技术”入选《崛起中国》栏目
- collov|融资丨智能室内设计及家居电商平台「Collov」完成Pre-A轮融资,MindWorks Capital概念资本领投
- kit|HMS Core 6能力全面升级,开放API超2万,华为HMS生态稳了
