1 为什么需要API网关
API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:
- 客户端会多次请求不同的微服务,增加了客户端的复杂性。
- 存在跨域请求,在一定场景下处理相对复杂。
- 认证复杂,每个服务都需要独立认证。
- 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
- 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。
使用 API 网关后的优点如下:
- 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
- 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
- 减少了客户端与各个微服务之间的交互次数。
计算机的世界,所有的问题都可以通过两个思路解决:
1. 增加中间层 比如持久层,数据库中间件等
2.分而治之的思想 。比如hash分解大文件
微服务中,大量微服务存在共同的逻辑处理内容,比如鉴权,限流,日志等内容。
2 Zuul架构
* Pre filter
请求到达servcie之前进行。比如身份验证,log记录
*Routing
转发请求给目标服务
*Post
从origin server返回后执行
*Error
发生错误时执行