乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【Java高階必備】如何優(yōu)化Spring Cloud微服務(wù)注冊中心架構(gòu)?

       airen89 2019-02-28

       周一至周五早8點半!精品技術(shù)文章準(zhǔn)時送上!

      目錄

      1、再回顧:什么是服務(wù)注冊中心?

      2、Consul服務(wù)注冊中心的整體架構(gòu)

      3、Consul如何通過Raft協(xié)議實現(xiàn)強一致性?

      4、Consul如何通過Agent實現(xiàn)分布式健康檢查?

      上一篇文章:尷尬了!Spring Cloud服務(wù)注冊中心Eureka 2.x停止維護了咋辦?,我們給大家說了一下Spring Cloud服務(wù)注冊中心的一些問題。

      如果用Eureka作為其注冊中心的話,很多同學(xué)都覺得心里沒底,所以現(xiàn)在很多公司都開始使用Consul作為其注冊中心。

      那么這篇文章我們就來給大家說說:Consul這種服務(wù)注冊中心的架構(gòu)是如何設(shè)計的?

      1、再回顧:什么是服務(wù)注冊中心?

      先回顧一下什么叫做服務(wù)注冊中心?

      顧名思義,假設(shè)你有一個分布式系統(tǒng),里面包含了多個服務(wù),部署在不同的機器上,然后這些不同機器上的服務(wù)之間要互相調(diào)用。

      舉個現(xiàn)實點的例子吧,比如電商系統(tǒng)里的訂單服務(wù)需要調(diào)用庫存服務(wù),如下圖所示。

      現(xiàn)在的問題在于,訂單服務(wù)在192.168.31.154這臺機器上,庫存服務(wù)在192.137.1.33這臺機器上。

      現(xiàn)在訂單服務(wù)是想要調(diào)用庫存服務(wù),但是他并不知道庫存服務(wù)在哪臺機器上??!畢竟人家都是在不同機器上的。

      所以這個時候就需要服務(wù)注冊中心出場了,這個時候你的系統(tǒng)架構(gòu)中需要引入獨立部署在一臺機器上的服務(wù)注冊中心,如下圖所示。

      然后訂單服務(wù)、庫存服務(wù)之類的兄弟,都需要配置上服務(wù)注冊中心部署在哪臺機器上,比如192.168.31.45這臺機器。

      接著訂單服務(wù)、庫存服務(wù)他們自己啟動的時候,就得發(fā)送請求到到服務(wù)注冊中心上去進行服務(wù)注冊。

      也就是說,得告訴服務(wù)注冊中心,自己是哪個服務(wù),然后自己部署在哪臺機器上。

      然后服務(wù)注冊中心會把大家注冊上來的信息放在注冊表里,如下圖。

      接著訂單服務(wù)假如想要調(diào)用庫存服務(wù),那么就找服務(wù)注冊中心問問:能不能告訴我?guī)齑娣?wù)部署在哪臺機器上?

      服務(wù)注冊中心是知道這個信息的,所以就會告訴訂單服務(wù):庫存服務(wù)部署在192.1371.133這臺機器上,你就給這臺機器發(fā)送請求吧。

      然后,訂單服務(wù)就可以往庫存服務(wù)的那臺機器發(fā)送請求了,完成了服務(wù)間的調(diào)用。

      整個過程,如下圖所示:

      上述就是服務(wù)注冊中心的作用、地位以及意義,現(xiàn)在大家應(yīng)該知道服務(wù)注冊中心的作用了吧。

      好!接著我們就來看看Consul作為服務(wù)注冊中心,他的架構(gòu)設(shè)計原理是什么?

      2、Consul服務(wù)注冊中心的整體架構(gòu)

      如果要基于Consul作為服務(wù)注冊中心,那么首先必須在每個服務(wù)所在的機器上部署一個Consul Agent,作為一個服務(wù)所在機器的代理。

      然后還得在多臺機器上部署Consul Server,這就是核心的服務(wù)注冊中心。

      這個Consul Agent可以用來收集你的服務(wù)信息然后發(fā)送給Consul Server,還會對你的服務(wù)不停的發(fā)送請求檢查他是否健康。

      然后你要發(fā)現(xiàn)別的服務(wù)的時候,Consul Agent也會幫你轉(zhuǎn)發(fā)請求給Consul Server,查詢其他服務(wù)所在機器。

      Consul Server一般要求部署3~5臺機器,以保證高可用以及數(shù)據(jù)一致性。

      他們之間會自動實現(xiàn)數(shù)據(jù)同步,而且Consul Server集群會自動選舉出一臺機器作為leader,其他的Consul Server就是follower。

      咱們看下面的圖,先感受一下這個Consul他整體的架構(gòu)。

      3、Consul如何通過Raft協(xié)議實現(xiàn)強一致性?

      首先上篇文章:尷尬了!Spring Cloud微服務(wù)注冊中心Eureka 2.x停止維護了咋辦?已經(jīng)說了,Eureka服務(wù)注冊中心是不保證數(shù)據(jù)一致性的。

      這樣的話,很可能你注冊的服務(wù),其他人是發(fā)現(xiàn)不了的,或者很遲才能發(fā)現(xiàn)。

      OK,那么這里就來討論一下Consul是如何實現(xiàn)數(shù)據(jù)一致性的。

      首先,大家知道Consul Server是部署集群的,而且他會選舉出來一臺Server作為Leader。

      接下來各個服務(wù)發(fā)送的注冊請求都會落地給Leader,由Leader同步給其他Follower。

      所以首先第一點,Leader Server是絕對有最新的服務(wù)注冊信息的,是不是?

      比如庫存服務(wù)發(fā)起注冊了,那么Leader Server上一定有庫存服務(wù)的注冊信息。

      接著如果比如訂單服務(wù)要發(fā)現(xiàn)庫存服務(wù)的話,這個查詢請求會發(fā)送給Leader Server。

      這樣服務(wù)注冊和發(fā)現(xiàn),都是通過一臺Leader Server來進行的,就可以保證服務(wù)注冊數(shù)據(jù)的強一致性了,大家看下圖。

      接著大家想,假如說庫存服務(wù)在注冊的時候數(shù)據(jù)剛寫到Leader Server,結(jié)果Leader Server就宕機了,這時候怎么辦?

      那么此時這條注冊數(shù)據(jù)就丟失了,訂單服務(wù)就沒法發(fā)現(xiàn)那個庫存服務(wù)了。沒關(guān)系,這里Consul會基于Raft協(xié)議來解決這個問題

      首先,庫存服務(wù)注冊到Leader Server的時候,會采取Raft協(xié)議,要求必須讓Leader Server把這條注冊數(shù)據(jù)復(fù)制給大部分的Follower Server才算成功。

      這就保證了,如果你認為自己注冊成功了,那么必然是多臺Consul Server都有這條注冊數(shù)據(jù)了。

      如果你剛發(fā)送給Leader Server他自己就宕機了,那么這次注冊會認為失敗。

      此時,Consul Server集群會重新選舉一個Leader Server出來,你需要再次重新注冊。

      這樣就可以保證你注冊成功的數(shù)據(jù)絕對不會丟,然后別人發(fā)現(xiàn)服務(wù)的時候一定可以從Leader Server上獲取到最新的強一致的注冊數(shù)據(jù)。

      整個過程,如下圖所示:

      上面的圖就可以看到,只要你注冊的時候基于Raft協(xié)議強制同步到大多數(shù)Server,哪怕是Leader掛了,也會選舉新的Leader。

      這樣就可以讓別人從新的Leader Server來發(fā)現(xiàn)你這個服務(wù),所以數(shù)據(jù)是絕對強一致的。

      4、Consul如何通過Agent實現(xiàn)分布式健康檢查?

      最后說說Consul是如何通過各個服務(wù)機器上部署Agent來實現(xiàn)分布式健康檢查的。

      集中式的心跳機制,比如傳統(tǒng)的Eureka,是讓各個服務(wù)都必須每隔一定時間發(fā)送心跳到Eureka Server。

      如果一段時間沒收到心跳,那么就認為這個服務(wù)宕機了。

      但是這種集中式的心跳機制會對Eureka Server造成較大的心跳請求壓力,實際上平時Eureka Server接收最多的請求之一就是成千上萬服務(wù)發(fā)送過來的心跳請求。

      所以Consul在這塊進行了架構(gòu)優(yōu)化,引入了Agent概念。

      每個機器上的Consul Agent會不斷的發(fā)送請求檢查服務(wù)是否健康,是否宕機。如果服務(wù)宕機了,那么就會通知Consul Server。

      怎么樣?是不是發(fā)現(xiàn)各個服務(wù)自己不用再發(fā)送心跳請求去Server了?減小了Server這部分的壓力吧?

      沒錯,這就是Consul基于Agent實現(xiàn)的分布式健康檢查機制,可以大幅度的減小Server端的壓力。

      這樣一來,哪怕你就部署個三五臺機器,可以輕松支持成千上萬個服務(wù)。

      咱們再來一張圖,一起來看看:

      End

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多