5分鐘理解onecache hash演算法

2021-09-19 17:52:35 字數 1578 閱讀 4740

onecahce中的hash演算法有兩種:

onecache自帶演算法

twemproxy的ketama演算法——可以實現和twemproxy的直接切換。

hash函式通過配置檔案中的root節點的hash屬性配置。如果需要用twemproxy的ketama演算法,則配置twemproxy_mode=1。

本文主要講解onecache自帶的hash演算法,twemproxy的ketama運用了一致性hash演算法,可以檢視twemproxy原始碼了解。

在onecache的自帶演算法中, onecache有乙個最大hash值,也就是配置檔案中的hash_value_max欄位,目前規定的最大上限為1024。由於onecache是集群方式管理後端redis節點,因此需要給每個group分配一定的hash範圍,比如hash_value_max為120,有3個group分別g1,g2,g3。則可以這樣配置

g1:    hash_min=0   hash_max=39

g2:    hash_min=40 hash_max=79

g3 :     hash_min=80  hash_max=119

注意不同的group的hash值不可以重疊,也不可以超過最大值,不然onecache在檢測配置檔案是否合法時會報錯。如果集群中的主機效能差異明顯,則效能好的可以多分配幾個hash值,差的則少分配幾個,類似權重。分配完成之後,在onecache內部會構建乙個陣列,乙個hash值對應乙個group。

客戶端有請求過來之後,就可以根據key計算hash值:

hashvalue = hashfun(key) % hash_value_max;

再根據hashvalue值可以在陣列中很快的定位到乙個group。如果這個時候的group裡面的所有節點都處於掛了的狀態,那也沒關係,在配置檔案中還有如下選項可以配置:

backend_retry_interva表示後端斷開後的重試連線的間隔時間

backend_retry_limit表示後端重試連線的最大次數

auto_eject_group表示是否啟用group不可用時自動移除 1=yes 0=no

group_retry_time表示group的重試時間,超過後將會自動移除

eject_after_restore表示摘除group後,如果又變為可用狀態,將會進行恢復 1=yes 0=no

也就是這個group掛了之後,如果auto_eject_group配置1,超過了group_retry_time時間group還沒有恢復,則此group會被摘除,它原有的hash值就會被其他的group均分,也就是此後本來落在這個group的key會平均分散到其他的group中。如果eject_after_restore配置了1,則這個group如果又變成了active狀態,那麼原本的hash值又還給了它,恢復正常狀態。

5分鐘理解Focal Loss與GHM

focal loss的引入主要是為了解決難易樣本數量不平衡 注意,有區別於正負樣本數量不平衡 的問題,實際可以使用的範圍非常廣泛,為了方便解釋,還是拿目標檢測的應用場景來說明 單階段的目標檢測器通常會產生高達100k的候選目標,只有極少數是正樣本,正負樣本數量非常不平衡。我們在計算分類的時候常用的損...

5分鐘理解transformer模型位置編碼

bert模型是自然語言處理方面里程碑式的進步,其核心是transformer層,而transformer採用自注意力編碼器摒棄了迴圈網路,迴圈網路天生的順序資訊在自注意力編碼器中沒有了,而語言往往是順序不同意思相差很大。所以transformer的作者設計了一種三角函式位置編碼方式,為每個不同位置的...

5分鐘弄懂Docker

儘管之前久聞docker的大名了,但是天資愚鈍,對其到底是個啥東西一直摸不清,最近花了一段時間整理了一下,算是整理出一點頭緒來。官網的介紹是這樣的 那麼應用容器長什麼樣子呢,乙個做好的應用容器長得就好像乙個裝好了一組特定應用的虛擬機器一樣。比如我現在想用mysql那我就找個裝好mysql的容器,執行...