作者回复: 你好,你的问题回答如下:1),是原生zuul的简化定制版,不是spring cloud zuul。2),当企业业务和团队到一定规模,zuul网关是要按场景(h5,无线,第三方开放平台等)分集群的,我之前和现在的公司都是这种管理模式,当然管理成本会大一点,一般需要研发一套统一网关治理系统。如果你业务和团队规模小,则没必要分那么细。3)我们做法是存数据库集中管理,zuul网关节点定期到数据库拉取(zuul节点本地有缓存和比对机制)。4),我们在生产实践中发现,不启用AsyncServerlet,当访问量大时候连接数有限制(拒绝额外请求);启用AsyncServerlet后,可以接受的连接数明显增加,当然这个只是前端异步,后端处理和请求还是由容器线程池同步处理的,总体吞吐量没有增加,只是可接受连接数增加了,所以我说优化了连接数。
作者回复: 你好,看得出你们已经花费很多功夫去禁用某个filter,实际生产中,我们还是需要评估成本和可靠性,首先,生产上禁用某个filter一般不会频繁发生(毕竟我们没有Netflix那么大规模),所以需要评估这个成本是否值得,大部分情况下,能用apollo配置中心动态控制filter启停就足够了(我们之前就是这么干的),没必要完全内存删除;其次,删除filter可能有潜在内存问题,是否会引入不可靠性?所以还是需要评估下是否一定要这样做,anyway,你已经深入研究了这个问题,也完全理解了这种机制的利弊,相信你已经有自己的答案了,也谢谢你提供的方案思路!
作者回复: 对的,netflix原生zuul这块还不完善,主要在filter本地加载那块,笨办法只能先删除本地filter临时目录,再重启zuul。或者需自己修复filter加载逻辑,下线的filter本地和内存都要删除。或者也可以用apollo开关控制filter的启用或禁用。groovy应该不在spring容器管理范围内,估计不能用注入。
作者回复: 总体是基于zuul源码,做了少量简化和调整,主要变化:过滤器管理数据访问层从cassandra改为mysql,增加CAT埋点,增加AsyncServlet支持
作者回复: 源码就是定制版s2g-zuul和lab05中的项目
https://github.com/spring2go/s2g-zuul
作者回复: 理论上讲,Zuul能做的, Nginx都能做到,相反,Nginx能做的,Zuul也能做到(可以扩展)。实际上,Nginx是一种通用高性能的反向代理,常常作为网站的前置反向代理和负载均衡器用;而zuul则一般用在API网关场景。很多公司同时用Nginx + Zuul。
作者回复: 同一逻辑盘的意思,只要data和s2g-zuul在同一个盘下,例如都在c盘或者d盘,不要分开在不同盘下就可以了,不需要把s2g-zuul放在data里面。
你启动了cat服务器吗?
从错误看,好像确实没找到client.xml,而且日志文件也找不到,你尝试下调整s2g-zuul到data目录之外。
作者回复: 你好,我提供的s2g-zuul,启用AsyncServlet是默认在web.xml中配置的,可以打成war包部署到tomcat,一般较新的tomcat(7以上)都支持async servlet。