上QQ阅读APP看书,第一时间看更新
. 简介
网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:
• 客户端会多次请求不同的微服务,增加了客户端的复杂性。
• 存在跨域请求,在一定场景下处理相对复杂。
• 认证复杂,每个服务都需要独立认证。
• 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
• 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。
以上这些问题可以借助
网关解决。 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 网关这一层。使用
网关后的优点如下:• 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
• 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
• 减少了客户端与各个微服务之间的交互次数。
是 官方基于 . , . 和 等技术开发的网关。 旨在为微服务架构提供一种简单有效而统一的 路由管理方式。
作为 生态系中的网关,目标是替代 ,其不仅提供统一的路由方式,并且基于 链的方式提供了网关各类功能,例如:安全,监控/埋点,和限流等。
架构
如图所示,
的架构如上,看起来很简单。它内部包含了一个高性能的 ,用来接收各类网络请求。请求进来之后,会根据配置的各个路由进行匹配并处理请求。每个路由都可以定义多个断言( ),用于路由匹配。默认提供了 多个内建的断言,可以基于请求的各个方面(请求头,路径,路径,时间, , 方法等)进行路由匹配。如果还不够,用户还可以自已扩展。
请求匹配到了合适的路由之后,就会按照路由中配置的各过滤器(
),按顺序对请求进行处理。 也基本上可以对请求的所有属性做处理,修改,添加或者除请求头,修改请求数据,修改返回的数据等,几乎无所不能。当然,修改请求也只是一方面的用途,认证,鉴权,记录日志等也都可以在网关中统一来做。所有
形成处理链,直到所有的 处理完,才会交给最后面的 ,由它将处理过的请求发送至对应的微服务。在请求发送至微服务之前,还可以定义它的负载均衡策略(
),以决定请求至底发往微服务的哪个实例。与 都支持自行扩展。