日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
程序員筆記|詳解Eureka緩存機(jī)制

Eureka是Netflix開源的、用于實(shí)現(xiàn)服務(wù)注冊和發(fā)現(xiàn)的服務(wù)。Spring Cloud Eureka基于Eureka進(jìn)行二次封裝,增加了更人性化的UI,使用更為方便。但是由于Eureka本身存在較多緩存,服務(wù)狀態(tài)更新滯后,最常見的狀況是:服務(wù)下線后狀態(tài)沒有及時更新,服務(wù)消費(fèi)者調(diào)用到已下線的服務(wù)導(dǎo)致請求失敗。本文基于Spring Cloud Eureka 1.4.4.RELEASE,在默認(rèn)region和zone的前提下,介紹Eureka的緩存機(jī)制。

創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元淮北做網(wǎng)站,已為上家服務(wù),為淮北各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

一、AP特性

從CAP理論看,Eureka是一個AP系統(tǒng),優(yōu)先保證可用性(A)和分區(qū)容錯性(P),不保證強(qiáng)一致性(C),只保證最終一致性,因此在架構(gòu)中設(shè)計了較多緩存。

(Eureka高可用架構(gòu))

二、服務(wù)狀態(tài)

Eureka服務(wù)狀態(tài)enum類:

 
 
 
 
  1. com.netflix.appinfo.InstanceInfo.InstanceStatus

三、Eureka Server

在Eureka高可用架構(gòu)中,Eureka Server也可以作為Client向其他server注冊,多節(jié)點(diǎn)相互注冊組成Eureka集群,集群間相互視為peer。Eureka Client向Server注冊、續(xù)約、更新狀態(tài)時,接受節(jié)點(diǎn)更新自己的服務(wù)注冊信息后,逐個同步至其他peer節(jié)點(diǎn)。

【注意】如果server-A向server-B節(jié)點(diǎn)單向注冊,則server-A視server-B為peer節(jié)點(diǎn),server-A接受的數(shù)據(jù)會同步給server-B,但server-B接受的數(shù)據(jù)不會同步給server-A。

1. 緩存機(jī)制

Eureka Server存在三個變量:(registry、readWriteCacheMap、readOnlyCacheMap)保存服務(wù)注冊信息,默認(rèn)情況下定時任務(wù)每30s將readWriteCacheMap同步至readOnlyCacheMap,每60s清理超過90s未續(xù)約的節(jié)點(diǎn),Eureka Client每30s從readOnlyCacheMap更新服務(wù)注冊信息,而UI則從registry更新服務(wù)注冊信息。

三級緩存:

緩存相關(guān)配置:

關(guān)鍵類:

四、Eureka Client

Eureka Client存在兩種角色:服務(wù)提供者和服務(wù)消費(fèi)者,作為服務(wù)消費(fèi)者一般配合Ribbon或Feign(Feign內(nèi)部使用Ribbon)使用。Eureka Client啟動后,作為服務(wù)提供者立即向Server注冊,默認(rèn)情況下每30s續(xù)約(renew);作為服務(wù)消費(fèi)者立即向Server全量更新服務(wù)注冊信息,默認(rèn)情況下每30s增量更新服務(wù)注冊信息;Ribbon延時1s向Client獲取使用的服務(wù)注冊信息,默認(rèn)每30s更新使用的服務(wù)注冊信息,只保存狀態(tài)為UP的服務(wù)。

二級緩存:

緩存相關(guān)配置:

關(guān)鍵類:

五、默認(rèn)配置下服務(wù)消費(fèi)者最長感知時間

考慮如下情況:

  • 0s時服務(wù)未通知Eureka Client直接下線;
  • 29s時***次過期檢查evict未超過90s;
  • 89s時第二次過期檢查evict未超過90s;
  • 149s時第三次過期檢查evict未續(xù)約時間超過了90s,故將該服務(wù)實(shí)例從registry和readWriteCacheMap中刪除;
  • 179s時定時任務(wù)從readWriteCacheMap更新至readOnlyCacheMap;
  • 209s時Eureka Client從Eureka Server的readOnlyCacheMap更新;
  • 239s時Ribbon從Eureka Client更新。

因此,極限情況下服務(wù)消費(fèi)者最長感知時間將***趨近240s。

六、應(yīng)對措施

服務(wù)注冊中心在選擇使用Eureka時說明已經(jīng)接受了其優(yōu)先保證可用性(A)和分區(qū)容錯性(P)、不保證強(qiáng)一致性(C)的特點(diǎn)。如果需要優(yōu)先保證強(qiáng)一致性(C),則應(yīng)該考慮使用ZooKeeper等CP系統(tǒng)作為服務(wù)注冊中心。分布式系統(tǒng)中一般配置多節(jié)點(diǎn),單個節(jié)點(diǎn)服務(wù)上線的狀態(tài)更新滯后并沒有什么影響,這里主要考慮服務(wù)下線后狀態(tài)更新滯后的應(yīng)對措施。

1. Eureka Server

  • 縮短readOnlyCacheMap更新周期??s短該定時任務(wù)周期可減少滯后時間。
  •   
      
      
      
    1. eureka.server.responsecCacheUpdateIntervalMs: 10000  # Eureka Server readOnlyCacheMap更新周期
  • 關(guān)閉readOnlyCacheMap。中小型系統(tǒng)可以考慮該方案,Eureka Client直接從readWriteCacheMap更新服務(wù)注冊信息。
  •   
      
      
      
    1. eureka.server.useReadOnlyResponseCache: false        # 是否使用readOnlyCacheMap

2. Eureka Client

  • 服務(wù)消費(fèi)者使用容錯機(jī)制。如Spring Cloud Retry和Hystrix,Ribbon、Feign、Zuul都可以配置Retry,服務(wù)消費(fèi)者訪問某個已下線節(jié)點(diǎn)時一般報ConnectTimeout,這時可以通過Retry機(jī)制重試下一個節(jié)點(diǎn)。
  • 服務(wù)消費(fèi)者縮短更新周期。Eureka Client和Ribbon二級緩存影響狀態(tài)更新,縮短這兩個定時任務(wù)周期可減少滯后時間,例如配置:
  •   
      
      
      
    1. eureka.client.registryFetchIntervalSeconds: 5        # Eureka Client更新周期
    2. ribbon.ServerListRefreshInterval: 2000  
  • 服務(wù)提供者保證服務(wù)正常下線。服務(wù)下線時使用kill或kill -15命令,避免使用kill -9命令,kill或kill -15命令殺死進(jìn)程時將觸發(fā)Eureka Client的shutdown()方法,主動刪除Server的registry和readWriteCacheMap中的注冊信息,不必依賴Server的evict清除。
  • 服務(wù)提供者延遲下線。服務(wù)下線之前先調(diào)用接口使Eureka Server中保存的服務(wù)狀態(tài)為DOWN或OUT_OF_SERVICE后再下線,二者時間差根據(jù)緩存機(jī)制和配置決定,比如默認(rèn)情況下調(diào)用接口后延遲90s再下線服務(wù)即可保證服務(wù)消費(fèi)者不會調(diào)用已下線服務(wù)實(shí)例。

七、網(wǎng)關(guān)實(shí)現(xiàn)服務(wù)下線實(shí)時感知

在軟件工程中,沒有一個問題是中間層解決不了的,而網(wǎng)關(guān)是服務(wù)提供者和服務(wù)消費(fèi)者的中間層。以Spring Cloud Zuul網(wǎng)關(guān)為例,網(wǎng)關(guān)作為Eureka Client保存了服務(wù)注冊信息,服務(wù)消費(fèi)者通過網(wǎng)關(guān)將請求轉(zhuǎn)發(fā)給服務(wù)提供者,只需要做到服務(wù)提供者下線時通知網(wǎng)關(guān)在自己保存的服務(wù)列表中使該服務(wù)失效。為了保持網(wǎng)關(guān)的獨(dú)立性,可實(shí)現(xiàn)一個獨(dú)立服務(wù)接收下線通知并協(xié)調(diào)網(wǎng)關(guān)集群。

【本文是專欄機(jī)構(gòu)宜信技術(shù)學(xué)院的原創(chuàng)文章,微信公眾號“宜信技術(shù)學(xué)院( id: CE_TECH)”】


本文標(biāo)題:程序員筆記|詳解Eureka緩存機(jī)制
分享鏈接:http://www.5511xx.com/article/dhppced.html