跳至主要內容

网关基础介绍

Mr.Dylin...大约 8 分钟网关和前端工具链网关

微服务open in new window背景下,一个系统被拆分为多个服务,但是像安全认证open in new window,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。

1702453997229
1702453997229

一般情况下,网关可以为我们提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡open in new window

、降级熔断、日志、监控、参数校验、协议转换open in new window等功能。

上面介绍了这么多功能,实际上,网关主要做了两件事情:请求转发 + 请求过滤

由于引入网关之后,会多一步网络转发,因此性能会有一点影响(几乎可以忽略不计,尤其是内网访问的情况下)。 另外,我们需要保障网关服务的高可用,避免单点风险。

如下图所示,网关服务外层通过 Nginx(其他负载均衡设备/软件也行) 进⾏负载转发open in new window

以达到⾼可⽤。Nginx 在部署的时候,尽量也要考虑高可用,避免单点风险。

1702454009685
1702454009685

网关能提供哪些功能?

绝大部分网关可以提供下面这些功能:

  • 请求转发 :将请求转发到目标微服务。
  • 负载均衡 :根据各个微服务实例的负载情况或者具体的负载均衡策略配置对请求实现动态的负载均衡。
  • 安全认证 :对用户请求进行身份验证并仅允许可信客户端open in new window
  • 访问 API,并且还能够使用类似 RBAC 等方式来授权。
  • 参数校验open in new window
  • :支持参数映射与校验逻辑。
  • 日志记录 :记录所有请求的行为日志供后续使用。
  • 监控告警 :从业务指标、机器指标、JVM 指标等方面进行监控并提供配套的告警机制。
  • 流量控制 :对请求的流量进行控制,也就是限制某一时刻内的请求数open in new window
  • 熔断降级 :实时监控请求的统计信息,达到配置的失败阈值后,自动熔断,返回默认值。
  • 响应缓存open in new window
  • :当用户请求获取的是一些静态的或更新不频繁的数据时,一段时间内多次请求获取到的数据很可能是一样的。对于这种情况可以将响应缓存起来。这样用户请求可以直接在网关层得到响应数据,无需再去访问业务服务,减轻业务服务的负担。
  • 响应聚合open in new window
  • :某些情况下用户请求要获取的响应内容可能会来自于多个业务服务。网关作为业务服务的调用方,可以把多个服务的响应整合起来,再一并返回给用户。
  • 灰度发布open in new window
  • :将请求动态分流到不同的服务版本(最基本的一种灰度发布)。
  • 异常处理 :对于业务服务返回的异常响应,可以在网关层在返回给用户之前做转换处理。这样可以把一些业务侧返回的异常细节隐藏,转换成用户友好的错误提示返回。
  • API 文档: 如果计划将 API 暴露给组织以外的开发人员,那么必须考虑使用 API 文档,例如 Swagger 或 OpenAPI。
  • 协议转换 :通过协议转换整合后台基于 REST、AMQP、Dubbo 等不同风格和实现技术的微服务,面向 Web Mobile、开放平台open in new window
  • 等特定客户端提供统一服务。

下图来源于百亿规模 API 网关服务 Shepherd 的设计与实现 - 美团技术团队 - 2021open in new window这篇文章。

1702454020452
1702454020452

前端的网关,特别是在微前端架构中,扮演着至关重要的角色。微前端网关是一种用于组织和管理微前端架构的核心组件,它具备多种功能以确保前端应用的顺畅运行和高效管理。以下是前端网关(特别是微前端网关)的主要功能:

  1. 路由管理
  • 微前端网关负责处理整个应用的路由,根据请求的URL将流量导向相应的前端模块。这意味着它可以根据不同的路由规则将请求分发给不同的微前端模块,使得每个模块能够专注于自己的功能。
  1. 统一状态管理
  • 网关可以集成状态管理机制,用于处理全局状态和数据共享。这有助于确保微前端模块之间的数据同步和通信,提高应用的整体性能和用户体验。
  1. 资源加载和版本控制
  • 网关可以处理前端模块的资源加载,包括脚本、样式表和其他静态资源。它还可以控制不同模块的版本,以确保使用正确的版本组合来构建前端应用。这有助于避免版本冲突和资源加载错误。
  1. 单点登录和权限控制
  • 微前端网关可以处理单点登录(SSO)和权限控制,以确保用户在访问多个微前端模块时无需重复登录,并且根据用户权限决定能否访问某些功能。这增强了应用的安全性和用户体验。
  1. 容错和监控
  • 网关可以实现容错机制,使得在某个前端模块发生故障时,整个应用仍能继续运行。同时,网关可以监控各个前端模块的运行状态和性能指标,帮助开发团队及时发现和解决问题。
  1. 部署和扩展性
  • 微前端网关应该具备灵活的部署和扩展性,以应对不断增长的需求和流量。这包括支持多种部署方式(如容器化部署、云服务部署等)以及易于扩展的架构设计。
  1. 跨域请求处理
  • 网关可以解决跨域请求问题,使得前端应用能够顺利地从不同源(如不同的服务器或域名)获取数据。这有助于前端应用与后端服务或其他第三方服务进行交互。
  1. 请求聚合和分发
  • 网关可以作为前端应用的请求入口,将来自用户的请求聚合并分发到不同的后端服务或微服务。这有助于简化前端应用的逻辑结构,提高系统的可维护性和可扩展性。
  1. 安全过滤和防护
  • 网关还可以实现安全过滤和防护功能,如防止SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全威胁。这有助于保护前端应用和用户数据的安全。
  1. 负载均衡
  • 在处理高并发请求时,网关可以根据后端服务的负载情况将请求分发到不同的服务实例上,以实现负载均衡。这有助于提高系统的稳定性和响应速度。

需要注意的是,不同的网关实现(如"single-spa"、"qiankun"、"mfg"等)可能具有不同的功能和特性。因此,在选择和使用前端网关时,需要根据具体的应用场景和需求进行综合考虑。

上次编辑于:
贡献者: zddbic