利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

目前常见的web常规的负载均衡大多数是经过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的状况,可是这里每每出现的一个问题是,nginx上配置服务器的ip是固定的,若是某台机器出现了服务故障,那么流量有几率会打到这台机器致使出现服务不可访问的故障,这时候每每须要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?能够利用zookeeper的特性来干这个事情的nginx

zookeeper是什么?golang

Zookeeper 会维护一个具备层次关系的数据结构,它很是相似于一个标准的文件系统,目前是基于这个思路去考虑的。大致的结构图:

clipboard.png

具体思路web

看到上面的树状结构你们应该想到了点上面东西了吧!那么服务自动发现具体能够这么作呢,这么利用zookeeper的这个特性去实现服务自动注册、故障剔除的原理呢!下面都是基于golang的一些特性去讲解。

1)实现一个golang版本的路由层,而后在nginx=》upstream服务器之间加一层路由服务层,这个路由服务层就是用来维护全部服务的路由表。而后再经过路由层找到相对应服务的IP,最后经过rpc协议去调用某个具体的服务器服务器

2)实现一个golang版本的微服务,每一个微服务启动的时候往zookeeper里面去注册本身属于哪一个路由的,这里只要实现具体的业务逻辑便可。。

下面是一个总体的架构与微服务之间的表现:数据结构

clipboard.png

zookeeper的树状结构:

clipboard.png

相关文章
相关标签/搜索