网关是一种能够在不同网络协议之间进行数据交换的设备或服务器。网关可以实现不同网络之间的互联互通,也可以实现不同协议之间的转换和适配。这是网关在网络中的原始含义,延伸含义就是在两个系统间进行访问控制。在应用层面,一般是指七层应用层协议的路由入口。

网关发展

随着业务的发展, 规模和复杂性与日俱增. 业务上需要进行更多的组织拆分, 功能拆分, 进而形成了大量的服务, 为了对这些服务进行统一的管理, 就有了网关的概念.

对于流量的入口, 我们一般称之为流量网关, 流量网关主要用于控制和管理网络流量,包括负载均衡、流量限制、数据过滤等功能。它通常位于网络架构中的最前端,作为应用程序和网络之间的入口。流量网关的主要作用是确保网络的可用性和可靠性

各个业务域的入口一般称为API网关, API网关是一种集成了配置发布、环境管理、接入认证,用户鉴权、访问控制等功能的API管理和服务治理的工具。使用API网关托管API,即可高效,安全、低成本的管理服务,同时还提供API的转换、聚合、过滤器等服务。API网关作为请求的单一入口点,将请求分配给相应的服务,然后收集结果并将其传递给请求者。而不是让客户单独请求访问每项微服务。

网关痛点优势语言
NGINX1. 修改配置需要 Reload 才能生效,跟不上云原生的发展。1. 老牌应用;
2. 稳定可靠,久经考验;
3. 高性能。
c
Apache APISIX1. 文档不够丰富和清晰,需要待改进。1. Apache 基金会顶级项目;
2. 技术架构更贴合云原生; 3. 性能表现优秀;
4. 生态丰富; 5. 除了支持 Lua 开发插件外,还支持 Java、Go、Python、Node 等语言插件。
c,lua
Kong1. 默认使用 PostgreSQL 或 Cassandra 数据库,使得整个架构非常臃肿,并且会带来高可用的问题;
2. 路由使用的是遍历查找,当网关内有超过上千个路由时,它的性能就会出现比较急剧的下降;
3. 一些重要功能是需要付费的。
1. 开源 API 网关的鼻祖,用户数众多;
2. 性能满足大部分用户的需求;
3. 生态丰富;
4. 支持 Lua 和 Go 开发插件。
c,lua
Envoy1. 使用 C++,二次开发难度大;
2. 除了 C++ 开发 filter 外,还支持 WASM 和 Lua。
1. CNCF 毕业项目 更适合服务网格场景多语言架构部署。c++
Spring Cloud Gateway1. 虽然 Spring 社区成熟,但是 Gateway 资源缺乏。1. 内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用;
2. Spring 系列可扩展性强,易配置,可维护性好;
3. Spring 社区成熟;
4. 简单易用;
5. 对于 Java 技术栈来说方便。
java
traefikGC 抖动, p99时延抖动功能扩展方便, 性能高golang
百度 BFEGC 抖动, p99时延抖动功能扩展方便, 性能高golang
api网关对比

网关功能总结

  • 请求路由
  • 负载均衡
  • 动态上游
  • 热更新(不断连接)
  • 配置中心
  • 熔断, 限流, 降级
  • 自定义逻辑(灰度发布,服务发现,HTTP 基本认证,密钥认证,CORS,私有协议扩展)
  • 可观测性
  • 混合架构(虚拟机与云原生容器)

网关融合

目前的架构基本上南北用流量网关接入, 微服务间东西流量用api网关来负载. 随着安全, 合规审计的之类的垂直需求愈加频繁的背景下, 东西南北网关融合的趋势愈加明显. 既想要流量网关的性能, 又想要api网关的灵活和扩展诉求, 随之而来的是云原生的网关, 对业务网关和流量网关以及安全网关的进行了高度集成. 显著地降低了部署和运维成本.

参考资料

什么是API网关?
Deploying NGINX as an API Gateway, Part 1
Cloudflare弃用NGINX,改用Rust编写的Pingora,你怎么看?

亿级流量架构网关设计思路,常用网关对比
亿级流量架构网关设计思路,常用网关对比2
https://edgar615.github.io/api-gateway-flow.html
交易系统: 百亿流量微服务网关的设计与实现 亿级流量架构之网关设计思路,常见网关对比

限流

redis + lua 限流 算法 滑动窗口 漏桶 令牌桶
shenyu gateway 限流 lua redis

视频资料

人月聊IT(所在公司开发了一个云原生的网关项目, 现在无限期停止维护, 公司主要做项目交付) 一张图讲解微服务-注册中心,微服务网关和API网关区别

IT老齐的咨询建议: 上万租户SAAS系统大规模Nginx动态路由优化方案
【IT老齐321】20分钟上手高性能动态网关APISIX

apisix conf 相关分享

Apisix集中式流控与Sentinel分布式流控
apisix 故障排查: Apache APISIX 在希沃网关的应用与实践
vivo 用数据库替换etcd: Apache APISIX 落地实践分享
etcd initial cluster status 开始检查这个状态设置为空或者为new, 以后每次部署设置为 exists: 景顺长城基于 Apache APISIX 在金融云原生的生产实践
基于 Apache APISIX 的蓝鲸 API 网关设计与应用
爱奇艺基于 Apache APISIX 的 API 网关落地实践
Apache APISIX在有赞的落地实践

概念对比

温铭: Apache APISIX 的全流量 API 网关统筹集群流量

多层网关已成过去,网关多合一成潮流,网关改造正当时|Higress 1.0 正式发布
开源云原生融合网关 Hango 的最新实践与思考
国内航空巨头如何从 NGINX 迁移至 APISIX?

Higress nginx apisix: 云原生网关当道,三大主流厂商如何“竞技”?
阿里巴巴开源下一代云原生网关 Higress:基于 Envoy,支持 Nginx Ingress 零成本快速迁移
Edith网关——面向小红书亿级DAU的网关大规模实践-陈华昌
MSE: 云原生网关将流量网关、微服务网关、安全网关三合一,被誉为下一代网关
hango: 为什么我们需要全能力云原生网关
网易hango
Loggly: Benchmarking 5 Popular Load Balancers: Nginx, HAProxy, Envoy, Traefik, and ALB
slack: Migrating Millions of Concurrent Websockets to Envoy

Envoy 架构

限流应用

kong golang: 服务限流在多项目下的方案设计与落地实践

java网关

业务网关的一些场景: 业务网关的落地实践
得物自研API网关实践之路
美团: 百亿规模API网关服务Shepherd的设计与实现
美团网关服务编排_流程引擎:美团服务体验平台对接业务数据的最佳实践-海盗中间件
放弃 Spring Cloud Gateway!Apache APISIX 在「还呗」业务中的技术实践
如何设计一个亿级网关(API Gateway)? 唯品会API网关设计与实践 csdn: 100万级连接,石墨文档WebSocket网关如何架构?

golang 网关

小红书Edith
日均数十亿访问量!解读个推API网关高能演进