下面是架构师杨波在多年生产环境的Zuul实践经验。
<servlet>
<servlet-name>AsyncZuulServlet</servlet-name>
<servlet-class>io.spring2go.zuul.servlet.AsyncZuulServlet</servlet-class>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>AsyncZuulServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
集中修改,并且动态调整。
如果后端服务比较慢,可以使用Hystrix进行熔断。防止线程一直pending。
Hystrix有两种隔离原理,一个是线程隔离的方式,还有一种是信号量。
推荐使用信号量。线程隔离的话比较耗资源。
对每个服务的调用,配置连接的数量。 平均每个服务设置20个链接,也可以根据实际情况动态调整。
如果不设置的话,可能会因为一个服务处理请求比较慢,导致占用的大量的Http链接资源,从而影响其他服务,甚至整个服务。
如何配置连接数,可以参考 ExecuteRoute.groovy
Hystrix可以实时展示服务的流量。
Cat可以监控JVM等性能指标
groovy脚本上传成功,它依赖的jar,网关上必须要有,否则无法上传成功。
如果网关上没有依赖的jar,网关添加 ,必须要重启。
groovy脚本编写是可以直接开发java版本的,测试完成之后,在上线之前直接把文件后缀.java改成.groovy就可以,两者是兼容的。
网关尽量不要包含比较重的业务逻辑。
尽量不要解析body做一些处理,这样会占用CPU和内存资源。