rabbitmqHash沖突和一致性相關(guān)問題舉例分析

這篇文章主要介紹“rabbitmq Hash沖突和一致性相關(guān)問題舉例分析”,在日常操作中,相信很多人在rabbitmq Hash沖突和一致性相關(guān)問題舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”rabbitmq Hash沖突和一致性相關(guān)問題舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

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

問題1: hash沖突的問題?

1. 背景介紹:

在數(shù)據(jù)量很大的時候,就會出現(xiàn)hash之后的數(shù)值,指向相同的位置,也就是所謂的hash沖突。這個取決于hash算法的好壞,以及數(shù)據(jù)量的大小,hash算法越差,數(shù)據(jù)量越大,hash沖突的概率就會越大。

2. 然而一旦出現(xiàn)了hash沖突,我們該怎么辦呢?

首先,我們應(yīng)該考慮能不能找一個更高級的hash算法來解決,讓hash值盡量均勻,沖突盡量的少。

其次,我們要想辦法來解決hash沖突的問題,目前最常用的解決辦法是"鏈表法",也就是說,在不同的數(shù)據(jù)hash到同一個值的時候,我們要將這些key依次放到hash對應(yīng)的value中的一個鏈表中。在hash沖突很小的時候,鏈表的訪問速度是沒有問題的。然而,一旦沖突變得很大的時候,我們就需要對鏈表進(jìn)行改造了,讓鏈表變成一個紅黑樹,進(jìn)一步減少訪問沖突的key值的數(shù)據(jù)。

問題2: hash的一致性問題?

1.背景介紹:

對于hash來說,另外一個必須要要解決的問題,就是hash的一致性問題了,它所處于的場景常常發(fā)生在我們對hash所對應(yīng)的服務(wù)器進(jìn)行擴(kuò)容或者縮減的時候,舉個例子:服務(wù)器不夠用,我們添加新的服務(wù)器的時候,或者服務(wù)器平白無辜掛掉了的時候。在這種情況下,我們又希望hash之后的key盡量少的影響數(shù)據(jù)的hash指向的服務(wù)器,于是便有了hash一致性算法。

2.解決方案:

hash一致性算法大體的意思就是:針對一個很大的數(shù)值uint32做hash,從0~2^32-1構(gòu)成一個環(huán),首先,通過hash算法將服務(wù)器的IP或者域名計算一個數(shù)值,分布在這一個環(huán)上面;然后,對于數(shù)據(jù)key采用同樣的hash算法,將value也分布到這個這個環(huán)上面,按照順時針的順序找到下一個服務(wù)器,將數(shù)據(jù)的放到這個服務(wù)器上面。

服務(wù)器數(shù)量太少導(dǎo)致的負(fù)載不均衡的情況:

上面的算法在服務(wù)器數(shù)量很大的時候,是沒有問題的,數(shù)據(jù)會均勻分布到這些服務(wù)器上面??墒牵绻?wù)器數(shù)量很少的時候,就會出現(xiàn)數(shù)據(jù)落到不同服務(wù)器上面的數(shù)據(jù)不均衡的現(xiàn)象。

為了解決這個問題,hash一致性又引入了虛擬服務(wù)器的含義,思路如下:首先將同一個服務(wù)器計算多次hash值,這樣以來這些大量的虛擬服務(wù)器會落在環(huán)上面,這個情況下的服務(wù)器分布就會均勻很多,如此以來數(shù)據(jù)的hash值就會被分配到虛擬的服務(wù)器上面,而虛擬服務(wù)器最終會指向真實(shí)的服務(wù)器。

筆者覺得,這種操作是利用了添加映射層的方式,類似于將hash值對應(yīng)一個適配的數(shù)據(jù)層,在將數(shù)據(jù)層對應(yīng)真實(shí)的數(shù)據(jù)。

問題3: hash中的長尾效應(yīng),如何處理?

1.背景介紹:

在開始之前,筆者來講下長尾效應(yīng):對于一個消息,在被一個消費(fèi)者拿走了之后,如果需要處理很長時間,才能結(jié)束,那么筆者稱這個消息的任務(wù)是一個長尾任務(wù)。長尾任務(wù)在通過hash之后,往往會導(dǎo)致有一部分服務(wù)器上面的任務(wù)都是短任務(wù),一部分服務(wù)器上的任務(wù)長尾任務(wù)很多,結(jié)果就是有些服務(wù)器會很忙。筆者將這種情況描述為長尾效應(yīng)。

對于長尾效應(yīng),筆者覺得根本原因在于消費(fèi)者處理不同任務(wù)的時間有快有慢導(dǎo)致,也就是說我們只要在hash的時候能夠識別出來那些服務(wù)器處理時間久就好了,讓那些處理比較慢的服務(wù)器分配少一點(diǎn)的任務(wù)數(shù)量。

2.解決辦法:

基于上面的思路,筆者想到了消息響應(yīng)機(jī)制,也就是說hash的時候,對服務(wù)器對應(yīng)的數(shù)據(jù)增加一個flag,讓它來記錄分配出去的key值數(shù)據(jù)有沒有被服務(wù)器處理完畢。服務(wù)器端在收到消息的任務(wù)之后,不立馬回復(fù)ack消息,等到處理完了之后,再回復(fù)ack消息,如此一來,收到ack的hash記錄會把服務(wù)器的flag設(shè)置成true。如此以來,hash之后的數(shù)據(jù),不會直接發(fā)給沒處理完的服務(wù)器。

原理類似rabbitmq里面對消費(fèi)者處理的ack響應(yīng)處理的思路,不過如此一來,再進(jìn)行hash的時候,需要根據(jù)ack的響應(yīng)這個可能會導(dǎo)致提供hash服務(wù)的進(jìn)程存在消息堆積的問題。

不過這個問題也是合理的,因?yàn)榫退憧焖俚南G給了消費(fèi)者,在消費(fèi)者很慢的時候,消息只是堆積在了消費(fèi)者而已。當(dāng)然,我們也可以模擬rabbitmq的方式,增加qos的數(shù)量設(shè)置,讓消費(fèi)者一次性消費(fèi)多個消息,如此就會緩解消息堆積在hash的那個服務(wù)上面了。

到此,關(guān)于“rabbitmq Hash沖突和一致性相關(guān)問題舉例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)站名稱:rabbitmqHash沖突和一致性相關(guān)問題舉例分析
網(wǎng)站網(wǎng)址:http://muchs.cn/article6/jejhog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、微信公眾號、做網(wǎng)站、微信小程序、用戶體驗(yàn)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司