网关简述
网关是什么
网关只是一种概念,表示一个网络区域对外的出入口。网关不是一个具体的设备,只要一个软/硬件具有网关的概念,即为一个网络区域提供了对外的出入口,那么它就是网关。
我们看到很多不同的软件或设备都被称为网关,比如路由器、三层交换机、反向代理等。实际上只是因为这些组件为网络区域提供了一个对外的出入口,所以它们也可以被称为网关。
比如:
- 在TCP/IP场景下,路由器为一个网络区域提供了不同网段网络之间的数据传输出入口,那么路由器就是网关。
- 在HTTP场景下,反向代理服务器为业务系统网络区域提供了代理客户端请求的出入口,那么反向代理服务器就是网关。
- 在WEB场景下,API 网关为业务系统网络区域提供了针对 API 请求的出入口,那么 API 网关就是网关。
- 在IoT场景下,IoT 网关为设备网络区域提供了设备数据出入口,那么 IoT 网关就是网关。
生活中,栅栏、门、电话等都算作生活中的网关,它们为某一个区域提供了人、物体、声音、数据等对外的出入口,那么其就是网关。
维基百科:网关是通信网络中用于两个网络进行数据传输的硬件或软件。这个描述很准确,不过不太容易理解,对于API网关、反向代理网关,虽然都传输的数据,但理解为应用层的通信更易理解。
百度百科:网关是网间连接器、协议转换器。这个描述只是抽离了大多数网关设备的一些共性,从而总结出的概念,实际上是不正确且难以理解的。
网关的特点
- 为一个网络区域实现外部网络区域的数据传输。
- 作为外部网络区域统一的数据传输的出入口。收束所有杂乱的传输方式到统一的出入口。
- 通常网关组件位于网络区域的边界。外部流量尽可能的通过网关与内部网络区域交互。
为什么需要网关
网络区域需要对外暴露一些能力,那么必然需要一个出入口,那么这个出入口组件就是网关。
如何选择网关
网关区域需要出入口,如果这个出入口需要业务特性,那么就需要业务网关;如果需要管理这个调用,那么就需要API网关;如果需要对传输流量进行处理或管理,那么就需要流量网关;如果都需要那么就要看系统并发量,如果很大,那么分离流量网关与业务网关;如果比较小,那么流量网关和业务网关使用一个即可。
网关的常见类型
值得注意的是,对于一个网关组件,称呼什么比是什么更为重要。
比如一个API 网关,它可以称为 API 网关、可以称为业务网关、可以称为流量网关、可以称为应用网关等等,不同的称呼只是在不同场景下更容易的描述这个组件。
如果这个组件作用于微服务系统中,利用了其服务治理等功能,那么称为API网关或微服务网关合适,但如果作用于整个系统外部接入侧,使用了其流量调拨或业务分发路由等功能,那么称为流量网关或业务网关更为合适。
实际上网关类型之间的边界很模糊,这些类型的划分,更多的是依据功能而定,一个组件如果具备多种功能,那么其就具有多种称呼。
如:Nginx 实现了一些流量相关的功能,那么Nginx是流量网关;实现了一些转发等功能,那么Nginx是业务网关;但Nginx不是API网关,因为Nginx不支持对API的生命周期管理。
使用 Nginx 作为反向代理专门进行流量转发,那么Nginx此时是代理网关或流量网关。在 Nginx 之上配置了一些与业务强关联的proxy规则,那么Nginx此时又是业务网关。但需要注意的是不管是业务网关还是流量网关,它们都属于应用网关,工作于应用层之上的网关。
如:Kong的官方描述是一个云原生的API网关,但实际上很多人对Kong的理解都是作为流量网关使用。而由于可用于云原生环境,那么称呼其为业务网关或微服务网关也没错。
应用网关
应用网关属于一个概念,其是网关概念下在应用层数据传输的一个细分场景。为应用层之上的数据进行传输的出入口组件就是应用网关。限定数据类型为应用层数据。
如7层反向代理、API 网关、业务网关等,都属于应用层网关。
单向网关
单向网关只是一种功能上的划分,即数据只能单向传输。
双向网关
双向网关只是一种功能上的划分,即数据支持双向传输。
接入/接出网关
接入/接出网关属于一种概念,这个概念容易混淆不清,不同的场景下,‘接入/接出’的含义也不相同。
路由网关
在网络层,通常我们认为路由网关(路由器)等同于网关,这是因为早期关于TCP/IP的记载中都将路由器称为网关,且在Linux等操作系统中,在网卡静态配置里,Gateway属性都表示当前网卡所使用的路由器设备IP。
实际上,更应该称其为网络场景中的路由网关。
云存储网关
应用于云存储场景的网关设备,具体请自行查阅相关资料。
安全网关
应用于网络数据传输时的出入口网关设备。提供了数据传输的安全性上的一些防护功能。
业务网关
应用于应用层之上数据传输的出入口网关设备。提供了与业务密切相关的一些功能,如业务隔离、业务路由分发等功能。
目前大多数业务网关都是用API网关来实现。
流量网关
应用于应用层之上数据传输的出入口网关设备。提供了与流量密切相关的一些功能,如流量控制、流量监控。
流量网关大多使用代理网关组件,因为流量网关要求高性能,而代理网关(4/7层)目的之一也是提升性能。
代理网关
多应用于WEB场景下的请求调用出入口网关设备。目的是代理客户端的请求,提供了一些缓存、负载、安全等功能。
代理网关分为正向代理网关和反向代理网关,而反向代理网关又分为4层代理和7层代理。
API 网关
应用于 API 场景的API请求调用出入口网关设备。提供了一些对数据的标准化和一些治理、协议转换等功能。
IoT 网关
应用于物联网场景的设备数据传输出入口网关设备。
文件网关
应用于文件场景的文件数据传输出入口网关设备。主要目的在于实现一些文件传输的功能。
视频网关
应用于视频场景的视频流数据输出入口网关设备。主要目的在于实现一些视频流传输的功能。
长连接网关
应用于实时通信场景的数据传输出入口网关设备。统一不同长连接的数据传输通道,统一由长连接网关处理。
常见疑问
网关和代理服务器的区别
网关是一个概念,而代理服务器是为了代理客户端请求,从而实现系统的安全、性能等能力的组件。
API 网关和反向代理的区别
API 网关重点在于 API 的管理和智力。而反向代理的目的是代理客户端请求,提升性能和可用性以及安全性等。
API 网关可以简单的看作更多功能的反向代理,通常API网关具有反向代理的所有功能。如Nginx是一个反向代理,但不是API网关。而基于Nginx开发的Kong等实现了API管理和一些治理功能的组件可以用作API网关,也可以用作代理网关。
API 网关和业务网关的区别
API 网关核心在于 API 的管理。而业务网关在于业务的处理。
如通常业务网关在API网关之前构建,业务网关对于不同的业务进行业务隔离,不同的模块业务由不同的后方系统处理,而每一个后方系统都可能有一个API网关来处理这些业务API调用,但只需要处理一类业务。
一般来说 API 网关都可以作为业务网关来使用,但只有很少的业务网关可以作为 API 网关使用。
API 网关和流量网关的区别
API 网关核心在于 API 的管理和治理。而流量网关在于对流量的处理。流量网关通常只需要很简单的功能,比如流量的转发、流量的统计、流量的限制等。
一般来说,在功能上,大多 API 网关都可以作为流量网关使用,但出于流量网关要求的高性能特性,实际上只有很少的API网关会被当作流量网关使用。
南北流量与东西流量
Client-Server的流量是南北流量(Nginx),Server-Server流量是东西流量(微服务网关)。
实际上只是一个概念,源自于拓扑图中,一般将Client与Server排列为上下顺序。