Martian-cloud傳染機(jī)制的原理是什么

Martian-cloud傳染機(jī)制的原理是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來(lái),先為鎮(zhèn)安等服務(wù)建站,鎮(zhèn)安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鎮(zhèn)安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

先解釋下什么是傳染機(jī)制

  • 常規(guī)的分布式采用的是【生產(chǎn)者->注冊(cè)中心->消費(fèi)者】模型,生產(chǎn)者將接口給注冊(cè)中心,消費(fèi)者從注冊(cè)中心發(fā)現(xiàn)其他的服務(wù),實(shí)現(xiàn)調(diào)用

  • 傳染機(jī)制就是丟棄注冊(cè)中心,可以把接口看做病毒,服務(wù)看做是人,服務(wù)之間只要有直接或者間接的聯(lián)系,最終都會(huì)被染上病毒(接口)

如何實(shí)現(xiàn)的

假如現(xiàn)在有三個(gè)服務(wù)

Martian-cloud傳染機(jī)制的原理是什么

此時(shí),需要發(fā)布這三個(gè)服務(wù),那我們可以先規(guī)劃下,將他們連在一起,連在一起的意思是在配置里寫(xiě)好誰(shuí)連誰(shuí)。

連接方式可以是這樣【圖1】

Martian-cloud傳染機(jī)制的原理是什么

也可以是這樣【圖2】

Martian-cloud傳染機(jī)制的原理是什么

也可以是這樣【圖3】

Martian-cloud傳染機(jī)制的原理是什么

總之,只要?jiǎng)e讓任何服務(wù)落單就行,隨便怎么連,你甚至可以來(lái)一個(gè)五花大綁(不過(guò)不建議)

-----------------------------------------------------------------

連接以后就到發(fā)布階段了,那么發(fā)布的時(shí)候,這些服務(wù)之間會(huì)發(fā)生什么呢?

發(fā)布時(shí)會(huì)發(fā)生什么

我們拿【圖1】來(lái)舉例

1. 首先我們啟動(dòng)A服務(wù),啟動(dòng)后由于其他服務(wù)還未啟動(dòng),所以A連接不到B,所以此時(shí)A的本地接口緩存表是空的,如下圖

Martian-cloud傳染機(jī)制的原理是什么

2. 為了避免大家覺(jué)得過(guò)程過(guò)于理想,所以接下來(lái)我啟動(dòng)C,而不是啟動(dòng)B

C啟動(dòng)后,由于B還沒(méi)啟動(dòng),所以他無(wú)法被發(fā)現(xiàn),此時(shí)他是孤立的,所以本地緩存的接口依然如下:

Martian-cloud傳染機(jī)制的原理是什么

3. 接下來(lái)就是啟動(dòng)B了,當(dāng)B啟動(dòng)后,會(huì)立刻被A發(fā)現(xiàn),所以A會(huì)從B獲取一次接口,此時(shí)本地緩存如下:

Martian-cloud傳染機(jī)制的原理是什么

A獲取到接口以后還會(huì)再做一件事,那就是發(fā)廣播,流程如下:

  1. 由于本地緩存的是接口,而很多接口都來(lái)自同一個(gè)服務(wù),所以需要從本地緩存中先提取出這些服務(wù)的ip和端口號(hào)

  2. 經(jīng)過(guò)了第1步以后,會(huì)得到一批ip和端口號(hào)(按照本示例來(lái)說(shuō),提取出來(lái)的就是B的ip和端口) A會(huì)將自己的所有接口(是自己的所有接口,不是本地緩存的接口)廣播給這批IP和端口號(hào),(按照本示例來(lái)說(shuō),A會(huì)把自己的接口廣播給B)

經(jīng)過(guò)廣播以后,此時(shí)本地接口緩存變成了下面這樣:

Martian-cloud傳染機(jī)制的原理是什么

上面是A發(fā)現(xiàn)B的過(guò)程,那么C的接口如何傳染給別人呢?

我們剛才都是用【圖1】在舉例,所以在【圖1】我們可以看出B連接的是C,所以當(dāng)B啟動(dòng)時(shí),除了被A發(fā)現(xiàn)完成上面講述的一系列流程,他還會(huì)去發(fā)現(xiàn)C,發(fā)現(xiàn)C以后,他會(huì)從C獲取一次接口,所以本地緩存如下:

Martian-cloud傳染機(jī)制的原理是什么

B拿到接口后,依然會(huì)像A一樣發(fā)起一次廣播,廣播以后本地緩存就變成了這樣:

Martian-cloud傳染機(jī)制的原理是什么

接下來(lái)就有意思了,A和C是如何傳染的?

很簡(jiǎn)單,我們先來(lái)回顧一下 服務(wù)啟動(dòng)時(shí)的過(guò)程:

  1. 從連接的服務(wù)上獲取接口【如果服務(wù)已經(jīng)啟動(dòng)了,那就是隨機(jī)從本地緩存的接口中提取一個(gè)服務(wù),去獲取那個(gè)服務(wù)上緩存的接口】

  2. 給這些服務(wù)發(fā)起廣播【已經(jīng)被廣播過(guò)的服務(wù)直接忽略】

其實(shí),這個(gè)流程是輪詢的,并不是一次性的, 所以接下來(lái)就輪到A再次執(zhí)行這個(gè)過(guò)程了,當(dāng)他再次執(zhí)行這個(gè)過(guò)程的時(shí)候,他會(huì)從B獲取到C的接口,然后將自己的接口廣播給C,所以此刻變成了這樣:

Martian-cloud傳染機(jī)制的原理是什么

這樣一來(lái),所有的服務(wù)都被對(duì)方發(fā)現(xiàn)了。

服務(wù)宕機(jī)怎么辦

1. 首先是自私機(jī)制

所謂的自私機(jī)制,就是每個(gè)服務(wù)只顧自己,不管別人,每個(gè)服務(wù)如果發(fā)現(xiàn)自己本地緩存的接口連接不上,那就會(huì)從本地把他下掉,至于別人,他是不管的。

2. 投票機(jī)制

這是每個(gè)服務(wù)的內(nèi)部投票,跟外面無(wú)關(guān),如果一個(gè)服務(wù)發(fā)現(xiàn)他本地緩存的某個(gè)接口連接不上,那么他就會(huì)給這個(gè)接口指向的服務(wù)投一票,讓它從本機(jī)下線,當(dāng)調(diào)通后會(huì)把票數(shù)清0,當(dāng)票數(shù)積累到一定程度時(shí),這個(gè)服務(wù)的所有接口都會(huì)被從當(dāng)前服務(wù)上清理掉?!久總€(gè)服務(wù)都有一套這樣的機(jī)制,來(lái)維護(hù)自己的本地接口緩存】

3. 如果(下線某個(gè)服務(wù)的決定)是誤判怎么辦

有一個(gè)補(bǔ)償機(jī)制,就是每個(gè)服務(wù)在下掉別的服務(wù)的時(shí)候,都會(huì)給被下掉的那個(gè)服務(wù)發(fā)一個(gè)通知,讓他把自己從已廣播列表中移除(比如A服務(wù)調(diào)不通B服務(wù)的接口,當(dāng)票數(shù)累積到一定程度后,A會(huì)把B的接口全部清理掉,清理后A會(huì)給B發(fā)一個(gè)通知,讓B把A從已廣播列表移除,這樣如果B服務(wù)沒(méi)掛,那么B在下一次輪詢時(shí) 會(huì)把接口重新廣播給A

如果B服務(wù)明明沒(méi)掛,但是A服務(wù)連續(xù)調(diào)不通,而且連下線通知都無(wú)法通知到B服務(wù),那我只能說(shuō)B服務(wù)活該了,即使是誤判也比留著報(bào)錯(cuò)影響性能好吧。

4. 調(diào)不通的情況有很多,不一定是服務(wù)掛了,那么什么樣的情況會(huì)給服務(wù)投下線票

很簡(jiǎn)單,當(dāng)調(diào)用接口時(shí),出現(xiàn)了以下三種異常,就會(huì)投票

  • ConnectException ,連接不上,這不是404之類的,而是根本連不上這個(gè)ip:port

  • UnknownHostException,無(wú)法解析地址,提供的 ip:port 無(wú)法被解析識(shí)別

  • SocketTimeoutException,連接超時(shí),不是read time out,而是 connect time out

5. 然后是垃圾回收機(jī)制

垃圾回收很簡(jiǎn)單,就是定時(shí)去本地緩存中掃描出被下線的服務(wù)的接口,然后刪除掉。

上面這這一套機(jī)制,可以保證當(dāng)服務(wù)宕機(jī)以后,接口會(huì)自動(dòng)從其他的服上下線

被鏈接的那個(gè)服務(wù)宕機(jī)了 如何實(shí)現(xiàn)傳染

假如B掛了,這個(gè)鏈條就斷了,傳染是否會(huì)受影響呢?

其實(shí)不會(huì),因?yàn)檫@個(gè)鏈條 只是啟動(dòng)時(shí)有用,啟動(dòng)后就作廢了,拿A來(lái)說(shuō),A只有啟動(dòng)時(shí)會(huì)去B獲取接口,下次輪詢的時(shí)候,是從本地緩存的接口中隨機(jī)挑選一個(gè)服務(wù) 去獲取,所以鏈條不會(huì)斷。

至于廣播,也是廣播給本地緩存的服務(wù),并不是配置的這個(gè)服務(wù)。

所以宕機(jī)是不會(huì)影響接口傳染的

要新添一個(gè)服務(wù)咋辦

很簡(jiǎn)單,只需要將他連接到正在運(yùn)行的 任意一個(gè)服務(wù)上即可,很快它就會(huì)渾身染滿病毒(接口)

關(guān)于Martian-cloud傳染機(jī)制的原理是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

本文標(biāo)題:Martian-cloud傳染機(jī)制的原理是什么
網(wǎng)站路徑:http://bm7419.com/article16/igesdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、App設(shè)計(jì)網(wǎng)站內(nèi)鏈、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)