摘要:的上有一句話,大意是一個(gè)服務(wù)啟動(dòng)后最長(zhǎng)可能需要分鐘時(shí)間才能被其它服務(wù)感知到,但是文檔并沒(méi)有解釋為什么會(huì)有這分鐘。其實(shí)這是由三處緩存一處延遲造成的。對(duì)此做了修改,服務(wù)啟動(dòng)后會(huì)馬上注冊(cè)以上這四個(gè)秒正是官方上寫服務(wù)注冊(cè)最長(zhǎng)需要分鐘的原因。
Eureka的wiki上有一句話,大意是一個(gè)服務(wù)啟動(dòng)后最長(zhǎng)可能需要2分鐘時(shí)間才能被其它服務(wù)感知到,但是文檔并沒(méi)有解釋為什么會(huì)有這2分鐘。其實(shí)這是由三處緩存 + 一處延遲造成的。
首先,Eureka對(duì)HTTP響應(yīng)做了緩存。在Eureka的”控制器”類ApplicationResource的109行可以看到有一行
String payLoad = responseCache.get(cacheKey);
的調(diào)用,該代碼所在的getApplication()方法的功能是響應(yīng)客戶端查詢某個(gè)服務(wù)信息的HTTP請(qǐng)求:
String payLoad = responseCache.get(cacheKey); // 從cache中拿響應(yīng)數(shù)據(jù) if (payLoad != null) { logger.debug("Found: {}", appName); return Response.ok(payLoad).build(); } else { logger.debug("Not Found: {}", appName); return Response.status(Status.NOT_FOUND).build(); }
上面的代碼中,responseCache引用的是ResponseCache類型,該類型是一個(gè)接口,其get()方法首先會(huì)去緩存中查詢數(shù)據(jù),如果沒(méi)有則生成數(shù)據(jù)返回(即真正去查詢注冊(cè)列表),且緩存的有效時(shí)間為30s。也就是說(shuō),客戶端拿到Eureka的響應(yīng)并不一定是即時(shí)的,大部分時(shí)候只是緩存信息。
其次,Eureka Client對(duì)已經(jīng)獲取到的注冊(cè)信息也做了30s緩存。即服務(wù)通過(guò)eureka客戶端第一次查詢到可用服務(wù)地址后會(huì)將結(jié)果緩存,下次再調(diào)用時(shí)就不會(huì)真正向Eureka發(fā)起HTTP請(qǐng)求了。
再次, 負(fù)載均衡組件Ribbon也有30s緩存。Ribbon會(huì)從上面提到的Eureka Client獲取服務(wù)列表,然后將結(jié)果緩存30s。
最后,如果你并不是在Spring Cloud環(huán)境下使用這些組件(Eureka, Ribbon),你的服務(wù)啟動(dòng)后并不會(huì)馬上向Eureka注冊(cè),而是需要等到第一次發(fā)送心跳請(qǐng)求時(shí)才會(huì)注冊(cè)。心跳請(qǐng)求的發(fā)送間隔也是30s。(Spring Cloud對(duì)此做了修改,服務(wù)啟動(dòng)后會(huì)馬上注冊(cè))
以上這四個(gè)30秒正是官方wiki上寫服務(wù)注冊(cè)最長(zhǎng)需要2分鐘的原因。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72034.html
摘要:和二級(jí)緩存影響狀態(tài)更新,縮短這兩個(gè)定時(shí)任務(wù)周期可減少滯后時(shí)間,例如配置更新周期更新周期服務(wù)提供者保證服務(wù)正常下線。服務(wù)提供者延遲下線。 引言 Eureka是Netflix開源的、用于實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)的服務(wù)。Spring Cloud Eureka基于Eureka進(jìn)行二次封裝,增加了更人性化的UI,使用更為方便。但是由于Eureka本身存在較多緩存,服務(wù)狀態(tài)更新滯后,最常見的狀況是:服務(wù)...
摘要:大家好,我是悟空呀上兩篇講解源碼的文章過(guò)于硬核領(lǐng)導(dǎo)讓我研究源碼啟動(dòng)過(guò)程領(lǐng)導(dǎo)叕讓我研究源碼注冊(cè)過(guò)程本篇將會(huì)給大家講解我在本地搭建的集群環(huán)境下,控制臺(tái)的參數(shù)說(shuō)明。目前悟空我的機(jī)器上顯示的個(gè)。悟空我的本機(jī)是往進(jìn)行注冊(cè)了。 大家好,我是悟空呀~上兩篇講解 Eureka 源碼的文章過(guò)于硬核:領(lǐng)導(dǎo)讓我研究 Eureka 源...
摘要:所以通過(guò)設(shè)置一個(gè)適中的拉取注冊(cè)表以及發(fā)送心跳的頻率,保證大規(guī)模系統(tǒng)里對(duì)的請(qǐng)求壓力不會(huì)太大。在注冊(cè)表發(fā)生變更的時(shí)候會(huì)在內(nèi)存中更新變更的注冊(cè)表數(shù)據(jù),同時(shí)過(guò)期掉。上述就是架構(gòu)中,作為微服務(wù)注冊(cè)中心可以承載大規(guī)模系統(tǒng)每天千萬(wàn)級(jí)訪問(wèn)量的原理。 歡迎關(guān)注微信公眾號(hào):石杉的架構(gòu)筆記 周一至周五早8點(diǎn)!精品技術(shù)文章準(zhǔn)時(shí)送上??! 往期文章1.拜托!面試請(qǐng)不要再問(wèn)我Spring Cloud底層原理! 目...
摘要:所以通過(guò)設(shè)置一個(gè)適中的拉取注冊(cè)表以及發(fā)送心跳的頻率,保證大規(guī)模系統(tǒng)里對(duì)的請(qǐng)求壓力不會(huì)太大。在注冊(cè)表發(fā)生變更的時(shí)候會(huì)在內(nèi)存中更新變更的注冊(cè)表數(shù)據(jù),同時(shí)過(guò)期掉。上述就是架構(gòu)中,作為微服務(wù)注冊(cè)中心可以承載大規(guī)模系統(tǒng)每天千萬(wàn)級(jí)訪問(wèn)量的原理。 歡迎關(guān)注微信公眾號(hào):石杉的架構(gòu)筆記 周一至周五早8點(diǎn)!精品技術(shù)文章準(zhǔn)時(shí)送上?。?往期文章1.拜托!面試請(qǐng)不要再問(wèn)我Spring Cloud底層原理! 目...
摘要:上篇文章緩存機(jī)制介紹了的緩存機(jī)制,相信大家對(duì)有了進(jìn)一步的了解,本文將詳細(xì)介紹網(wǎng)關(guān)如何實(shí)現(xiàn)服務(wù)下線的實(shí)時(shí)感知。目前網(wǎng)關(guān)實(shí)現(xiàn)的是對(duì)網(wǎng)關(guān)下游服務(wù)的實(shí)時(shí)感知,而且需滿足以下條件生產(chǎn)者需部署在容器管理平臺(tái)生產(chǎn)者做正常的下線升級(jí)或者縮容操作。 上篇文章《Eureka 緩存機(jī)制》介紹了Eureka的緩存機(jī)制,相信大家對(duì)Eureka 有了進(jìn)一步的了解,本文將詳細(xì)介紹API網(wǎng)關(guān)如何實(shí)現(xiàn)服務(wù)下線的實(shí)時(shí)感知...
閱讀 2228·2021-09-22 10:56
閱讀 1527·2021-09-07 10:11
閱讀 1832·2019-08-30 15:54
閱讀 2319·2019-08-30 15:44
閱讀 2333·2019-08-29 12:40
閱讀 3054·2019-08-28 18:25
閱讀 1772·2019-08-26 10:24
閱讀 3217·2019-08-23 18:39