Consul是一款服務(wù)器網(wǎng)絡(luò)問題解決方案,安裝軟件自動化網(wǎng)絡(luò)配置,安全運(yùn)行連接,多個集群合并到一個服務(wù)網(wǎng)格中。支持服務(wù)到服務(wù)的連接授權(quán),并且加密,方便管理!
Consul特點(diǎn)
與Kubernetes集成和擴(kuò)展。
跨越任何運(yùn)行時的服務(wù)網(wǎng)格
動態(tài)負(fù)載均衡
安全的多云服務(wù)網(wǎng)絡(luò)
服務(wù)發(fā)現(xiàn)與健康檢查
提供一個強(qiáng)大的生態(tài)系統(tǒng)
Consul問題說明
consul作為注冊中心和eureka的機(jī)制不同。
當(dāng)微服務(wù)啟動后首先向注冊中心發(fā)注冊請求,這點(diǎn)兩者一致。之后consul在維護(hù)可用服務(wù)列表時,采用的是主動向微服務(wù)發(fā)健康檢查的接口(也可以配置成微服務(wù)主動向consul發(fā)心跳,但是我看完官網(wǎng)和各類文章都沒說清楚具體怎么搞)。如果微服務(wù)正常返回,那么就認(rèn)為服務(wù)正常。eureka是等待微服務(wù)主動向eureka發(fā)心跳,eureka收到心跳后,就給這個服務(wù)續(xù)約,認(rèn)為服務(wù)是正常的。
正是因?yàn)檫@點(diǎn)差異就產(chǎn)生了大問題!
場景一:consul和微服務(wù)間的網(wǎng)絡(luò)不穩(wěn)定,斷開了幾分鐘。
在此情況下,consul向微服務(wù)發(fā)的健康檢查請求發(fā)不通,認(rèn)為微服務(wù)掛了,就從服務(wù)列表里剔除他。
當(dāng)網(wǎng)絡(luò)恢復(fù)后,注意,已經(jīng)剔除的服務(wù),consul是不會主動再發(fā)健康檢查的。那么服務(wù)列表里沒有他,
也就不正常了。網(wǎng)關(guān)的轉(zhuǎn)發(fā)都是需要獲取可用服務(wù)列表,才能做轉(zhuǎn)發(fā)的!
這時候,你想讓微服務(wù)注冊上consul就只能重啟微服務(wù)了。這在生產(chǎn)環(huán)境意味著什么就不用多說了吧。
是不是很坑?
場景二:consul因?yàn)槟撤N情況需要重啟。(可能是consul也需要投產(chǎn),或者其他原因,總之就是需要重啟consul)
這個場景和上面的類似。當(dāng)consul重啟后,之前已經(jīng)注冊上來的,狀態(tài)正常的服務(wù),consul忘記了。
因?yàn)樗貑⒘?,他不記得前世的服?wù)列表。
所以這種情況下,也需要重啟我們的微服務(wù),才能使?fàn)顟B(tài)正常。
綜上,因?yàn)閏onsul的健康檢查機(jī)制是consul主動發(fā),跟eureka不同才導(dǎo)致這種問題。
問題很清楚了,要怎么解決呢?
我查了很多資料,除了consul可以用ttl的方式,讓微服務(wù)主動發(fā)心跳來續(xù)約外,好像沒有想成的方案。
但是這個ttl的方案,官網(wǎng)沒仔細(xì)說,網(wǎng)上的文章也是一大抄,沒人說的明白。
我經(jīng)過研究后,發(fā)現(xiàn)consul提供了好多rest接口??梢酝ㄟ^接口注冊,注銷,查詢等。
那么我們就可以仿照eureka的方式,主動查consul的服務(wù)列表,類似心跳。
如果沒查到,或者發(fā)不通(consul掛了)那么久開始發(fā)注冊的接口,把自己注冊上去。
不停的發(fā),直至成功。
Consul測評
Consul一站式問題解決,輕松小巧的軟件!



































