作者回复: zuul前置有nginx反向代理集群,域名指向nginx集群,nginx上可以配置域名到后台zuul集群ip地址列表的映射关系。
网关如果挂了,nginx有自动健康检查和摘除功能。
作者回复: filter存储没有特别的要求,Netflix Zuul原生支持的Cassandra这种K/V存储,实际用Mysql之类数据库也可以。Zuul可以对接Eureka,做服务发现和LB,可以直接看Spring Cloud的文档,Zuul通过Ribbon对接Eureka。
作者回复: 你好,consul + nginx + consul template可以实现nginx动态负载均衡,因为nginx是基于配置文件的,配置文件变更可以出发reload。zuul原生是不支持配置文件(除非定制),但是zuul + ribbon + consul应该也可以实现动态负载均衡,这个是基于内存方式的,具体参考spring cloud的官方文档:https://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html。
作者回复: 你好,我们之前的生产实践,zuul集群实例是运维在nginx上静态配置的(也有集中可视化配置界面),因为zuul集群扩容并不频繁,所以这种静态配置ok。如果你要做成动态,需要对nginx做扩展,比如点评开源的camel,可以提供API操作nginx,或者你可以考虑kong,也提供可编程API,然后你可以将zuul和eureka集成动态发现,eureka再对接camel/kong这种方式(中间需要开发一个协调器),可以做到动态配置zuul集群。
作者回复: 这个要看企业的具体微服务架构是怎么做的,有些企是用eureka做服务注册发现的,这时服务提供方起动时需要注册到eureka,服务消费方(包括网关)从eureka发现服务并发起调用。有些企业没有用eureka做服务发现,而是用传统DNS+nginx,这时服务地址就不是自动注册的,而是一般由运维静态配置,这种方案也可以工作,也是微服务的一种架构方式,当然自动化程度和灵活性要比前一种差一点。
作者回复: zuul本身无状态,以集群部署保证HA,前面一般需负载均衡器LB,如硬件F5或软件lvs/nginx等。如果没有LB一层,客户端直连zuul,zuul只布一台就会成单点瓶颈。
作者回复: 恩赞👍,配置中心和CAT相对比较容易落地,能对系统稳定性和灵活性带来立竿见影效果