AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

深度剖析:Dubbo使用Nacos注冊中心的坑

來源: 責編: 時間:2024-04-11 09:04:05 153觀看
導讀問題描述前幾年我在做微服務部件升級時,將Dubbo的注冊中心從Zookeeper切換到Nacos。切換的原因是有2點:Zookeeper保障了CP,面對大量服務上下線時,吞吐量和響應有瓶頸。Nacos保障了AP,目前微服務的場景下,業界建議優先保障AP

Zma28資訊網——每日最新資訊28at.com

問題描述

前幾年我在做微服務部件升級時,將Dubbo的注冊中心從Zookeeper切換到Nacos。切換的原因是有2點:Zma28資訊網——每日最新資訊28at.com

  • Zookeeper保障了CP,面對大量服務上下線時,吞吐量和響應有瓶頸。Nacos保障了AP,目前微服務的場景下,業界建議優先保障AP,這樣有較好的吞吐量和較快的響應。
  • 本著能少用部件就少用,盡量減少故障點的原則。Nacos既可以做注冊中心也可以做配置中心,所以二合一,只采用一個部件。

切換完之后,奇怪的事情發生了,出現2個現象:Zma28資訊網——每日最新資訊28at.com

  • 有些微服務啟動很慢很慢,甚至長達15分鐘的時間都無法成功啟動,一直在打印大量的nacos請求日志。但是有些微服務啟動又較快。
  • 通過VisualVM查看JVM的線程情況,發現有的微服務居然高達4000左右的線程數。但是沒切換之前只有幾百的線程數。啟動了大量的線程,導致CPU飆升不少,同時服務啟動也慢。

通過現象開始排查

出現這種問題時,剛開始有點抓瞎,但是我們只能從常規的手段一點點排查,急不來。通過表面的現象,我們來逐步分析。Zma28資訊網——每日最新資訊28at.com

現象一:微服務啟動很慢很慢,一直在打印大量的nacos請求日志。日志如下:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

現象二:JVM的線程數高達4000左右。線程情況如下:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

基于以上現象,我們只能初步判斷是nacos的問題(當然結論不是nacos的問題)。Zma28資訊網——每日最新資訊28at.com

我們先來猜測:可能由于某種原因,產生了大量的nacos線程,每個線程又在不停的發送http請求。Zma28資訊網——每日最新資訊28at.com

那接下來繼續分析Nacos。Zma28資訊網——每日最新資訊28at.com

分析Nacos

1.回顧Nacos原理

我們知道Nacos客戶端注冊和訂閱服務流程大概如下:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

所以,一般nacos-client有4個重要線程:Zma28資訊網——每日最新資訊28at.com

  • 定時從nacos-server拉取服務的線程
  • 維持心跳的線程
  • 監聽服務變更的線程
  • 推送本服務變更信息的線程

2.分析Nacos

根據以上線程的名稱和原理流程圖,我們可以在nacos源碼里找到對應的位置,代碼如下:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

翻看每個線程里執行的任務,確實能找到他們都在向nacos-server發送對應的的http的api請求:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

既然找到了創建線程和發起http調用的原因,那就繼續查看是哪里調用的init方法。Zma28資訊網——每日最新資訊28at.com

此時會自然想到dubbo了,因為dubbo采用nacos作為注冊中心,自然要依賴nacos-client創建出nacos注冊中心相關的類,然后從nacos注冊中心類中獲取到微服務的元數據信息。Zma28資訊網——每日最新資訊28at.com

Dubbo登場

在翻看Dubbo源碼之前,先回顧下Dubbo是怎樣基于 引用配置文件 或者 引用配置注解創建Proxy的,大致流程如下:Zma28資訊網——每日最新資訊28at.com

ReferenceAnnotationBeanPostProcessor#doGetInjectedBean

?Zma28資訊網——每日最新資訊28at.com

ReferenceAnnotationBeanPostProcessor#buildReferenceBeanIfAbsent

?Zma28資訊網——每日最新資訊28at.com

ReferenceBeanBuilder#build

?Zma28資訊網——每日最新資訊28at.com

ReferenceBean#afterPropertiesSet

?Zma28資訊網——每日最新資訊28at.com

ReferenceConfig#init

至此完成了referenceProxy的創建。Zma28資訊網——每日最新資訊28at.com

重點看ReferenceConfig#init方法,方法里有一行代碼:ref = createProxy(map);,順著這行代碼往里走,如下:Zma28資訊網——每日最新資訊28at.com

RegistryProtocol#refer

?Zma28資訊網——每日最新資訊28at.com

AbstractRegistryFactory#getRegistry

重點來了,重點來了,重點來了,核心代碼和注釋見下圖。Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

總之是:因為在上面ReferenceConfig#init方法里引入了timestamp參數,同時又因為NacosRegistryFactory又自己實現了一套createRegistryCacheKey方法,這個方法里沒有截掉timestamp參數,所有就會導致從緩存里取不到注冊中心信息,所有就會不停的去創建,從而又創建了更多的線程,從而發送了很多http請求。Zma28資訊網——每日最新資訊28at.com

再次查看ReferenceConfig#init方法的源碼,確實是加入了timestamp參數:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

至此問題的原因已經找到了,接下來就是如何解決了。Zma28資訊網——每日最新資訊28at.com

解決方法

解決方法也很簡單,就是在Dubbo的NacosRegistryFactory類里面截掉timestamp參數。Zma28資訊網——每日最新資訊28at.com

遺憾的是,我當時發現了這個問題時,打算給Dubbo官方發issue的,發現已經有網友搶先一步發了issue,并且已經合并到2.7.9分支里了。Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

以下是解決方法的代碼截圖:Zma28資訊網——每日最新資訊28at.com

Zma28資訊網——每日最新資訊28at.com

兩個版本處理URL的結果如下:Zma28資訊網——每日最新資訊28at.com

2.7.8版本:nacos://10.20.1.13:8848,10.20.1.14:8848,10.20.1.15:8848/org.apache.dubbo.registry.RegistryService?application=ehome-cloud&application.version=1.0&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&namespace=dev-jzj&owner=ehome-cloud-owner&pid=21335&qos.enable=false&release=2.7.8×tamp=17125458564892.7.9版本:nacos://10.20.1.13:8848,10.20.1.14:8848,10.20.1.15:8848/org.apache.dubbo.registry.RegistryService?namespace=dev-jzj

這個問題是在dubbo的2.7.8版本出現的,最后通過將2.7.9的修復class替換了2.7.8的NacosRegistryFactoryclass類,然后重新打了dubbo依賴包,問題得以解決。Zma28資訊網——每日最新資訊28at.com

有朋友會問:為啥不是引用2.7.9呢?因為我擔心2.7.9有其他問題,所以做個class替換,然后繼續用2.7.8是個較好的方式。Zma28資訊網——每日最新資訊28at.com

總結

本文主要梳理了Dubbo使用Nacos注冊中心的坑,同時也講述了,出現問題時,如何一步一步排查。透過現象結合源碼,逐步找到問題的真相。Zma28資訊網——每日最新資訊28at.com

當然在排查之前,就需要對Dubbo和Nacos有一定的了解。所以各位朋友,在平時還是要多積累,多深入原理,這樣遇到問題才能順利解決。Zma28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-82749-0.html深度剖析:Dubbo使用Nacos注冊中心的坑

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python實現適配器模式、裝飾器模式、代理模式

下一篇: 深入理解C/C++指針的算術運算

標簽:
  • 熱門焦點
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的“在線鑒別”,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就“胡錫進炒股是否知道認真報道”展開討論。有
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top