PHP 一致性雜湊演算法的一種簡單實現

來源:互聯網
上載者:User

標籤:

在分布式系統中,如果某業務可以由多個相同的節點處理,很容易想到用HASH的方式將業務請求分散到這些節點處理,比如memecache緩衝等分 布式叢集應用,如果只是簡單的使用,不涉及使用者使用者狀態等資訊,則可以直接採用模數演算法。正常情況下,模數演算法好像也不錯,但是一旦增加節點或者其中一個 節點上宕機的話,命中率將會急劇降低,所以模數演算法在這種情況下弊端很明顯,為此,在1997年由麻省理工學院提出的一種分布式雜湊(DHT)實現演算法。 具體的演算法介紹我這裡不多少了,需要瞭解的可以參見本文:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html

 

下面貼一個用PHP對其進行的簡單實現

class Hash{    //落點集合,可以緩衝起來    private $_locations = array();    //虛擬節點數量    private $virtualNodeNum = 24;    //維護的另一種節點和虛擬節點對應關係,方便刪除    private $_nodes;    //將字串轉成數字    private function _hash($str)    {        return sprintf(‘%u‘, crc32($str));    }    /**     * 尋找字串所在的機器位置     * @param $str     * @return bool|mixed     */    public function getLocation($str)    {        if(empty($this->_locations)){            return false;        }else{            $position = $this->_hash($str);            //預設取第一個節點            $node = current($this->_locations);            foreach($this->_locations as $k=>$v){                //如果當前的位置,小於或等於節點群組中的一個節點,那麼當前位置對應該節點                if($position <= $k){                    $node = $v;                    break;                }            }            return $node;        }    }    /**     * 添加一個節點     * @param $node     */    public function addNode($node)    {        //產生虛擬節點        for($i=0;$i<$this->virtualNodeNum;$i++){            $tmp = $this->_hash($node.$i);            $this->_locations[$tmp] = $node;            $this->_nodes[$node][] = $tmp;        }        //對節點排序        ksort($this->_locations,SORT_NUMERIC);    }    /**     * 刪除一個節點     * @param $node     */    public function deleteNode($node)    {        foreach($this->_nodes[$node] as $v){            unset($this->_locations[$v]);        }    }}

 

PHP 一致性雜湊演算法的一種簡單實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.