在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡隔離Raft是怎么解決CPU飆高問題的呢?

jf_ro2CN3Fa ? 來源:稀土掘金 ? 2023-02-06 14:05 ? 次閱讀

今天下午突然 出現(xiàn) 測試環(huán)境 cpu飆高,干到了 60%,其他項目 響應時間明顯變長。。。有點嚇人,不想背鍋

項目背景

出問題的項目是 需要連接各個不同nacos 和不同的 namespace 進行對應操作的 一個項目,對nacos的操作都是httpClient 調(diào)用的api接口「httpClient方法 沒有問題,不用質(zhì)疑這個」

定位問題

首先 這 cpu高了,直接top -Hp 看看

定位到 進程id,然后 執(zhí)行 jstack 進程id -> 1.txt

看到堆棧信息 ,下面提示信息有很多

"com.alibaba.nacos.client.config.security.updater"#2269daemonprio=5os_prio=0tid=0x00007fa3ec401800nid=0x8d85waitingoncondition[0x00007fa314396000]
java.lang.Thread.State:TIMED_WAITING(parking)
atsun.misc.Unsafe.park(NativeMethod)
-parkingtowaitfor<0x00000000f7f3eae0>(ajava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
atjava.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
atjava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
atjava.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
atjava.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
atjava.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atjava.lang.Thread.run(Thread.java:748)

但是上面這個提示信息 顯示 是 線程內(nèi)部的,而且是nacos client 內(nèi)部的

你這么搞,讓我很難受啊,我都是http 調(diào)用的,當時就是為了 防止開啟無用的線程,這。。。。。「怎么」

那我去 根據(jù)你的關(guān)鍵字找找 是哪里打印的,「關(guān)鍵字 com.alibaba.nacos.client.config.security.updater」

ServerHttpAgent 類的方法

//initexecutorService
this.executorService=newScheduledThreadPoolExecutor(1,newThreadFactory(){
@Override
publicThreadnewThread(Runnabler){
Threadt=newThread(r);
t.setName("com.alibaba.nacos.client.config.security.updater");
t.setDaemon(true);
returnt;
}
});

這是構(gòu)造方法啊,應該只初始化一次的啊,往上debug,我靠,NacosConfigService 類中調(diào)用了,「debug 看什么時候調(diào)用了 不就行了嘛」

項目初始化的時候 調(diào)用了一次,業(yè)務系統(tǒng)依賴nacos嘛,ok 可以理解

再就是漫長的等待,30s后 發(fā)現(xiàn)又是一次調(diào)用,我去,怎么可能。。。

往回debug,代碼如下

scheduler.schedule("定時校對灰度nacos配置",()->loadGrayConfig(grayFileName),
1800,1800,TimeUnit.SECONDS);
/**
*灰度配置更新解決網(wǎng)絡隔離的問題
*
*@paramgrayFileName灰度文件的名稱
*/
privatevoidloadGrayConfig(StringgrayFileName){
synchronized(this){
System.err.println("loadGrayConfigdatetime:"+DateUtils.formatDate(newDate()));
//刷一次緩存重新獲取nacos內(nèi)容賦值
grayConfigManager.loadNoCache(grayFileName);
}
}
74649f22-a3be-11ed-bfe3-dac502259ad0.png

等會,難道 小丑是我。。。。

這當時是為了灰度功能,定時數(shù)據(jù)校驗用的 用了一個線程池,當時以為用了線程池 妥妥的。。。還特意調(diào)用的 Nocache 方法,讓他創(chuàng)建新的nacos Config對象,做數(shù)據(jù)校對

「但是每調(diào)用一次 NacosFactory.createConfigService(properties) ,nacos config 構(gòu)造器就會開一個線程,就導致了這個問題」

這里可能你要問了 你說 為了防止網(wǎng)絡隔離 才加的這個調(diào)度任務,什么是網(wǎng)絡隔離啊?

7494062c-a3be-11ed-bfe3-dac502259ad0.jpg

我剛開始聽說這個概念是 當時學習 Raft

假設一個Raft集群擁有三個節(jié)點,其中節(jié)點3的「網(wǎng)絡被隔離」 ,那么按照「BasicRaft」 的實現(xiàn),集群會有以下動作:

節(jié)點3由于網(wǎng)絡被隔離,收不到來自Leader的Heartbeat和AppendEntries,所以節(jié)點3會進入選舉過程,當然選舉過程也是收不到投票的,所以節(jié)點3會反復超時選舉;節(jié)點3的Term就會一直增大

節(jié)點1與節(jié)點2會正常工作,并停留在當時的Term

網(wǎng)絡恢復之后,Leader給節(jié)點3發(fā)送RPC的時候,節(jié)點3會拒絕這些RPC理由是發(fā)送方任期太小。

Leader收到節(jié)點3發(fā)送的拒絕后,會增大自己的Term,然后變成Follower。

隨后,集群開始新的選舉,大概率原本的Leader會成為新一輪的Leader。

那么網(wǎng)絡隔離 Raft是怎么解決的呢?

多輪投票的安全問題是棘手的,必須避免同一高度不同輪數(shù)分別提交兩個不同區(qū)塊的情形。在Tendermint中,這個問題可以通過鎖機制(locking mechanism)得到解決。

鎖定規(guī)則:「預投票鎖(Prevote-the-Lock)」

驗證者只能「預投票(pre-vote)」 他們被鎖定的區(qū)塊。這樣就阻止驗證者在上一輪中預提交(pre-commit)一個區(qū)塊,之后又預投票了下一輪的另一個區(qū)塊。

· 波爾卡解鎖(Unlock-on-Polka ):驗證者只有在看到更高一輪(相對于其當前被鎖定區(qū)塊的輪數(shù))的波爾卡之后才能釋放該鎖。這樣就允許驗證者解鎖,如果他們預提交了某個區(qū)塊,但是這個區(qū)塊網(wǎng)絡的剩余節(jié)點不想提交,這樣就保護了整個網(wǎng)絡的運轉(zhuǎn),并且這樣做并沒有損害網(wǎng)絡安全性。

「解決方案是把term替換成(term, nodeid),并且按照字典序比較大小(a > b === a.term > b.term || a.term == b.term && a.nodeid > b. node_id). 這是paxos里的做法, 保證不會出現(xiàn)raft里的沖突.」

原理是, raft對voting的階段有2個值來描述: term和當前投了哪個node_id, 即[term, nodeid], 由于raft不允許一個term vote2個不同的不同的node, 也就是說, vote_req.term > local.term && vote_req.nodeid == local.nodeid 才會grant這個vote請求.

把term替換成(term,nodeid)后, vote階段的大小比較變成了: vote_req.term > local.term || vote_req.term == local.term && vote_req.nodeid >= local.nodeid, 條件邊寬松了. 同一個term內(nèi), 較大nodeid的可以搶走較小nodeid 已經(jīng)建立的leader.

而日志中原本記錄的term也需要將其替換成(term, node_id), 因為這兩項加起來才能唯一確定一個leader. 之前raft里只需一個term就可以唯一確定一個leader.

vote中比較最大log id相應的,從比較tuple (term, index) 改成比較tuple (term, node_id, index).

就這么點修改.

「總結(jié)下來就是 按照字典排序 和 預投票鎖 保證 當多個 term 相同的 candidate 相遇后,肯定會有一個 獲得多數(shù)派投票」

想法

我們?nèi)绻霈F(xiàn) 異常的網(wǎng)絡隔離情況再回來,可能導致 數(shù)據(jù)的不一致,但是上面的 解決辦法 因為 比較重,不適合我們,我們就單純 引入 「定時校對的調(diào)度任務 進行比較(和 對賬一樣)」

修復

我對nacos config 連接進行 遍歷查找 是否存活,不存活 我就shutdown,然后生成一個新的,而不是這種全部生成一邊,畢竟人家 構(gòu)造器開了線程。。。。

說回來還是因為 我當時自信了,沒往這個調(diào)用下面看,在子類中 寫的開線程 哈哈,行吧,改改 ,跑到測試環(huán)境 看看效果(CPU)

74a4b346-a3be-11ed-bfe3-dac502259ad0.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10904

    瀏覽量

    213026
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11577
  • cache技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    1086

原文標題:記一次 Nacos 導致的 CPU 飆高問題 !

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何實現(xiàn)網(wǎng)絡隔離

    如何實現(xiàn)網(wǎng)絡隔離
    發(fā)表于 10-31 08:10

    什么是網(wǎng)絡隔離技術(shù)

    什么是網(wǎng)絡隔離技術(shù)網(wǎng)絡隔離,是指兩個或兩個以上的計算機或網(wǎng)絡,不相連、不相通、相互斷開。不需要信息交換同的
    發(fā)表于 08-19 09:11 ?5875次閱讀

    高性能CPU時鐘網(wǎng)絡設計

    討論了物理設計中時鐘網(wǎng)絡的設計技術(shù),并以現(xiàn)有的CPU時鐘網(wǎng)絡的為例,介紹了高性能CPU的時鐘網(wǎng)絡設計技術(shù)。
    發(fā)表于 12-27 15:28 ?46次下載
    高性能<b class='flag-5'>CPU</b>時鐘<b class='flag-5'>網(wǎng)絡</b>設計

    高性能CPU的時鐘網(wǎng)絡設計

    高性能CPU的時鐘網(wǎng)絡設計
    發(fā)表于 10-30 15:28 ?23次下載
    高性能<b class='flag-5'>CPU</b>的時鐘<b class='flag-5'>網(wǎng)絡</b>設計

    物理隔離與邏輯隔離網(wǎng)絡光端機和光纖收發(fā)器到底有什么區(qū)別

    物理隔離網(wǎng)絡的需求近期,電力、銀行、公安、部隊、鐵路、大型企事業(yè)單位專網(wǎng)有廣泛物理隔離的以太網(wǎng)接入需求,但究竟什么是物理隔離以太網(wǎng)?很多廠
    發(fā)表于 04-02 08:00 ?0次下載
    物理<b class='flag-5'>隔離</b>與邏輯<b class='flag-5'>隔離</b><b class='flag-5'>網(wǎng)絡</b>光端機和光纖收發(fā)器到底有什么區(qū)別

    CPU為什么不做成圓形

    當然也有長方形的版本。上表面平整光滑,下表面則有著金屬觸點或針腳。雖然我們默認CPU的形狀為矩形,但是不知道有沒有小伙伴想過CPU為什么不做成圓形
    的頭像 發(fā)表于 11-10 17:30 ?1961次閱讀

    JVM CPU使用率問題的排查分析過程

    問題現(xiàn)象 排查過程 問題現(xiàn)象 首先,我們一起看看通過 VisualVM 監(jiān)控到的機器 CPU 使用率圖: 如上圖所示,在 下午3:45 分之前,CPU 的使用率明顯,最高
    的頭像 發(fā)表于 10-10 16:31 ?2393次閱讀

    網(wǎng)絡隔離變壓器的選型

    Hqst華強盛導讀:網(wǎng)絡隔離變壓器的選型需要考慮以下幾個因素: 輸入和輸出電壓:網(wǎng)絡隔離變壓器的輸入和輸出電壓應與應用場景的要求相匹配。 額定電流:
    發(fā)表于 05-04 08:41 ?1335次閱讀

    持續(xù)在榜的RAFT-Stereo,你確定不來了解嗎?

    給定一對矯正后的圖像(IL, IR),目標是估計一個視差場d,使每個IL中的像素都有水平的位移。與RAFT類似,RAFT-Stereo的方法由三個主要組件組成:特征提取器、相關(guān)金字塔和基于GRU的更新運算符,如圖1所示。更新運算符迭代地從相關(guān)金字塔中檢索特征并對視差場進行
    的頭像 發(fā)表于 05-19 09:24 ?896次閱讀
    持續(xù)在榜的<b class='flag-5'>RAFT</b>-Stereo,你確定不來了解嗎?

    將Paxos和Raft統(tǒng)一為一個協(xié)議:Abstract-paxos

    之前寫了一篇 Paxos 的直觀解釋,用簡單的語言描述了 paxos 的工作原理,看過的朋友說是看過的最易懂的 paxos 介紹,同時也問我是否也寫一篇 raft 的。但 raft 介紹文章已經(jīng)很多很優(yōu)質(zhì)了,感覺沒什么可寫的,就一直拖著。
    的頭像 發(fā)表于 06-08 14:36 ?508次閱讀
    將Paxos和<b class='flag-5'>Raft</b>統(tǒng)一為一個協(xié)議:Abstract-paxos

    使用 RAPIDS RAFT 進行機器學習和數(shù)據(jù)分析的可重用計算模式

    使用 RAPIDS RAFT 進行機器學習和數(shù)據(jù)分析的可重用計算模式
    的頭像 發(fā)表于 07-05 16:30 ?623次閱讀
    使用 RAPIDS <b class='flag-5'>RAFT</b> 進行機器學習和數(shù)據(jù)分析的可重用計算模式

    功率電源應用中需要怎樣的隔離驅(qū)動?為什么需要隔離驅(qū)動?

    功率電源應用中需要怎樣的隔離驅(qū)動?為什么需要隔離驅(qū)動?為什么有的電機不需要隔離驅(qū)動? 在功率電源應用中,
    的頭像 發(fā)表于 10-23 09:30 ?1187次閱讀

    cpu溫度太高怎么解決?cpu溫度的原因?

    cpu溫度太高怎么解決?cpu溫度的原因? CPU (中央處理器) 溫度過高可能會導致系統(tǒng)崩潰、性能下降甚至損壞硬件,因此是一個需要嚴肅對待的問題。在本文中,我們將探討
    的頭像 發(fā)表于 12-09 16:15 ?4331次閱讀

    請問一下docker是怎么實現(xiàn)cpu隔離的?

    Docker 使用 cgroups(控制組)來實現(xiàn) CPU 隔離
    的頭像 發(fā)表于 01-15 10:06 ?569次閱讀
    主站蜘蛛池模板: 美女张开腿让男人桶爽 | 综合色久| 狠狠色噜噜狠狠狠狠奇米777 | 大黄网站在线观看 | 亚洲网站免费看 | 欧美性精品 | 免费黄色国产视频 | 狂野欧美性猛交xxxx免费 | 免费大片看黄在观看 | 亚洲伦理一区二区 | 免费人成在线观看视频色 | 欧美视频xxxxx | 特级毛片免费视频观看 | sss华人在线play| 啪啪大片 | 黄视频在线免费看 | 色人人| 天天天干干干 | 色多多在线观看播放 | 美女午夜| 一级特黄色毛片免费看 | 亚洲欧洲一区二区三区在线观看 | 婷婷操| 成人免费看黄网站无遮挡 | 49vv婷婷网| 欧洲成品大片在线播放 | 4388x17亚洲最大成人网 | 天天操天天射天天 | 亚洲天堂社区 | 男女无遮挡在线完整视频 | 国产日韩一区二区三区 | 免费成人看片 | 性欧美17一18sex性高清 | 亚洲国产成人精彩精品 | 免费午夜不卡毛片 | 天天操天天透 | 欧美一欧美一区二三区性 | 色综合视频一区二区三区 | 理论片免费午夜 | 日韩夜夜操| 一级毛毛片毛片毛片毛片在线看 |