Zuul 动态路由
前言
Zuul 是 Netflix 提供的一个开源组件, 致力于在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。也有很多公司使用它来作为网关的重要组成部分,碰巧今年公司的架构组决定自研一个网关产品,集动态路由,动态权限,限流配额等功能为一体,为其他部门的项目提供统一的外网调用管理,最终形成产品 (这方面阿里其实已经有成熟的网关产品了,但是不太适用于个性化的配置,也没有集成权限和限流降级)。
不过这里并不想介绍整个网关的架构,而是想着重于讨论其中的一个关键点,并且也是经常在交流群中听人说起的:动态路由怎么做?
再阐释什么是动态路由之前,需要介绍一下架构的设计。
传统互联网架构图
上图是没有网关参与的一个最典型的互联网架构 (本文中统一使用 book 代表应用实例,即真正提供服务的一个业务系统)
加入 eureka 的架构图
book 注册到 eureka 注册中心中,zuul 本身也连接着同一个 eureka,可以拉取 book 众多实例的列表。服务中心的注册发现一直是值得推崇的一种方式,但是不适用与网关产品。因为我们的网关是面向众多的 ** 其他部门 ** 的 ** 已有 ** 或是 ** 异构架构 ** 的系统,不应该强求其他系统都使用 eureka,这样是有侵入性的设计。
最终架构图
要强调的一点是,gateway 最终也会部署多个实例,达到分布式的效果,在架构图中没有画出,请大家自行脑补。
本博客的示例使用最后一章架构图为例,带来动态路由的实现方式,会有具体的代码。