1、計算與存儲分離的架構(gòu)
隨著系統(tǒng)實時流量越來越多,之前的計算平臺mysql集群壓力越來越大聋亡,雖然可以通過增加mysql服務器來解決問題绷旗,但是基于成本考慮喜鼓,我們選擇對數(shù)據(jù)計算平臺進行重構(gòu)。計算與存儲分離衔肢,使用分布式kv集群來存儲大流量數(shù)據(jù)庄岖,slave節(jié)點計算時從kv集群抽取數(shù)據(jù)到mysql臨時表,在由mysql進行復雜查詢計算角骤。整個架構(gòu)的核心是大幅縮小計算平臺mysql集群的數(shù)據(jù)規(guī)模隅忿,從而提高計算能力和速度。同時基于kv集群存儲邦尊,可以大幅提高存儲能力背桐、降低存儲成本(相比于mysql存儲)。
2蝉揍、自研純內(nèi)存SQL計算引擎
為了進一步提高性能链峭,我們對mysql計算引擎進行改造。原先基于mysql集群進行計算需要經(jīng)過以下步驟:slave節(jié)點發(fā)起計算任務又沾、從kv集群中獲取數(shù)據(jù)分片弊仪、保存數(shù)據(jù)分片到數(shù)據(jù)庫臨時表、基于mysql執(zhí)行計算捍掺,改造后的架構(gòu)取消了mysql集群撼短,直接在slave節(jié)點發(fā)起數(shù)據(jù)查詢、數(shù)據(jù)計算任務挺勿。slave節(jié)點包括計算任務執(zhí)行器曲横、數(shù)據(jù)分片查詢器、內(nèi)存數(shù)據(jù)結(jié)構(gòu)不瓶、內(nèi)存計算引擎禾嫉、數(shù)據(jù)結(jié)果等模塊。
3蚊丐、MQ削峰以及流量控制
如果我們面對的是非實時性寫入請求的話熙参,完全可以使用MQ中間件先抗住海量請求,接著做一個中間的流量分發(fā)系統(tǒng)麦备,將流量異步分發(fā)到kv存儲中孽椰,同時這個流量系統(tǒng)還可以對高并發(fā)請求進行控制昭娩。流量控制系統(tǒng)我們主要實現(xiàn)了數(shù)據(jù)校驗、數(shù)據(jù)過濾黍匾、數(shù)據(jù)分片栏渺、數(shù)據(jù)冪等,流量控制等功能锐涯。
4磕诊、計算數(shù)據(jù)的動靜分離架構(gòu)
slave計算節(jié)點從kv集群中抽取數(shù)據(jù)進行內(nèi)存計算,為了進一步提高性能纹腌,對計算數(shù)據(jù)動靜分離霎终,靜態(tài)數(shù)據(jù)保存到本地緩存中,動態(tài)數(shù)據(jù)從kv存儲中獲取升薯。