咱們運營一年的Riak集羣,也由於業務變動而被停運了,可是在這運營的期間內總結了一些經驗,記錄在這。node
首先先介紹下咱們的業務場景,咱們將Riak做爲日誌存儲服務器來使用。bucket以日誌的來源加日期來表示,每一個key以來源特徵字段加毫秒數來表示。每一個kv的大小不超過2KB,峯值寫入不超過10000TPS。服務器
咱們的目標是保存一年的日誌,咱們一天產生的日誌約1G左右,一年約370G。咱們選擇的NRW參數分別爲5,3,3,也就表明着咱們將數據存5份,寫入3份就認爲成功,每次至少讀出3個節點纔算讀取成功,這樣R + W > N保持了數據一致性。也就是說每份數據在5臺服務器上佔用存儲空間,這個5臺服務器准許2臺服務器當機。網絡
好了,那讓咱們算一算咱們須要多少網絡傳輸能力。整個集羣要承擔最大10000TPS的寫入,在N等於5的時候,W等於3的時候,極端狀況下整個集羣中有3臺機器的瞬間寫入是10000TPS。當數據爲2KB的時候,表明瞬間須要產生了2KB * 10000 * 2 = 40MB/s的同步數據,2KB * 10000 = 20MB/s的寫入數據,因此網絡至少要60MB/s * 8 = 480mbps的傳輸能力。異步
咱們使用的硬件,每臺服務器配備了2塊系統盤,4塊600G的SAS數據盤組成Raid10,64G內存,1Gpbs的雙網卡和24Core的CPU。硬件上咱們已經能夠保證了網絡傳輸,和存儲的空間。若是咱們選擇5個節點,徹底能夠知足咱們的需求。若是咱們選擇5個節點以上會有什麼好處,增長了咱們允許當機的服務器數量,減小同步寫入在單臺服務器上產生高TPS的機率。根據實際測量,咱們的Riak節點單是能承受10000TPS,並且咱們的日誌並不是重要業務,因此咱們選擇了5節點。在vnode上的選擇咱們選擇的是128,每一個物理服務器承載25個vnode,至關於370GB/25 = 15GB,每一個vnode承載15GB的數據存儲,減小部分文件寫入過熱的狀況。同時選擇128節點的vnode也是便於咱們遷移到更多節點上作準備。那麼咱們爲何不選擇更高的vnode數,例如說256,若是咱們選擇256至關於每臺有51個vnode,每一個vnode承載370G/51 = 7GB,這樣雖然減少了部分文件寫入過熱的狀況,可是咱們的CPU只有24Core同時又是IO操做,咱們但願每一個IO操做都有一個異步線程可用,所以咱們選擇了128。spa