网关常见问题

      侯门一入深似海,从此萧郎是路人

1、什么是网关

总而言之,网关就是统一入口、鉴权校验、动态路由和过滤封装。

2、为什么需要网关

  • 微服务架构下,单体应用被切割成多个微服务,如果将所有的微服务直接对外暴露,会出现安全方面的各种问题,且内外耦合严重。
  •  Gateway 网关架构可以细到为每一个服务的实例单独配置一个 Gateway,也可以粗到为整个架构配置一个 Gateway。这样,原本复杂的系统架构就会变得更简单可控。

3、网关设计

我认为没有很大的必要去重复造车,现在市面上较为成熟的网关方案还是挺有借鉴价值的,不过我们仍可以了解下网关的设计思路。

不管是何种网关都需要满足以下的功能和特性: 请求路由、服务注册、负载均衡、弹力服务、安全、高性能和高可用

请求路由

当客户端请求过来,调用端无需知道自己实际调用的其它服务地址,统一交给 Gateway 来处理,避免了内部多个微服务直接对外暴露。

服务注册

网关的服务注册功能,就是为后端的服务实例提供服务的地址注册、取消注册,也就是注册一些 API 接口。这样 Gateway 就可以根据接收到的请求中的信息来决定路由到正确的后端服务上。

负载均衡

一个网关用于接收多个服务实例,所以网关还需要在各个对等的服务实例上做负载均衡策略。常见的策略就是 Round-Robin 轮询、权重和最少使用。

弹力服务

网关应该让应用服务只关心自己的业务逻辑,要引入异步、重试、幂等、流控、熔断和监视等弹力服务手段。

安全

外界访问的第一步就是网关,其安全要求毋庸置疑。打头阵的网关作为全系统第一道防线对后端的服务进行保护,基本要满足SSL 加密及证书管理、Session 验证、授权、数据校验,以及对请求源进行恶意攻击的防范。

4、网关落地

了解了大概的网关设计思路,可以根据公司项目业务需求进行技术选型,现主要分为流量网关业务网关两大类。

流量网关

流量网关,大致就是控制流量进入集群的一类网关,比如一个服务集群有很多非法或无效的请求,需要将请求拒之门外,降低集群的流量压力。

业务网关

业务网关更注重与服务器应用层交互,如各个微服务的权限控制、日志输出、数据加密和熔断限流等。

5、常见的开源网关

OpenResty

  • OpenResty是一个流量网关。
  • OpenResty是基于 Nginx Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的Web 服务和动态网关。

Kong

  • Kong 是基于OpenResty开发的一个流量层网关,是一个云原生、快速、可扩展、分布式的Api 网关
  • Kong继承了OpenResty的高性能、易扩展性等特点,且支持通过简单的增加机器节点,可以很容易的水平扩展。
  • Kong优化了网关的访问限制、安全、流量控制、分析监控、日志、请求转发和合成功能相关功能。
  • Kong更加专注于全局的Api管理策略,如全局流量监控、日志记录、全局限流、黑白名单控制、接入请求到业务系统的负载均衡等。

Zuul1.0

  • ZuulNetflix开发的一套通用API网关,Zuul1.0采用同步阻塞架构,优化后的Zuul2,用Netty Server代替Servlet,升级为异步非阻塞架构。
  • Zuul使用了一系列不同类型的过滤器,够快速灵活地将动态路由、监视、弹性和安全性等功能应用到服务中。
  • Zuul提供了一个动态读取、编译和运行这些过滤器的框架。过滤器之间不直接通信,而是通过每个请求特有的RequestContext共享状态。

Spring Cloud Gateway

  • SpringCloud Gateway Spring Cloud 生态系统中的网关,底层使用了高性能的通信框架Netty,其目的就是为微服务架构提供一种简单有效的统一的 API 路由管理方式,替代 Zuul 实现微服务全家桶技术栈。
  • Spring Cloud Gateway 不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/指标、集成熔断和限流。
侯门一入深似海
从此萧郎是路人
01-05 17:48