亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
auto-sharding 無用論:auto-sharding vs. manual-sharding
[打印本頁]
作者:
三里屯搖滾
時間:
2012-02-21 20:12
標題:
auto-sharding 無用論:auto-sharding vs. manual-sharding
auto-sharding 無用論:auto-sharding vs. manual-sharding
auto-sharding一直是MongoDB的一項引以為豪的特性,而這一回它可以會像我們國內(nèi)的某些磚家叫獸一樣,成了理論的巨人,實踐的侏儒。下面一篇文章從各個方面對auto-shrading的可用性進行了批駁。希望能引發(fā)你一些新的思考。
原文鏈接:auto-sharding 無用論:auto-sharding vs. manual-sharding
一、美好的藍圖
剛接觸MongoDB的時候,看到它的auto-sharding功能圖,配合上replica sets簡直有一種一統(tǒng)世界的感覺。既下圖:
圖中路由機mongos可以有多臺,config機器可以多臺配置成主從或者replica sets,sharding的每個結(jié)點是三臺mongod組成的replica sets。高可用性,無限擴展性盡在眼前?此坪陚延^。
然而當我真的打算要用auto-sharding功能的時候,才發(fā)現(xiàn)此設計根本不適用,下面談一點我個人的看法。
Sharding一詞的翻譯是分片,在這里的意思是將數(shù)據(jù)進行水平切分。最簡單的例子就是我們在數(shù)據(jù)庫設計中的分庫分表,在Memcached緩存中的多結(jié)點hash存儲。而MongoDB的auto-sharding功能重在一個auto(自動化分片)。官方稱,使用這一功能,你只需要指定數(shù)據(jù)分片依賴的某個字段值,既可在不關心具體結(jié)點數(shù)量的情況下存儲你的數(shù)據(jù),數(shù)據(jù)會自動平均分配到后端結(jié)點,在增加結(jié)點時,數(shù)據(jù)又會自動的進行遷移,對整個系統(tǒng)進行負載平衡。相比我們傳統(tǒng)的分庫分表,它是auto(自動)的,而傳統(tǒng)方法是manual(手動)的。
二、Foursquare宕機事件
看罷上面的描述,好像沒有任何可以挑剔的理由,但事實并不如描繪的那樣美好,從Foursquare長達11小時的宕機事件分析中,我們可以看到如下一些問題:
auto-sharding算法導致數(shù)據(jù)分配不均:事實上數(shù)據(jù)并不會那么平均的在各個機器間平均分配,由此而造成的短板效應是無法忍受的。
數(shù)據(jù)遷移代價過大:在增加新的sharding結(jié)點時,數(shù)據(jù)確實會自動的進行遷移,而這種遷移對于原來線上服務的結(jié)點,服務上是有影響的。所以我們最好在存儲瓶頸到來很早之前就開始做這個遷移,而這樣做,和我們手動進行分片,預先估算好數(shù)據(jù)量相比,優(yōu)勢不再明顯。
數(shù)據(jù)遷移造成碎片:同樣是Foursquare的失敗經(jīng)驗,在數(shù)據(jù)遷移時,我們需要遷移的數(shù)據(jù)通常并不會在磁盤上進行連續(xù)存儲(除非你的hash條件是天然的insert時間戳)。而我們又知道MongoDB采用的是磁盤空間預分配的機制,于是在數(shù)據(jù)遷移時,可能并不會減小磁盤占用空間,反而會使得磁盤碎片化。更甚的是由于MongoDB在是采用mmap提速數(shù)據(jù)訪問,磁盤空洞并不會減小mmap的大小,反而導致內(nèi)存也碎片化。
而以上一些問題,在我們預先規(guī)劃好存儲量的manual-sharding上,是不存在的。
三、冷數(shù)據(jù)不冷
我認為在存儲規(guī)劃上,可以簡單的從兩方面來評估,一是磁盤占用,也就是總數(shù)據(jù)量,二是內(nèi)存占用,也就是熱數(shù)據(jù)量。熱數(shù)據(jù)在全部數(shù)據(jù)的中所占的比例,通常會越來越小。造成這一原因的是老數(shù)據(jù)的訪問量下降。我們考慮這樣一種情況,如果你的應用用戶量和每日新增數(shù)據(jù)量已經(jīng)相當穩(wěn)定,我們以最近三天的數(shù)據(jù)為熱數(shù)據(jù)進行評估,那么總數(shù)據(jù)量會隨著時間的增長而增長,而熱數(shù)據(jù)量永遠是三天的量。我們這里舉的是一個極端的例子,可能你的用戶量會每天增長,但是熱數(shù)據(jù)量在全部數(shù)據(jù)中占的比例,通常是越來越少的,這個事實不容反駁。
上面說了這么多,下面我們來看我們的問題。
auto-sharding數(shù)據(jù)量變化情況:和我們上面說的情況一樣,auto-sharding機群會通過增加結(jié)點數(shù)來擴展集群的存儲能力。結(jié)點數(shù)和數(shù)據(jù)量成線性的正比關系。
auto-sharding的熱數(shù)據(jù)比例:auto-sharding一旦一個結(jié)點配置完成,那么這些機器的內(nèi)存與磁盤空間比就定了。于是整個集群的熱數(shù)據(jù)比例占所有數(shù)據(jù)的比例也是一定的。
而對比我們上面的說法,熱數(shù)據(jù)占比例在所有數(shù)據(jù)中是會越來越小的。于是我們可以認為,auto-sharding中的老結(jié)點浪費掉了大量的內(nèi)存和CPU資源。
而如果我們是人為手動進行分片,我們完全可以自己控制數(shù)據(jù)的存儲,自行設定自己的LRU或者TTL機制,將老數(shù)據(jù),冷數(shù)據(jù)進行存儲轉(zhuǎn)移,不再占用高性能機器的各項機能。從而讓我們公司花大錢買來的機器能夠物盡其用。
好了,就說這一些,理解不一定正確,歡迎探討,拍磚。
作者:
小忻黑夜
時間:
2012-02-24 17:51
謝謝分享
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2