10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍
一、为什么会有 API Gateway 网关随着微服务架构的流行,很多公司把原有的单体架构改造成了微服务架构 。
第一步:拆分
微服务架构就是把一个大单体改造成一个一个小的应用 。比如把一个电商网站,从单体改造成微服务架构,如下图:

10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
改造成微服务后,用户通过 PC 和手机访问电商应用,都是调用后面的微服务 API,而且各自要调用多个后端 API 服务才能拿到需要的数据 。业务量小的时候,这种访问方式没有多大问题 。用户多了访问量大了呢?这种方式就不能持续 。
第二步:API 功能逐渐增多
如果后面业务发展较快,用户需要的功能越来越多,那么相应的后端微服务的数量也会越来越多,用上面这种方式来访问,调用的微服务 API 数量越来越多,如果访问量大服务器压力就会加大,那能不能缩减下调用 API 的数量,减轻服务器访问压力?聚合服务,内部聚合一些 API 服务接口形成一个聚合服务,PC 或手机客户端访问这个聚合服务,是不是就减少了访问次数?提高访问性能,提升用户体验 。
为了提高 API 服务的可用性,还会给 API 加上限流控制,超时控制,熔断降级,API 隔离等功能 。
为了提高 API 服务访问安全性,还会给 API 加上访问控制,比如进行 JWT 验证,黑白名单机制 。如下图:
10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
第三步:API 网关
想一想,每一个 API 服务都需要这些功能,那能不能把这些功能集和在一起?后面就不需要给每个 API 添加同样的功能 。减少开发时间 。
这些功能都可以集成到 API Gateway 网关中,如下图:
10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
还有,要上线服务或重构 API 服务时,这种用户直接访问的方式,就会造成用户访问出现错误,对用户体验是很大伤害 。API 网关屏蔽用户直接访问后端服务,它就可以平滑过渡这种发布需求或重构 API 需求 。
它还有负载均衡,后端服务可以进行相应扩展 。
二、API 网关功能通过上面介绍可以看到,API 网关可以统一后端的访问,也就是用户访问后端服务必须通过 API 网关才能够访问到 。API 网关统一管理了后端的服务接入服务 。
它就相当于一尊门神,守护着后端的所有服务 。
API 网关的功能:
  • API 管理:API 上线、下线,API 路由转发
  • 服务治理:限流控制,超时控制,熔断降级
  • 安全策略:统一身份认证,黑白名单机制
  • 协议转换:REST、gRPC、Dubbo 不同协议转换
  • API 发布策略:灰度发布,流量染色
  • 负载均衡:服务扩展,服务伸缩
其他一些功能:监控报警、链路追踪、日志收集审查等 。
三、常见开源 API 网关介绍在前面写的关于微服务文章:微服务架构学习与思考(04):微服务技术体系 一文中又提到过一些开源网关软件 。这次再来详细介绍下开源 API 网关软件 。
3.1 以 Nginx 为基础的网关以 Nginx 为基础,在加上 Lua 语言来进行扩展编程的网关 。
3.1.1 OpenResty介绍:OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项 。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关 。

经验总结扩展阅读