就開始設計各種不同效能的儲存結點(datanode)
以下是我有用到的master-slave架構
- 普通HA (HD <=> HD):
Master和Salve都是硬碟,要防止突然增加的requests, 記憶體越大越好
缺點是,硬碟IOPS低,一顆頂多4k~5k,資料庫用愈多顆作0-1RAID愈好,只是成本大,機架空間也有限,通常能撐到10k個IOPS就算不錯了。
好處是可以存很多資料,缺點是無法同時太多人使用。 - 強化index存取 (HD-SSD <=> HD-SSD):
如果要應付大量的indexes, 很少有需要用到的情境,但偏偏我們就是遇到了 XDD
Mongo自從可以使用wiretiger引擎時,就可以把index數據給切割出來放在不同的資料夾中,雖然目錄位置是固定的相對位置,但可以用ln去掛給大家用(當然獨用最好),如我們使用的index和data比幾乎1:1時,效能提升70%
缺點是,成本介於普通HA和全校能HA之間,而且SSD也不容易損壞,只是有建索引的欄位數量不會很多,這種切割法就蠻浪費的 - 效能強化HA (SSD <=> inMemory):
資料庫必定是用企業級的拉~別拿一顆幾K來比,企業級一顆就3~5萬左右(還在漲價中),但IOPS 高的嚇人,I和O也是不同線路在做處理,效能和記憶體中處理差不多,只是有點貴,所以就犧牲一點安全性,Master記得掛給in-memory mongodb,可以減少8成寫入損耗,同時效能十分優異,缺點除了安全性降低,可用空間也相當少,完全被記憶體上限給限制住。 - 效能和安全強化HA (SSD <=> SSD):
價格高昂,很適合土豪。安全性比效能強化HA強,而且可存方空間也比較多,目前只願意拿來存整個雲系統資料,而且讀多寫少,SSD可以保存很久。 - 暫存資料庫 (inMemory <=> inMemory):
很多人用redis,我個人真心覺得mongo的inMemory比較好用,而且又和mongodb的cluster相容,和一般結點一樣,根本完美,而且redis的cluster管理器還不夠成熟...
總之,要大量存取做運算,而且資料丟了也不會心痛,就可以考慮這樣的HA架構,當然別以為有HA就可以放心,有HA只是擋小災難,要相信墨菲定律。
沒有留言:
張貼留言