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


它可以在物理机上运行也可以在 kubernetes 上运行 。

kong 官网:官网地址
github地址:kong github
kong 也提供了一张使用网关前后的对比图 , 可以直观看到使用 API 网关的变化,API 自身的功能明显减少,都集成到 kong 里面:
10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
?(来自:https://github.com/Kong/kong)
一些通用的功能都集成到 kong 里,而后面 API/RPC 只需要编写业务相关功能就可以了,简化了 API 开发 。
kong 架构kong 架构图:
10 微服务架构学习与思考:微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

文章插图
  • Admin API:通过 admin api 来管理 kong 的功能
  • Plugins:插件 , 默认插件和用户自定义插件
  • Clustering & Database:存储 kong 集群节点信息 , API 信息,插件信息等 。目前提供了 PostgreSQL 和 Cassandra 2 种支持 , 如果需要高可用建议使用 Cassandra 。
  • OpenResty:处理插件、运行插件程序
  • Nginx:处理底层操作
功能简介
  • 开源产品和企业产品功能对比
kong 也提供了企业级产品,它还给出了 kong 开源产品和 kong 企业级产品功能对比图,功能详细对比在这里 https://docs.konghq.com/gateway/latest/#features 。
可以看到,企业级产品比开源产品提供了丰富得多的功能,这样才能给企业提供价值 。
对比来看,开源功能相对企业版较少(开源产品功能也挺多),但是开源产品功能已经足够小公司用,还能自定义插件功能 。如果你有预算费用可以使用企业版 , 这样更快还有官方咨询服务 。如果没有预算,那开源也足够用,也可自己开发插件 。
  • 开源产品功能
开源产品除了提供一些基础功能:
包括 HTTP 基本认证、密钥认证、CORS、监控、文件日志、API 请求限流、请求转发、缓存、SSL设置等基本功能,这些功能都是通过插件机制实现 。
在 kong 3.0.x 文档中,还看到了蓝绿部署、cluster等功能,更多功能可以看文档 。
还有一些其他重要功能特性:
  1. 集群
kong 支持单节点集群和多节点集群 。
单节点集群:连接到数据库(Cassandra 或 PostgreSQL)的单个 Kong 节点创建一个节点的 Kong 群集 。通过此节点的 Admin API 应用的任何更改都将立即生效 。
多节点集群:多节点集群它是通过定期后台作业与其他节点进行数据同步 。可以通过配置参数 db_update_frequency(默认 5 秒) 更改频率 , 这个频率更新有点慢 。所以 kong 集群数据一致性是最终一致性 。
kong 也给用户提供了自定义插件的功能,如果你有需要,自己可以编写插件来扩展 kong 的功能 。
  1. 扩展功能-编写插件
用户可以编写插件来对 kong 功能进行扩展,kong 的插件是在 API 请求响应循环的生命周期中被执行的 。
kong 插件文档,默认用 lua 语言来编写插件 , 也可以用其它语言 。
a. 编写插件可以使用的语言 lua,Go , python,js
kong 在 2.6.x 支持了其他语言编写插件,有 Go , python,js,文档地址:https://docs.konghq.com/gateway/2.6.x/reference/external-plugins/ 。更老的版本应该也有支持的,得去看文档 。
它还有一个编写插件的模板 。
b. 插件市场 plugin hub
kong 也有自己的一个插件市场 , 也就是说你也可以给 kong 贡献第三方插件,是优质插件可能会被收录 。
  1. 通过 admin-api 来管理 kong
详细看文档地址:https://docs.konghq.com/gateway/3.0.x/admin-api/
web UI 界面管理kong 企业版提供了管理 UI,开源版本没有管理 UI 。但是程序员是多么的勤奋也崇尚开源,所以就有很多开源贡献的管理 UI,其中比较好用的,介绍 1 个,konga 。
konga 看 github 上的更新时间,也是 3 年前了,也算比较老的了 。
3.1.3 APISIX 网关APISIX 介绍Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能 。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量 。同时,它也支持作为 K8s Ingress Controller 来使用 。
apisix 也是基于 nginx , openresty 的 。
apisix 文档:apisix doc
apisix github:apisix github
APISIX 架构整体架构图:

推荐阅读