服务发生变化时,需要手动修改upstream列表,相对比较麻烦,因此呢我们需要一种服务注册发现机制,将upstream动态注册到nginx上,从而实现upstream服务自动发现。
常见的分布式服务注册发现系统有consul,zookeeper,etcd,eureka。
特性:
服务注册
服务发现
故障检测
k/v存储
数据一致算法:常见raft,Paxos算法
Consul+Consul-template 每次发现配置更改需要raload nginx,重启Nginx。
Consul+OpenResty 实现无需raload动态负载均衡 (lua语言,配置文件放字典里面,每隔时间读取)
Consul+upsync+Nginx 实现无需raload动态负载均衡 (原理同上)