网关知识介绍
什么是网关
网关是一种能够在不同网络或协议之间进行数据交换的设备或服务器。网关可以实现不同网络之间的互联互通,也可以实现不同协议之间的转换和适配。网关可以根据不同的功能和层次进行分类。网关可以提供多种服务,例如路由、安全、负载均衡、缓存、压缩、加密、认证、授权、过滤、转码等。
南北流量、东西流量
- 南北流量
客户端和服务器之间的流量被称为南北流量。
- 东西流量
不同服务器之间的流量与数据中心或不同数据中心之间的网络流被称为东西流量。
南北网关选型
需求:需要一款流量控制网关,能做到HTTP协议接入、反向代理、负载均衡、路由,业界比较有名的网关选型有Nginx、Kong、APISIX
- Nginx:Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
- Kong: Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统
- APISIX:APISIX 是一个高性能、可扩展的网关,基于 nginx(openresty)和 Lua 实现功能,借鉴了Kong的思路。
合适度思考
从目前我们需要实现功能的合适度来说,上述3款产品都基本满足我们的需要,HTTP协议接入、反向代理、负载均衡、路由这些功能他们都是拥有的
成熟度思考
NGINX已有20多年的历史,Kong到现在也有快10年的历史,APISIX目前已查到的信息来看大概有4年历史,但是上述的3个产品他们都在大厂中经过考验因此,都成熟的产品。
拓展性思考
产品 | 功能拓展方式 | 编写语言 |
Nginx | 自定义模块 | C语言 |
Kong | 插件 | LUA语言包 |
APISIX | 原生插件、额外插件 | 原生插件: LUA语言 外部插件:支持JAVA.GO.PYTHON多种语言 |
如果需要对网关额外开发,APISIX的额外插件支持多种语言开发,会是一个比较好的选择
产品 | 集群部署 | 配置热部署 | 配置存储媒介 | 维护界面 | 接入第三方服务(普罗米修斯等) |
Nginx | 不支持 | 不支持 | 配置文件 | 没有 | 支持,接入非常痛苦 |
Kong | 支持 | 支持 | PostgreSQL 或 Cassandra | 原生付费,开源:konga | 支持,国产第三方服务接入支持差 |
APISIX | 支持 | 支持 | ETCD | APISIX DASHBORD | 支持,国产第三方服务接入支持好 |
APISIX和KONG在部署和运维方面都是输出与可选范围,但是我们如果要接入一些国产服务的话可能APISIX会是更好的选择
APISIX
什么是APISIX
Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
更多内容:https://apisix.apache.org/zh/blog/2022/07/22/exploration-of-apisix-in-api-and-microservices/
选择APISIX
综合考虑选择APISIX
1. APISIX拥有的功能符合我们的网关的需求
2. APISIX经过国内多加企业的使用,已有成熟且成功的部署案例
3. 作为主要语言JAVA的我来说,使用APISIX对后续进行的插件开发,不需要额外的学习
4. APISIX为云原生而生,可高可用,对国内的监控服务也要比较好的支持,在部署上复用普罗米修斯已经部署的etcd集群一定程度上简化了部署
apisix外部插件
什么是apisix外部插件
由于apisix是lua开发的,开发插件的化就需要lua编写,当时我们后端主要使用的语言是java,因此要考虑如何使用java开发apisix插件。 APISIX支持以Sidecar的方式加载和运行我们用JAVA写的插件。这里的Sidecar就是Plugin Runner,写的插件叫做External Plugin。
apisix外部插件执行原理
当我们在 APISIX 中配置了一个 Plugin Runner,APISIX 将以子进程的方式运行该Plugin Runner。
该子进程与 APISIX进程从属相同用户。当重启或者重新加载 APISIX 时,该 Plugin Runner也将被重启。
当我们为指定路由配置了ext-plugin-*
插件, 匹配该路由的请求将触发从APISIX到Plugin Runner 的RPC调用。
Plugin Runner将处理该 RPC调用,在其侧创建一个请求,运行External Plugin并将结果返回给 APISIX。
External Plugin及其执行顺序在可以根据上图来了解。与其他插件一样,External Plugin可以动态启用和重新配置。
结语
后续我会围绕APISIX及其插件实现一套开放平台网关部分的开发
参考:https://apisix.apache.org/zh/docs/apisix/external-plugin/
https://zh.wikipedia.org/wiki/%E7%BD%91%E5%85%B3
https://juejin.cn/post/7036208306129469448