日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

b9628資訊網(wǎng)——每日最新資訊28at.com

問題描述

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

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

切換完之后,奇怪的事情發(fā)生了,出現(xiàn)2個現(xiàn)象:b9628資訊網(wǎng)——每日最新資訊28at.com

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

通過現(xiàn)象開始排查

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

現(xiàn)象一:微服務(wù)啟動很慢很慢,一直在打印大量的nacos請求日志。日志如下:b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)象二:JVM的線程數(shù)高達4000左右。線程情況如下:b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

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

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

那接下來繼續(xù)分析Nacos。b9628資訊網(wǎng)——每日最新資訊28at.com

分析Nacos

1.回顧Nacos原理

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

b9628資訊網(wǎng)——每日最新資訊28at.com

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

  • 定時從nacos-server拉取服務(wù)的線程
  • 維持心跳的線程
  • 監(jiān)聽服務(wù)變更的線程
  • 推送本服務(wù)變更信息的線程

2.分析Nacos

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

b9628資訊網(wǎng)——每日最新資訊28at.com

翻看每個線程里執(zhí)行的任務(wù),確實能找到他們都在向nacos-server發(fā)送對應(yīng)的的http的api請求:b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

既然找到了創(chuàng)建線程和發(fā)起http調(diào)用的原因,那就繼續(xù)查看是哪里調(diào)用的init方法。b9628資訊網(wǎng)——每日最新資訊28at.com

此時會自然想到dubbo了,因為dubbo采用nacos作為注冊中心,自然要依賴nacos-client創(chuàng)建出nacos注冊中心相關(guān)的類,然后從nacos注冊中心類中獲取到微服務(wù)的元數(shù)據(jù)信息。b9628資訊網(wǎng)——每日最新資訊28at.com

Dubbo登場

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

ReferenceAnnotationBeanPostProcessor#doGetInjectedBean

?b9628資訊網(wǎng)——每日最新資訊28at.com

ReferenceAnnotationBeanPostProcessor#buildReferenceBeanIfAbsent

?b9628資訊網(wǎng)——每日最新資訊28at.com

ReferenceBeanBuilder#build

?b9628資訊網(wǎng)——每日最新資訊28at.com

ReferenceBean#afterPropertiesSet

?b9628資訊網(wǎng)——每日最新資訊28at.com

ReferenceConfig#init

至此完成了referenceProxy的創(chuàng)建。b9628資訊網(wǎng)——每日最新資訊28at.com

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

RegistryProtocol#refer

?b9628資訊網(wǎng)——每日最新資訊28at.com

AbstractRegistryFactory#getRegistry

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

b9628資訊網(wǎng)——每日最新資訊28at.com

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

再次查看ReferenceConfig#init方法的源碼,確實是加入了timestamp參數(shù):b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

至此問題的原因已經(jīng)找到了,接下來就是如何解決了。b9628資訊網(wǎng)——每日最新資訊28at.com

解決方法

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

遺憾的是,我當時發(fā)現(xiàn)了這個問題時,打算給Dubbo官方發(fā)issue的,發(fā)現(xiàn)已經(jīng)有網(wǎng)友搶先一步發(fā)了issue,并且已經(jīng)合并到2.7.9分支里了。b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

以下是解決方法的代碼截圖:b9628資訊網(wǎng)——每日最新資訊28at.com

b9628資訊網(wǎng)——每日最新資訊28at.com

兩個版本處理URL的結(jié)果如下:b9628資訊網(wǎng)——每日最新資訊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版本出現(xiàn)的,最后通過將2.7.9的修復(fù)class替換了2.7.8的NacosRegistryFactoryclass類,然后重新打了dubbo依賴包,問題得以解決。b9628資訊網(wǎng)——每日最新資訊28at.com

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

總結(jié)

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

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

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

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

上一篇: Python實現(xiàn)適配器模式、裝飾器模式、代理模式

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

標簽:
  • 熱門焦點
  • 6月安卓手機好評榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優(yōu)惠,到手價12999元,比發(fā)布價便宜了7000元,在大屏電視市場開卷。據(jù)了解,Redmi MAX 100
  • 28個SpringBoot項目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會使用到很多注解或者問到注解相關(guān)的知識。本文主要對一些常用的注解進行了總結(jié),同時也會舉出具體例子,供大家學習和參考。注解
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業(yè)務(wù)中需要進行各種審批流程時,可能會面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動處理這些審批流程可能會導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應(yīng)該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 零售大模型“干中學”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經(jīng)無忌7月16日晚,上海1862時尚藝術(shù)中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊以絕對的優(yōu)勢戰(zhàn)勝了BLG戰(zhàn)隊,拿下了總決
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發(fā)者大會2023(HDC.Together)大會上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來,HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
Top 主站蜘蛛池模板: 仁布县| 全州县| 永济市| 乌什县| 乌拉特中旗| 金沙县| 西充县| 金堂县| 闽清县| 正安县| 太湖县| 泸定县| 水城县| 米脂县| 梓潼县| 军事| 关岭| 昭平县| 柳林县| 齐河县| 融水| 厦门市| 咸丰县| 山阳县| 乐业县| 兴城市| 广德县| 虎林市| 博湖县| 尤溪县| 桐城市| 嵩明县| 蒲江县| 砀山县| 溧阳市| 德保县| 庆城县| 罗源县| 北海市| 碌曲县| 花莲市|