放翁(文初)的一畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks
           

                 集團(tuán)內(nèi)部很多團(tuán)隊都使用Memcache來提高應(yīng)用性能,最近的一次工作匯報中提及了MemcacheHash算法需要研究來滿足一些需求,同時提高Memcache的利用效率。討論了一下最后自己總結(jié)了這么幾點是對Hash算法需要著重考慮的。

          問題:

          1.       存儲數(shù)據(jù)如何均勻分散。如何把數(shù)據(jù)盡可能的散開存儲,這樣對于Memcache的可擴(kuò)展性才會有充分利用,試想如果算法每次都會把數(shù)據(jù)定向到某幾臺機(jī)器,那么就會導(dǎo)致集群機(jī)器之間利用率的不均衡,無法發(fā)揮出集群效應(yīng)。

          2.       增減機(jī)器減小對原有數(shù)據(jù)存取的影響。由于業(yè)務(wù)量的增長勢必需要對后端的服務(wù)器有所擴(kuò)容,但是增加或者減少機(jī)器如何盡可能小的影響已有的緩存數(shù)據(jù),這點直接影響業(yè)務(wù)處理以及應(yīng)用的效率。

          3.       提高Memcache效率。Memcache在壓力測試下也會暴露出對于網(wǎng)絡(luò)資源的消耗問題,畢竟也是網(wǎng)絡(luò)間的Socket數(shù)據(jù)交互。

          解決的一些思路和方法:

          1.       Consistent Hashing是一種比較好的解決思路。可以參看一下:http://tech.idv2.com/2008/07/24/memcached-004/ 其中主要兩個亮點就是稀釋節(jié)點以及環(huán)狀分區(qū)段管理。稀釋節(jié)點就是將原來的節(jié)點再復(fù)制幾十倍,使得離散度更高,數(shù)據(jù)更加分散。環(huán)狀分區(qū)段管理,就能夠?qū)?shù)據(jù)分區(qū)管理,在加入和減少節(jié)點時對數(shù)據(jù)產(chǎn)生影響最低,最好的類比就是解放前的地下工作者單線聯(lián)系,如果被捕不會涉及到所有的地下黨同志。

          2.       集群的機(jī)器使用Memcache最好結(jié)合本地Cache,這里我們自己寫了一個本地的類似于Memcache有超時時間Cache,兩者結(jié)合一起使用緩存信息,在壓力測試下提高了20%左右的性能。這里和我們的系統(tǒng)也有關(guān)系,我們對于Memcache有比較大的依賴,雖然已經(jīng)對于每一個請求處理都防止重復(fù)獲取信息,將必要信息放在線程上下文中,但是在運(yùn)行期間還是會有不少的請求。

          存儲到Memcache中的數(shù)據(jù)類型:

          1. 一次寫入多次讀,很少更新。這種數(shù)據(jù)系統(tǒng)啟動以后構(gòu)建,在非命中情況下不采用從后備數(shù)據(jù)源中獲取數(shù)據(jù)來填充Memcache。(也是提高效率,同時防止一些攻擊性的請求)

          2. 多次寫入多次讀取。這類數(shù)據(jù)往往是在運(yùn)行期被構(gòu)建,非命中下會從后備數(shù)據(jù)源中獲取,或者是某一種計算結(jié)果的緩存。

          對于第一類數(shù)據(jù)來說,增加機(jī)器需要重新構(gòu)建,如果采用分區(qū)分段,那么只需要構(gòu)建某一部分的數(shù)據(jù),或者是移動數(shù)據(jù)。對于第二類數(shù)據(jù),增加機(jī)器如果采用簡單的Hash算法也問題不大,最多存儲多份,命中率降低,但是如果采用分區(qū),也可以降低命中率下降的情況。

                 這里只是拋出問題,后續(xù)如何解決請各位看官各抒己見了。當(dāng)然這里自己也會考慮這方面的實現(xiàn)和設(shè)計。
          posted on 2008-08-14 10:36 岑文初 閱讀(3439) 評論(1)  編輯  收藏

          評論

          # re: Memcache Hash算法值得探索的內(nèi)容 2008-08-14 14:22 小高
          關(guān)注一下  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 湖南省| 延寿县| 东山县| 介休市| 延长县| 南郑县| 葵青区| 无锡市| 永善县| 彭山县| 惠来县| 湟源县| 曲周县| 如东县| 新泰市| 济源市| 南靖县| 左云县| 葵青区| 勐海县| 京山县| 东丽区| 改则县| 南召县| 额敏县| 万年县| 泽州县| 三门峡市| 瑞安市| 施甸县| 长宁区| 府谷县| 和平区| 仪征市| 井研县| 县级市| 宁河县| 邢台县| 西乌| 克什克腾旗| 定边县|