API服务网关
zuul是基于servlet架构,采用filter模式,针对对http协议的API请求进行路由,可以认为是一种API-Gateway。通过对filters的实现, 提供动态路由,监控,弹性,安全等边缘服务。
主要特点时可以通过groovy脚本对请求的Pre、Routing、Post和Error四个切面,进行动态热部署加载进行拦截,进而实现灵活的路由机制。
通过与Netflix其它的OSS组件进行集成,很容易就实现微服务开发
集成方式有三种
直接集成Zuul
不依赖Netflix其它组件和Spring Cloud,需要自定义路由规则和丰富网关服务
随Karyon/Ribbon集成
依赖Netflix其它组件,如Eureka,Ribbon和karyon等,但提供了更丰富的网关服务,路由规则还需自定义实现
随Spring Cloud集成
通过注解即可集成,路由规则可配置,同时也可享用Netflix丰富的网关服务
性能测试
- 自吹是胜过nginx
- 动态脚本,性能不可能不受影响: 应该做了一定的优化——实例化后进行缓存
- JVM系语言,拿单点性能与C语言相比,有点难以自信
Filter实时加载原理
开启一个转门的线程(A),每隔一段时间会去扫描指定的目录(pre,post等),只扫描.groovy文件,通过对比缓存的最后修改时间与文件的修改时间,如果有修改则清除缓存的Filter实例,创建一个新的GroovyClassLoader去加载该文件进行编译,然后实例化——由于每次创建都是类加器,这些类加载器的父类都是A所在的类加载器,这些因此每都会重新加载class.