1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        小學(xué)生也能看懂的微服務(wù)節(jié)點(diǎn)判活難題

        共 2333字,需瀏覽 5分鐘

         ·

        2021-05-07 21:41


          點(diǎn)擊上方“JavaEdge”,關(guān)注公眾號(hào)

        設(shè)為“星標(biāo)”,好文章不錯(cuò)過(guò)!


        那你首先,了解注冊(cè)中心摘除機(jī)制嗎?

        【服務(wù)Consumer】以【注冊(cè)中心】的數(shù)據(jù)為準(zhǔn),當(dāng)服務(wù)端的節(jié)點(diǎn)有變更時(shí),【注冊(cè)中心】會(huì)將變更通知給【Consumer】,【Consumer】就調(diào)用【注冊(cè)中心】拉取最新節(jié)點(diǎn)信息。

        這種機(jī)制一般也夠用了,但當(dāng)網(wǎng)絡(luò)頻繁抖動(dòng)時(shí),【服務(wù)Provider】向【注冊(cè)中心】匯報(bào)心跳信息可能失敗。若在規(guī)定時(shí)間內(nèi),【注冊(cè)中心】都未收到【Provider】的心跳信息,就會(huì)把該節(jié)點(diǎn)從可用節(jié)點(diǎn)列表中移除。

        更糟的是,在服務(wù)池?fù)碛猩习賯€(gè)節(jié)點(diǎn)時(shí),每個(gè)節(jié)點(diǎn)都可能會(huì)被移除,導(dǎo)致【注冊(cè)中心】可用節(jié)點(diǎn)的狀態(tài)一直在變化,這該如何解決?

        可考慮心跳開(kāi)關(guān)保護(hù)機(jī)制

        在網(wǎng)絡(luò)頻繁抖動(dòng)時(shí),【注冊(cè)中心】的可用節(jié)點(diǎn)不斷變化,【Consumer】會(huì)頻繁收到【Provider】節(jié)點(diǎn)變更信息,于是不斷請(qǐng)求【注冊(cè)中心】。
        當(dāng)很多【Consumer】同時(shí)請(qǐng)求【注冊(cè)中心】,很容易把【注冊(cè)中心】帶寬打滿。

        所以需要措施保證,即使網(wǎng)絡(luò)頻繁抖動(dòng),【Consumer】也不至于 同時(shí) 請(qǐng)求【注冊(cè)中心】。

        就是給【注冊(cè)中心】設(shè)置一個(gè)開(kāi)關(guān)。
        開(kāi)關(guān)打開(kāi)時(shí),即使網(wǎng)絡(luò)頻繁抖動(dòng),【注冊(cè)中心】也不會(huì)通知所有【Consumer】,比如只通知10%的【Consumer】,降低注冊(cè)中心需要處理的請(qǐng)求量。

        那這種方案有什么問(wèn)題嗎?

        技術(shù)都是有利有弊的,開(kāi)關(guān)的代價(jià)就是會(huì)導(dǎo)致【Consumer】感知最新服務(wù)節(jié)點(diǎn)信息延遲。所以應(yīng)該作為一個(gè)緊急措施,在網(wǎng)絡(luò)頻繁抖動(dòng)時(shí),才打開(kāi)開(kāi)關(guān)。

        綜上,該機(jī)制是為避免【Provider】節(jié)點(diǎn)頻繁變更,而導(dǎo)致【Consumer】同時(shí)請(qǐng)求【注冊(cè)中心】。

        那還有別的方案嗎?

        是的,還有服務(wù)節(jié)點(diǎn)摘除保護(hù)機(jī)制。
        【Provider】在進(jìn)程啟動(dòng)時(shí),會(huì)注冊(cè)服務(wù)到【注冊(cè)中心】,并每隔一段時(shí)間,匯報(bào)心跳給【注冊(cè)中心】,通知自己的存活狀態(tài)。
        若隔了一段固定時(shí)間后,【Provider】仍沒(méi)有匯報(bào)心跳給【注冊(cè)中心】,【注冊(cè)中心】就會(huì)認(rèn)為該節(jié)點(diǎn)已死,將其從可用節(jié)點(diǎn)中移除。

        若遇到網(wǎng)絡(luò)問(wèn)題,大批【Provider】節(jié)點(diǎn)匯報(bào)給【注冊(cè)中心】的心跳信息都可能會(huì)傳達(dá)失敗,【注冊(cè)中心】就會(huì)把它們都從可用節(jié)點(diǎn)列表中移除,造成剩下可用節(jié)點(diǎn)難以承受所有調(diào)用,引起“雪崩”。但這種情況下,可能大部分Provider】節(jié)點(diǎn)是可用的,僅因?yàn)榫W(wǎng)絡(luò)原因無(wú)法匯報(bào)心跳給【注冊(cè)中心】就被“無(wú)情”摘除。

        這就需要根據(jù)實(shí)際業(yè)務(wù),設(shè)定一個(gè)閾值比例,即使網(wǎng)絡(luò)抖動(dòng),【注冊(cè)中心】也不能摘除超過(guò)這個(gè)閾值比例的節(jié)點(diǎn)。通常設(shè)定在20%。因?yàn)榻^大部分時(shí)間,節(jié)點(diǎn)變化也不會(huì)變化頻繁,只有在如下情況才可能發(fā)生:

        • 業(yè)務(wù)明確要下線大批節(jié)點(diǎn)
          這種情況可預(yù)知,所以可以關(guān)閉閾值保護(hù)

        • 網(wǎng)絡(luò)抖動(dòng)
          一般正常時(shí),應(yīng)打開(kāi)閾值保護(hù),以防網(wǎng)絡(luò)抖動(dòng)時(shí),大批量可用服務(wù)節(jié)點(diǎn)被摘除

        綜上,該機(jī)制是為避免【Provider】節(jié)點(diǎn)被大量摘除,而導(dǎo)致【Consumer】可調(diào)用節(jié)點(diǎn)不足。

        所以這兩種機(jī)制,都是因?yàn)椤咀?cè)中心】的節(jié)點(diǎn)信息瞬息萬(wàn)變,所以也經(jīng)常把【注冊(cè)中心】稱為【動(dòng)態(tài)注冊(cè)中心】。

        我開(kāi)始疑惑了,那是否能另辟蹊徑,【Consumer】并不嚴(yán)格以【注冊(cè)中心】中的服務(wù)節(jié)點(diǎn)信息為準(zhǔn),而是更多的以【Consumer】實(shí)際調(diào)用信息來(lái)判斷【Provider】是否可用呢?

        有的,這就是靜態(tài)注冊(cè)中心
        心跳機(jī)制能保證在【Provider】異常時(shí),【注冊(cè)中心】可以及時(shí)把不可用的【Provider】從可用節(jié)點(diǎn)列表中移除,這很好。
        但仔細(xì)思考,為何不把這種心跳機(jī)制直接用在【Consumer】?

        因?yàn)椤綪rovider】是向【Consumer】提供服務(wù),是否可用【Consumer】比【注冊(cè)中心】更清楚,因此可直接在【Consumer】端根據(jù)調(diào)用【Provider】是否成功,以判定【Provider】是否可用。
        若【Consumer】調(diào)用某一【Provider】連續(xù)失敗超過(guò)一定次數(shù),可在本地內(nèi)存將該節(jié)點(diǎn)標(biāo)記為不可用。
        每隔一段固定時(shí)間,【Consumer】向標(biāo)記為不可用的節(jié)點(diǎn)發(fā)起?;钐綔y(cè),若探測(cè)成功,就將標(biāo)記為不可用的節(jié)點(diǎn)再恢復(fù)為可用態(tài),重新發(fā)起調(diào)用。

        這樣【Provider】無(wú)需再向【注冊(cè)中心】心跳匯報(bào),【注冊(cè)中心】中的服務(wù)節(jié)點(diǎn)信息也不會(huì)動(dòng)態(tài)變化,這就是【靜態(tài)注冊(cè)中心】。

        很多公司也是一開(kāi)始采用動(dòng)態(tài)注冊(cè)中心,后來(lái)考慮到網(wǎng)絡(luò)的復(fù)雜性,心跳機(jī)制不一定可靠,而后開(kāi)始改為采用服務(wù)消費(fèi)者端的?;顧C(jī)制,事實(shí)證明這種機(jī)制足以應(yīng)對(duì)網(wǎng)絡(luò)頻繁抖動(dòng)等復(fù)雜場(chǎng)景。

        【靜態(tài)注冊(cè)中心】中的服務(wù)節(jié)點(diǎn)信息并不是一直不變,當(dāng)在

        • 業(yè)務(wù)上線
          要把正在部署的服務(wù)節(jié)點(diǎn)從注冊(cè)中心中移除,等到服務(wù)部署完畢,完全可用的時(shí)候,再加入到注冊(cè)中心

        • 運(yùn)維人工增加或刪除服務(wù)節(jié)點(diǎn)
          需要調(diào)用注冊(cè)中心提供的接口,添加節(jié)點(diǎn)信息或者刪除節(jié)點(diǎn)

        這些預(yù)先感知場(chǎng)景,還是有必要修改【注冊(cè)中心】中的服務(wù)節(jié)點(diǎn)信息的。
        看起來(lái)【靜態(tài)注冊(cè)中心】好像退化成了配置中心,只是這時(shí)配置中心存儲(chǔ)的不是某一項(xiàng)簡(jiǎn)單的配置,而是某服務(wù)的可用節(jié)點(diǎn)信息。

        往期推薦


        由于不知線程池的bug,某Java程序員叕被祭天

        程序員因重復(fù)記錄日志撐爆ELK被辭退!

        擁抱Kubernetes,再見(jiàn)了Spring Cloud

        和阿里P8大佬面試互懟了半小時(shí)的Fork/Join原理!


        目前交流群已有 800+人,旨在促進(jìn)技術(shù)交流,可關(guān)注公眾號(hào)添加筆者微信邀請(qǐng)進(jìn)群



        喜歡文章,點(diǎn)個(gè)“在看、點(diǎn)贊、分享”素質(zhì)三連支持一下~

        瀏覽 100
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            少妇性l交大片免费观看冫 | 精品人妻一区二区三区蜜桃 | 婷婷色站| free性欧美派对对狂欢hd | 麻豆成人无码 | 大尺度视频网站在线观看 | 操逼aaa| 精品 码红桃二区三区 | 性高潮动态图片 | 久久这里有黄色 |