简介
网关主要服务于微服务和API,更倾向于研发人员的需求;而反向代理则主要应用于传统静态Web应用,更偏向运维工作。未来的发展趋势是将DevOps与网关和反向代理相结合,实现更深层次的融合。
发展演进史
在WEB1.0和2.0时代,前置反向代理由运维负责,使用Nginx进行反向代理、负载均衡、安全认证及限流缓存等功能。由于网站的升级频率较低,反向代理大多采用静态配置方式。
随着微服务时代的到来,API服务的升级频率显著提高,传统Nginx在动态配置方面表现不佳,运维的执行效率也相对较低,这就需要引入支持动态配置的网关服务,以便研发人员自主配置。
在云原生时代,对网关提出了更高的要求,必须支持灰度发布。这意味着网关不仅要具备动态配置能力,还需具备动态编程的功能,因此出现了网关与反向代理逐渐融合的趋势,典型的产品如Envoy和Traefik。
云原生时代下的可编程网关
在Kubernetes中,网关的等价概念称为Ingress,像Kong、Envoy、Traefik等可编程网关均支持与Ingress的对接。
对于不同的端口,如iOS、Android、H5和Web,是否需要区分则依赖于业务性质和团队规模。例如,携程内部就有超过十套面向不同端口的网关,整个网关集群规模超过百台。对于大型、多团队的公司,如果网关划分不够清晰,容易导致不同团队之间的冲突。微服务的划分同样如此,服务的细分程度主要取决于团队的规模和业务体量,小团队可以不做过细划分。
安全认证的要求因不同部门而异,例如支付部门需要更为严格的安全措施,因此可以进行独立的定制和部署。
总体而言,Nginx更偏向运维,而Spring Gateway对中国的Java程序员更为友好。
二者概念区分
如果你意识到网关与反向代理并不是互斥的,那么思考它们的关系会更加容易。可以将API网关视为反向代理的一种特定实现。
在实际应用中,API网关通常与反向代理结合使用,它作为应用程序层位于反向代理之后,承担负载平衡和运行状况检查的任务。例如,在类似WAF的三层结构中,Web应用程序防火墙/API网关被夹在反向代理层之间,一个反向代理层用于WAF本身,另一个则与单个微服务进行交互。
在差异方面,二者非常相似,主要是术语的使用。当进行基本的反向代理设置并开始利用更多功能(如身份验证、速率限制、动态配置更新和服务发现)时,人们通常会称之为API网关。
反向代理+网关部署架构
由于历史原因,很多公司在架构上同时存在反向代理和网关,这种双重系统的维护自然较为复杂,因此最好能够将其进行统一整合。
参考
图片链接:
[[[IMG_1]]]
[[[IMG_2]]]
[[[IMG_3]]]
