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


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

文章插图
?(from:https://apisix.apache.org/zh/docs/apisix/getting-started/)
从图上可以看出 , APISIX 底层基座也是基于 Nginx 和 OpenResty 。运行在基座之上的是 APISIX 软件 。
  • 底层技术基座:Nginx 和 OpenResty
  • APISIX软件:看上面架构图,
    第一部分:APISIX Core,apisix 核心,包括 Lua 插件、多语言插件运行时(Plugin Runner)、Wasm 插件运行时等
    第二部分:各种内置插件 , 包括可观测性、安全、流量控制等插件 。
APISIX 多语言插件运行时提供多种开发语言的支持,比如 Golang、Java、Python、JS 等 。
技术架构图:
从另外一个角度来看看apisix架构,分为数据面和控制面:
10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
?(from:https://github.com/apache/apisix)
  • apisix 使用 etcd 作为配置中心来进行数据信息保存和同步配置 。
特性功能可以到 github 上看它的 Features,列举了很多功能特性 。
  • 扩展能力-插件功能
a)apisix 内置了很多插件,可以看文档 Plugins 。
b)它也有一个插件市场,plugin hub 。
c)当然你也可以自定义插件 。这些看起来与 kong 开源版本拥有扩展功能差不多 。
  • 高可用集群
  1. Apache APISIX 的数据平面是无状态的,可以进行随意的弹性伸缩,前面加一层负载均衡即可
  2. Apache APISIX 的控制平面是依赖于 etcd cluster 的高可用实现的,不需要任何关系型数据库的依赖
与 kong 区别:
这第二点与 Kong 集群有区别 , Kong 集群依赖的是 Postgre 和 Cassandra 。
Web UI通过RESTful API 来管理 apisix,通过 Admin API 来管理 apisix 节点 。通过 Control API 控制单个 apisix 数据平面行为 。
官方还提供了一个 Dashboard,通过 UI 管理 apisix 。
与 kong 区别:
kong 开源版本没有这个 Dashboard 功能,企业版本有 。
3.1.4 Orange 网关这个 orange 也是一 OpenResty 为基础开发的网关 , 
orange 官网: orange 地址
github 地址:orange github
orange 的功能相对于前面的 kong 和 apisix,比较少 。所以它的架构肯定比他们简单,可以作为学习之用 。
如果你不需要那么多功能,可以试用下这款 API 网关 。
四、API 网关缺点
  1. 让系统复杂度变高
在整个系统架构中,多一个了 API 网关,就多了一份维护工作,多了一处发生“危险”的地方 。
  1. API 网关可能成为性能瓶颈
因为所有的流量都要经过 API 网关,可以通过扩展集群来解决 。前面在加一组负载均衡设备等方法 。
五、参考
  • https://openresty.org/openresty 官网
  • https://github.com/openresty openresty github
  • https://github.com/openresty/lua-nginx-module lua 模块
  • https://openresty.com.cn/cn/edge/ openresty edge 企业级产品
  • https://github.com/openresty/lua-nginx-module#nginx-api-for-lua nginx api for lua
  • https://konghq.com/ kong 官网
  • https://github.com/kong/kongkong github
  • https://docs.konghq.com/gateway/3.0.x/ Kong 3.0.x 文档
  • https://docs.konghq.com/gateway/3.0.x/plugin-development/kong 插件文档
  • https://docs.konghq.com/gateway/3.0.x/production/clustering/ Kong 3.0.x 的集群文档
  • https://docs.konghq.com/hub/kong 插件 hub
  • https://github.com/Kong/kong-plugin 插件模板
  • https://github.com/pantsel/kongakong web ui
  • https://apisix.apache.org/zh/docs/apisix/getting-started/ apisix 文档
  • https://apisix.apache.org/zh/docs/apisix/plugins/batch-requests 内置插件
  • https://apisix.apache.org/zh/plugins/插件市场
  • https://apisix.apache.org/zh/docs/apisix/control-api/
  • http://orange.sumory.com/docs/orange 地址

推荐阅读