背景
互联网时代,很多公司为了适应更加灵活的业务需求,基于 HTTP 协议和 Restful 的架构风格及简洁和结构清晰的 JSON 语言成为企业开发的最佳实践,在 SOA 架构中,企业服务总线技术 ESB 所暴露的集中式架构的劣势让开发者明白基于注册和发现的分布式架构才是解决问题的关键办法。由此,微服务架构逐渐流行起来。
微服务网关是微服务架构中的一个关键的角色,用来保护、增强和控制对于微服务的访问,微服务网关是一个处于应用程序或服务之前的系统,用来管理授权、访问控制和流量限制等,这样微服务就会被微服务网关保护起来,对所有的调用者透明。因此,隐藏在微服务网关后面的业务系统就可以更加专注于业务本身。
分类
行业中通常把网关分为两个大类:流量网关与业务网关。流量网关主要提供全局性的、与后端业务无关的策略配置;业务网关顾名思义主要提供独立业务域级别的、与后端业务紧耦合策略配置。
流量网关
流量网关通常只专注于全局的Api管理策略,比如全局流量监控、日志记录、全局限流、黑白名单控制、接入请求到业务系统的负载均衡等,有点类似防火墙。典型代表有Nginx、OpenResty、Kong、k8s ingress。
业务网关
与流量网关相对应的就是业务网关,业务网关更靠近我们的业务,也就是与服务应用打交道。我们常说的API网关,微服务网关都是属于业务网关。
典型的业务网关有Zuul、Spring Cloud Gateway、Apache shenYu等。
构成
业务网关作为微服务后端服务的统一入口,它可以统筹管理后端服务,主要分为数据平面和控制平面:
● 数据平面主要功能是接入用户的HTTP请求和微服务被拆分后的聚合。使用微服务网关统一对外暴露后端服务的API和契约,路由和过滤功能是网关的核心能力模块。另外,微服务网关可以实现拦截机制和专注跨横切面的功能,包括协议转换、安全认证、熔断限流、灰度发布、日志管理、流量监控等。
● 控制平面主要功能是对后端服务做统一的管控和配置管理。例如,可以控制网关的弹性伸缩;可以统一下发配置;可以对网关服务添加标签。
主要功能
1. 路由功能
路由是微服务网关的核心能力。通过路由功能微服务网关可以将请求转发到目标微服务。在微服务架构中,网关可以结合注册中心的动态服务发现,实现对后端服务的发现,调用方只需要知道网关对外暴露的服务API就可以透明地访问后端微服务
2. 负载均衡
网关结合负载均衡技术,利用Eureka或者Consul等服务发现工具,通过轮询、指定权重、IP地址哈希等机制实现下游服务的负载均衡。
3. 统一鉴权
一般而言,无论对内网还是外网的接口都需要做用户身份认证,而用户认证在一些规模较大的系统中都会采用统一的单点登录(Single Sign On)系统,如果每个微服务都要对接单点登录系统,那么显然比较浪费资源且开发效率低。API网关是统一管理安全性的绝佳场所,可以将认证的部分抽取到网关层,微服务系统无须关注认证的逻辑,只关注自身业务即可。
4. 协议转换
网关的一大作用在于构建异构系统,网关作为单一入口,通过协议转换整合后台基于REST、gRPC、Dubbo等不同风格和实现技术的微服务,为客户端提供统一服务。
5. 限流熔断
在某些场景下需要控制客户端的访问次数和访问频率,一些高并发系统有时还会有限流的需求。在网关上可以配置一个阈值,当请求数超过阈值时就直接返回错误而不继续访问后台服务。当出现流量洪峰或者后端服务出现延迟或故障时,网关能够主动进行熔断,保护后端服务,并保持前端用户体验良好
6. 黑白名单
微服务网关可以使用系统黑名单,过滤HTTP请求特征,拦截异常客户端的请求,例如DDoS攻击等侵蚀带宽或资源迫使服务中断等行为,可以在网关层面进行拦截过滤。比较常见的拦截策略是根据IP地址增加黑名单。在存在鉴权管理的路由服务中可以通过设置白名单跳过鉴权管理而直接访问后端服务资源。
7. 灰度发布
微服务网关可以根据HTTP请求中的特殊标记和后端服务列表元数据标识进行流量控制,实现在用户无感知的情况下完成灰度发布
8. 流量染色
和灰度发布的原理相似,网关可以根据HTTP请求的Host、Head、Agent等标识对请求进行染色,有了网关的流量染色功能,我们可以对服务后续的调用链路进行跟踪,对服务延迟及服务运行状况进行进一步的链路分析
9. 可观测
承接集群流量,就需要掌握每个接入站点的流量分布情况;以及每个API接口的处理时长;响应的状态,再细分的话可以观察到业务响应异常的分布情况;监控往来的短信业务与邮件业务,统一处理告警规则与策略,最终汇聚为统一的网关业务看板。对接 Prometheus、Zipkin、Skywalking 等统计、监控组件;
10. 日志审计
微服务网关可以作为统一的日志记录和收集器,对服务URL粒度的日志请求信息和响应信息进行拦截。
云原生网关
概述
近年来,容器服务与K8s技术越来越火热。网关在拥抱容器技术的基础上实现了进一步的发展,出现了云原生网关的概念。
下面的表格是针对云原生网关的基本能力的概括:
云原生网关 |
云原生 |
支持K8s Ingress、K8s Gateway API、K8s服务发现 |
拥抱开源 |
基于开源生态构建,打通 Nacos/Eureka/K8s 多种服务来源 |
|
策略配置 |
热更新、声明式、可编排 |
|
高集成 |
具备流量网关、微服务网关路由能力、降低使用成本 |
|
高扩展 |
支持插件化扩展 |
|
高安全 |
Waf、DDos、HTTPS |
|
服务治理 |
服务发现、限流、熔断、降级等 |
|
可观测 |
支持Logging、Monitoring、Tracing |
传统的微服务架构需要在顶层部署流量网关用来负责整个机器的南北向流量的调度和安全防护,而在下面的各个业务线部署多个微服务网关,负责业务线之间即东西向的流量调度和服务治理功能。
在K8s技术发展下,提出了新一代网关模式,将传统的流量网关和微服务网关二合一,由云原生网关统一负责。部署架构更加简单,成本也更低。
云原生网关能力
- 流量网关和微服务网关合二为一
- 无缝集成容器和微服务体系,支持Nacos、Eureka、K8s等多种服务发现方式
- http/https、gRPC、Dubbo等多协议支持
具体能力图如下所示: