利用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

相關文章
相關標籤/搜索