zuul和gateway,gataway

【zuul和gateway,gataway】spring cloud中gateway存在的意义是什么?

zuul和gateway,gataway


先让我们看这样一个场景吧,一个电商网站做了服务化,后端服务分别拆成了用户服务、商品服务、支付服务、物流服务(为了举例,做了简化,实际场景会远比这个复杂);前端有网页版和 APP,前端的所有操作都需要调用后端的各个服务 。在这个过程中,可能会有这样的问题:问题1. 前端应用需要知道后端每个服务的地址,或者必须接入服务中心;但是服务的地址和端口可能会动态变化 。
问题2. 每个服务的技术栈必须相同,遵守相同的接口规范,接口协议必须相同,否则对于前度极度不友好 。问题3网页版和 APP 展示相同的内容时,可能粒度不同,要么服务端提供粗粒度和细粒度两种 API,要么只提供一组最细粒度的 API,前者增加了后端的开发量,后者可能会导致一次前端需要多次调用细粒度的 API,才能得到想要的数据 。
问题4不同的客户端设备展示的数据不同,比如网页版能展示的数据更详细一些,APP 展示的数据少,那么也会有“提供一个大而全的接口”还是“为不同的调用方提供不同接口”的问题 。问题5日志、认证和鉴权、计费、监控等等功能,需要各个后端来完善,或者接入到对应的公共组件中(接入也是需要开发的),这就多多少少增加了后端服务的工作 。
API Gateway 就是为了解决以上种种问题的;API Gateway 是系统的唯一入口,它屏蔽掉了系统的内部架构,为调用方定制了统一的 API 。单节点网关多网关集群我们可以看到 API Gateway 的作用:把后端各个服务的 API 聚合起来,提供统一且唯一规范的入口,这样使得内部的架构对于调用方透明,客户端和服务端的耦合度降低;各个后端服务之间,可以采用不同的实现方案,而 API Gateway 会屏蔽掉这些差异;后端的每个服务也都是在不断迭代和升级的,API Gateway 可以将请求路由到不同的接口版本上,可以实现灰度发布;API Gateway 可以进行服务编排,实现数据聚合,也就是调用方一次请求,API Gateway 调用多个服务拿到数据后返回;API Gateway 知道所有服务实例的地址,可以对不同的服务采用不同的路由策略;日志、认证和鉴权、计费、监控等等功能都可以在 API Gateway 上实现;API Gateway 还可以对流量进行控制,通过熔断、降级、限流等方式,保护后端服务 。

    推荐阅读