概念
在微服务系统中经常是用网关将分布式系统的api发布出去,API服务网关再将服务请求路由到合适的微服务,以提供具体的服务处理。所以,API服务网关经常会通过编排多个微服务来处理一个服务请求。
在软件工程的实践中,我们经常会有一个要解决的问题:去冗余。在一个分布式系统中向权限认证等的逻辑处理就是一个很好的例子。
那么我们可以想象一下怎么解决这个问题?
让所有的服务都去实现一遍显然不可能,重复代码太多,不利于维护。那么,提供一个二方包,来集中维护呢?依然无法解决外部依赖的问题,一旦有更新,所有的pom文件都要更新重新发布。
二方包的方式不太好用,微服务的方式,访问一个服务,又不用关系版本的问题,这个公共服务相对于其他服务来说是个黑盒。那么就回到了旧问题,样板代码有没有必要入侵开发系统。
那么由此,我们设置一个网关层,外部的请求过来访问微服务接口前做一层过滤,鉴权,验证,协议转换等都交由网关层处理。而在微服务集群内部认为是授信访问,不再进行校验,来提高吞吐量。
api网关的作用:
- 提供了一个统一入口,调用者不用关系服务架构细节。
- 借助网关做切面开发,屏蔽细节
- 整合异构系统,第三方系统
在生产实践中,常常是认为微服务系统内(或者说是paas系统内)是授信系统。
关注点
接口转发
过滤(鉴权,限流,资源保护)
设计思路
以springcloud生态的gateway为例,服务网关到底干了些什么。
正如文档中所说,gateway使用了spring工程的顶级生态:Spring 5, Spring Boot 2 , Project Reactor。由于异步响应的webflux是基于netty的,是不同与servlet的web容器系统。那么基于servlet的组件不见得能起作用。
核心在于通过一系列的api达到转发过滤的功能
产品
zuul
nginx
springcloud-gateway