<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          《跟二師兄學(xué)Nacos》02篇 Nacos的臨時與持久化實例,傻傻分不清?

          共 2696字,需瀏覽 6分鐘

           ·

          2021-08-05 11:18

          學(xué)習(xí)不用那么功利,二師兄帶你從更高維度輕松閱讀源碼~

          本篇文章Nacos核心邏輯篇,給大家講解一下「臨時實例」與「持久化實例」的區(qū)別及運用場景。

          Nacos的臨時實例與持久化實例

          在Nacos Client進行實例注冊時,我們知道是通過Instance對象來攜帶實例的基本信息的。在Instance中有一個ephemeral字段,用來表示該實例是臨時實例,還是持久化實例。

          public class Instance implements Serializable {
              
              /**
               * If instance is ephemeral.
               *
               * @since 1.0.0
               */
              private boolean ephemeral = true;
              // 省略其他
          }

          從源碼可以看出ephemeral字段是1.0.0版本新增的,用來表示注冊的實例是否是臨時實例還是持久化實例。

          目前,無論是Nacos 1.x版本,還是2.x版本,ephemeral的默認值都是true。在1.x版本中服務(wù)注冊默認采用http協(xié)議,2.x版本默認采用grpc協(xié)議,但這都未影響到ephemeral字段的默認值。

          也就是說,一直以來,Nacos實例默認都是以臨時實例的形式進行注冊的。

          當然,也是可以通過application的配置來改變這里默認值的。比如:

          # false為永久實例,true表示臨時實例
          spring.cloud.nacos.discovery.ephemeral=false

          上面是基于Spring Cloud進行配置,false為永久實例,true表示臨時實例,默認為true。

          臨時實例與持久化實例的區(qū)別

          臨時實例與持久化實例的區(qū)別主要體現(xiàn)在服務(wù)器對該實例的處理上。

          臨時實例向Nacos注冊,Nacos不會對其進行持久化存儲,只能通過心跳方式?;?。默認模式是:客戶端心跳上報Nacos實例健康狀態(tài),默認間隔5秒,Nacos在15秒內(nèi)未收到該實例的心跳,則會設(shè)置為不健康狀態(tài),超過30秒則將實例刪除。

          持久化實例向Nacos注冊,Nacos會對其進行持久化處理。當該實例不存在時,Nacos只會將其健康狀態(tài)設(shè)置為不健康,但并不會對將其從服務(wù)端刪除。

          另外,可以使用實例的ephemeral來判斷健康檢查模式,ephemeral為true對應(yīng)的是client模式(客戶端心跳),為false對應(yīng)的是server模式(服務(wù)端檢查)。

          為什么要設(shè)計兩種模式?

          上面說了兩種模式的不同和處理上的區(qū)別,那么Nacos為什么設(shè)計兩種模式,它們是為了應(yīng)對什么樣的場景而存在呢?

          對于臨時實例,健康檢查失敗,則直接可以從列表中刪除。這種特性就比較適合那些需要應(yīng)對流量突增的場景,服務(wù)可以進行彈性擴容。當流量過去之后,服務(wù)停掉即可自動注銷了。

          對于持久化實例,健康檢查失敗,會被標記成不健康狀態(tài)。它的好處是運維可以實時看到實例的健康狀態(tài),便于后續(xù)的警告、擴容等一些列措施。

          除了上述場景之外,持久化實例還有另外一個場景用的到,那就是保護閾值。

          Nacos的保護閾值

          關(guān)于保護閾值,在前面的文章中專門寫到過。

          Nacos中可以針對具體的實例設(shè)置一個保護閾值,值為0-1之間的浮點類型。本質(zhì)上,保護閾值是?個?例值(當前服務(wù)健康實例數(shù)/當前服務(wù)總實例數(shù))。

          ?般情況下,服務(wù)消費者要從Nacos獲取可?實例有健康/不健康狀態(tài)之分。Nacos在返回實例時,只會返回健康實例。

          但在?并發(fā)、?流量場景會存在?定的問題。比如,服務(wù)A有100個實例,98個實例都處于不健康狀態(tài),如果Nacos只返回這兩個健康實例的話。流量洪峰的到來可能會直接打垮這兩個服務(wù),進一步產(chǎn)生雪崩效應(yīng)。

          保護閾值存在的意義在于當服務(wù)A健康實例數(shù)/總實例數(shù) < 保護閾值時,說明健康的實例不多了,保護閾值會被觸發(fā)(狀態(tài)true)。

          Nacos會把該服務(wù)所有的實例信息(健康的+不健康的)全部提供給消費者,消費者可能訪問到不健康的實例,請求失敗,但這樣也?造成雪崩要好。犧牲了?些請求,保證了整個系統(tǒng)的可?。

          這里我們看到了不健康實例的另外一個作用:防止產(chǎn)生雪崩。

          那么,如果所有的實例都是臨時實例,當雪崩場景發(fā)生時,Nacos的閾值保護機制是不是就沒有足夠的(包含不健康實例)實例返回了?如果有一部分實例是持久化實例,即便它們已經(jīng)掛掉,狀態(tài)為不健康的,但當觸發(fā)閾值保護時,還是可以起到分流的作用。

          小結(jié)

          關(guān)于Nacos臨時實例與持久化實例就聊這么多了。如果想更深入了解,其實可以讀一下源碼。由于基于gRPC的實現(xiàn)過于復(fù)雜,可讀性不夠強,如果想閱讀,建議閱讀基于Http的實現(xiàn)。

          如果文章內(nèi)容有問題或想技術(shù)討論請聯(lián)系我(微信:zhuan2quan,備注Nacos),如果覺得寫的還不錯,值得一起學(xué)習(xí),那就關(guān)注一下。

          往期推薦

          《跟二師兄學(xué)Nacos吧》EXT-04篇 Nacos竟然是這樣使用代理模式的?

          《跟二師兄學(xué)Nacos吧》EXT-03篇 Nacos中此處為什么采用反射機制?

          《跟二師兄學(xué)Nacos吧》EXT-02篇 面試官問工廠模式,你理解的對嗎?

          《跟二師兄學(xué)Nacos吧》EXT-01篇 看看Nacos是怎么活學(xué)活用簡單工廠模式的!

          《跟二師兄學(xué)Nacos吧》第1篇 Nacos客戶端服務(wù)注冊源碼分析



          如果你覺得這篇文章不錯,那么,下篇通常會更好。添加微信好友,可備注“加群”(微信號:zhuan2quan)。

          一篇文章就看透技術(shù)本質(zhì)的人,
            和花一輩子都看不清的人,
            注定是截然不同的搬磚生涯。
          ▲ 按關(guān)注”程序新視界“,洞察技術(shù)內(nèi)幕
          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99视频精品在线 | 色先锋资源一区二区 | 东京热中文网 | 欧美国产免费A视频 | 久久99人妻无码精品 |