中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

rabbitmq Hash沖突和一致性相關問題舉例分析

發布時間:2021-11-19 09:22:42 來源:億速云 閱讀:271 作者:iii 欄目:大數據

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

問題1: hash沖突的問題?

1. 背景介紹:

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

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

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

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

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

1.背景介紹:

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

2.解決方案:

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

服務器數量太少導致的負載不均衡的情況:

上面的算法在服務器數量很大的時候,是沒有問題的,數據會均勻分布到這些服務器上面。可是,如果服務器數量很少的時候,就會出現數據落到不同服務器上面的數據不均衡的現象。

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

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

問題3: hash中的長尾效應,如何處理?

1.背景介紹:

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

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

2.解決辦法:

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

原理類似rabbitmq里面對消費者處理的ack響應處理的思路,不過如此一來,再進行hash的時候,需要根據ack的響應這個可能會導致提供hash服務的進程存在消息堆積的問題。

不過這個問題也是合理的,因為就算快速的消息丟給了消費者,在消費者很慢的時候,消息只是堆積在了消費者而已。當然,我們也可以模擬rabbitmq的方式,增加qos的數量設置,讓消費者一次性消費多個消息,如此就會緩解消息堆積在hash的那個服務上面了。

到此,關于“rabbitmq Hash沖突和一致性相關問題舉例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝感市| 茂名市| 平凉市| 阳东县| 南宫市| 千阳县| 奉新县| 贡觉县| 盐源县| 和林格尔县| 伊吾县| 德阳市| 集安市| 郓城县| 丹寨县| 武汉市| 甘泉县| 遂平县| 攀枝花市| 河池市| 塘沽区| 洪泽县| 芦溪县| 寻甸| 咸阳市| 花莲县| 临颍县| 姜堰市| 晋城| 翁牛特旗| 滦南县| 伊宁市| 桂平市| 平远县| 龙陵县| 涞源县| 肃南| 庆城县| 都江堰市| 华容县| 蓬安县|