点赞
评论
收藏
分享
举报
分享实录 | 将 NGINX 打造成功能强大的 API 网关(下)
发表于2023-08-15 11:56

浏览 608

原文作者:易久平 - F5 NGINX 资深架构师
原文链接:分享实录 | 将 NGINX 打造成功能强大的 API 网关(下)
转载来源:NGINX 开源社区

NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

编者按——本文为 NGINX Sprint China 2022 年度线上大会的分享实录,点击这里免费观看大会完整视频回放。由于文章较长,将分为上下两篇发布。点击《分享实录 | 将NGINX打造成功能强大的API网关(上)》阅读上篇。

本次分享中,我们将讨论本次分享将全面介绍 API 网关的概念和功能,以及如何利用 NGINX 打造一个功能强大的 API 网关。



 

3. 动手打造一个 API 网关


如何打造一个 API 网关呢?从工程角度,我们还是需要符合一些软件开发的规律,或是软件工程的一些思想去完成整个开发过程。总体来讲,可以分为 7 大步骤完成开发:

  • 网关功能规划:对 API 网关的功能进行规划,明确 API 网关功能特性和非功能特性。
  • 技术架构设计:明确技术架构,确定数据面、控制面以及管理面的组件架构,还需明确 API 网关的部署位置,确保其技术架构的可行性。
  • NGINX 配置设计:明确 NGINX 的配置设置,用哪些 NGINX 指令和配置实现网关功能,在这个时候需要手动配置做 PoC 进行验证,来确认功能是否可行并且满足需求。
  • 配置模型设计:让不熟悉 NGINX 的用户可以快速的使用 NGINX 网关。
  • 配置模板开发:实现一个模板,能够通过模型与配置数据自动渲染生成 NGINX 配置。
  • 控制面开发:控制面开发,让 API 网关可同时支持 NGINX 开源版和商业版,除了支持 Reload 外,还可以支持动态 API 配置变更。
  • 功能测试验证:保证 API 网关的功能确实存在且可用。


3.1 API 网关功能架构


首先,这个 API 网关的功能其实只是一个子集。作为一个 API 网关,除了 API 的反向代理功能外,还需要通过与 Eureka、Nacos 等注册中心集成发现后端服务实例。另外还需要明确 API 所支持的协议,比如说 HTTP 协议、gRPC 协议,或者是 Web Socket 协议,同时 API 需要具有分权分域的管理能力,以及地址匹配或者自动化配置的能力,所以需要思考如何更好的管理 API。

第二点需要关注 API 的安全,比如 API 的访问控制,API 的认证方式等等。

第三点是 API 流量控制,需要保证 API 网关作为流量入口能保护后端应用,它可以做到流量限速、请求改写、响应改写,或者进行统一的错误码转换,甚至进行一些应用优化。另外还需要实现流量调度,除了反向代理负载均衡常见的能力以外,还可以实现灰度发布、蓝绿发布能力或者流量计算能力。


3.2 API 网关技术架构


上图是一个简单的技术架构设计,当然这个技术架构是仅是一个蓝图,本次实验并没有把所有的功能实现,主要实现的是数据面和控制面的能力。

控制面的核心作用是与配置中心或者是管理面集成获取配置数据,并且转译成 NGINX 配置。这个过程有可能是生成配置文件后做 Reload,也有可能是直接调用 NGINX 的 API 动态加载配置。

另外网关控制服务的功能主要是写入或修改配置。本次演示里用 etcd 保存配置,将 etcd 当成数据库使用,先把配置写到 etcd,再通过 Confd 执行模板将配置转换成 NGINX 配置。

API 网关作为数据面,除了作为业务服务的反向代理外,它可能还会对接两种类型的服务:第一种是对接认证鉴权中心进行 API 的访问认证或者鉴权,另一种是对接监控中心实现数据面的监控。


3.3 API 网关配置设计


NGINX 有许多的功能,为了实现特定的功能,需要去把这些能力进行规划。我们可以把它规划成目录结构,这些目录结构需要按照不同的维度进行考虑。

比如配置是否经常修改,是否根据业务维度进行拆分、底层配置是否要与接收请求的 HTTP 服务配置分开、后端服务配置是否分开等等。所以我们需要进行这样的规划,API 网关的管理才更简单,更解耦。


3.4 API 网关模型设计


模型决定了整个应用系统的架构,在本次分享的 API 网关架构里,我们设计了一个 API Gateway 模型,上图将模型分为两种颜色表示,深蓝色部分我们定义为实体,它们具有唯一的 ID 及独立的生命周期,浅蓝色的部分定义为值对象。我们用领域驱动的思想来定义模型,所以最上层会有一个网关 (Gateway) 的实体。

Gateway 代表的是网关集群,集群内存在多个 NGINX 实例,同一个 Gateway 可能会有不同的 Server。Upstream 比较好理解,作为上游服务一定会有一个模型描述上游服务集群。Member 可能有很多种形式去创建它,它可能是手动配置,也可以是自动发现,也可以是 Excel 去导入。

对于上游服务集群 (Upstream) 来说,我们也会有一些策略,一般会有三类策略。首先,是否要做一些流量的负载均衡;其次,针对于某些状态的会话是否要做到会话保持,从而保证服务的连续性;最后,是否要做一些健康检查功能去探测后端服务的可用性,明确是否要进行熔断降级。


3.5 API 网关控制代理开发


当模型设计完毕后,需要进行代理开发,本次分享案例,使用的代理为 Confd,因为 Confd 本身是一个配置变更工具,它支持比较灵活的模板功能,它也支持对接 etcd、Redis 等 NoSQL 配置中心或缓存服务器。这样我们可以用它来监听配置变化,并完成配置生成和加载。


3.6 API 网关模板开发


模板的概念大家都已近了解很多了,模板其实是采用了动静结合的思想,把一部分静态的东西放到模板里面,把一部分动态的东西转换成变量。如果模板灵活一些的话,可以做一些 if else 的判断,也可以做 for 循环,甚至实现了一些扩展能力,调用一些指令等等。


功能测试分为场景和用例两种维度,比如在测试 TLS 的卸载场景时,需要考虑证书是否过期以及证书存放位置,场景和用例的设计一定要结合整体的功能规划来实现。

另外,在整个测试过程中一定有一个后端服务。用例里实现了一个简单的应用,这个应用功能非常简单,只是用来做 API 的测试,简单实现了几个业务领域的服务,主要是为了满足这次测试需求,所以并没有实现的太复杂。

或许还会用到自动化测试工具,因为在后续的更新中可能会新增功能,在新增功能的过程中一定要保证原有功能的可用性,所以最好能自动化的去做集成和交付。




NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:

开源社区官网:https://www.nginx.org.cn/

微信公众号:https://mp.weixin.qq.com/s/XVE5yvDbmJtpV2alsIFwJg


已修改于2023-08-15 11:56
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
239
文章
21
问答
198
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 6.4k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 3.5k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 5k