利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路
目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的
zookeeper是什么?
Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图:
具体思路
看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服务自动注册、故障剔除的原理呢!下面都是基于golang的一些特性去讲解。
1)实现一个golang版本的路由层,然后在nginx=》upstream服务器之间加一层路由服务层,这个路由服务层就是用来维护所有服务的路由表。然后再通过路由层找到相对应服务的IP,最后通过rpc协议去调用某个具体的服务器
2)实现一个golang版本的微服务,每个微服务启动的时候往zookeeper里面去注册自己属于哪个路由的,这里只要实现具体的业务逻辑即可。。
下面是一个整体的架构与微服务之间的表现:
zookeeper的树状结构:
相关推荐
sushuanglei 2020-11-12
地平线 2020-11-02
ptmagic 2020-10-31
richermen 2020-10-15
jaryle 2020-10-13
深圳克林斯曼 2020-10-10
koko0c 2020-09-26
ahaoGG 2020-09-24
互联网架构之路 2020-09-17
阿义 2020-09-11
Cheetahcubs 2020-09-07
互联网架构之路 2020-09-03
憧憬 2020-08-21
zyshappy 2020-08-16
loviezhang 2020-08-08
xayddxjsjxywuhui 2020-07-20
唐亚杰 2020-07-17
ZHANGYONGHAO0 2020-07-05
枫叶上的雨露 2020-07-04