引言
Druid 是一個(gè)快速别洪,近實(shí)時(shí)的查詢(xún)海量只讀數(shù)據(jù)的系統(tǒng)叨恨。Druid 的目標(biāo)是可用性要達(dá)到100%,即使在部署新代碼挖垛,或者某些節(jié)點(diǎn) down 機(jī)的情況下痒钝。
Druid 目前支持的單表查詢(xún)方式和 Dremel,PowerDrill 比較相似痢毒。它的主要特性如下:
1.支持嵌套數(shù)據(jù)的列式存儲(chǔ)
2.層級(jí)查詢(xún)
3.二級(jí)索引
4.實(shí)時(shí)數(shù)據(jù)抽取
5.分布式容錯(cuò)架構(gòu)
同 PowerDrill 和 Dremel 相比送矩,從功能的角度來(lái)說(shuō),Druid 幾乎實(shí)現(xiàn)了 Dremel 提供的所有功能闸准,并且參考了 PowerDrill 的數(shù)據(jù)存儲(chǔ)和壓縮方法益愈。
Druid非常適合需要實(shí)時(shí)從一個(gè)數(shù)據(jù)流中攝取大量數(shù)據(jù)的產(chǎn)品。特別的夷家,如果您希望零宕機(jī)蒸其,并且您的數(shù)據(jù)是時(shí)間序列數(shù)據(jù),就再適合不過(guò)了库快。如何您更需要查詢(xún)的靈活性和原始數(shù)據(jù)摸袁,那 Druid 就不是一個(gè)很好地選擇。
架構(gòu)
Druid 是由一系列不同角色的組件組成的系統(tǒng)义屏。不同的組件如下:
歷史節(jié)點(diǎn)(Historical Node):
該節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)數(shù)據(jù)和查詢(xún)靠汁。歷史節(jié)點(diǎn)從深度存儲(chǔ)中下載數(shù)據(jù)分片(segment)蜂大,并且響應(yīng)來(lái)自查詢(xún)節(jié)點(diǎn)的查詢(xún)。歷史節(jié)點(diǎn)會(huì)定期刷新本身存貯的 數(shù)據(jù)分片信息到 zookeeper蝶怔,并且通過(guò) zookeeper得到需要加載或者卸載哪些數(shù)據(jù)分片奶浦。
實(shí)時(shí)節(jié)點(diǎn)(Realtime Node):
實(shí)時(shí)節(jié)點(diǎn)負(fù)責(zé)攝取實(shí)時(shí)數(shù)據(jù)。它們負(fù)責(zé)監(jiān)聽(tīng)一個(gè)數(shù)據(jù)流踢星,并把數(shù)據(jù)發(fā)到 Druid 系統(tǒng)當(dāng)中澳叉。實(shí)時(shí)節(jié)點(diǎn)也接受來(lái)自查詢(xún)節(jié)點(diǎn)的查詢(xún),并把結(jié)果返回沐悦。實(shí)時(shí)節(jié)點(diǎn)會(huì)把歷史數(shù)據(jù)寫(xiě)到深度存儲(chǔ)中成洗。實(shí)時(shí)節(jié)點(diǎn)會(huì)查詢(xún) zookeeper,并確認(rèn)當(dāng)前存儲(chǔ)在實(shí)時(shí)節(jié)點(diǎn)的數(shù)據(jù)分片是否已經(jīng)上傳至歷史節(jié)點(diǎn)藏否。如果已經(jīng)上傳瓶殃,實(shí)時(shí)節(jié)點(diǎn)將刪除該數(shù)據(jù)分片。
協(xié)調(diào)節(jié)點(diǎn)(coordinator node):
協(xié)調(diào)節(jié)點(diǎn)會(huì)監(jiān)控所有的歷史節(jié)點(diǎn)副签,確保所有數(shù)據(jù)是可用的遥椿,多副本的。協(xié)調(diào)節(jié)點(diǎn)會(huì)從存儲(chǔ) meta data 數(shù)據(jù)源中讀取 meta data 信息淆储,去決定哪些數(shù)據(jù)分片應(yīng)該在 druid 集群當(dāng)中修壕。協(xié)調(diào)節(jié)點(diǎn)用 zookeeper 發(fā)現(xiàn)哪些歷史節(jié)點(diǎn)存在,并且通過(guò) zookeeper 去通知?dú)v史節(jié)點(diǎn)裝載和卸載相應(yīng)的數(shù)據(jù)分片遏考。
查詢(xún)節(jié)點(diǎn)(broker node):
查詢(xún)節(jié)點(diǎn)接受從客戶(hù)端來(lái)的查詢(xún),并轉(zhuǎn)發(fā)這些查詢(xún)到實(shí)時(shí)節(jié)點(diǎn)和歷史節(jié)點(diǎn)蓝谨。查詢(xún)節(jié)點(diǎn)得到分別來(lái)自實(shí)時(shí)節(jié)點(diǎn)和歷史節(jié)點(diǎn)的數(shù)據(jù)后灌具,對(duì)這些數(shù)據(jù)進(jìn)行合并,然后返回給客戶(hù)端譬巫。查詢(xún)節(jié)點(diǎn)也是利用zookeeper 去發(fā)現(xiàn)實(shí)時(shí)和歷史節(jié)點(diǎn)的存在咖楣。
這種節(jié)點(diǎn)劃分方式使得不同節(jié)點(diǎn)只需要處理好自己擅長(zhǎng)的事情。
下面是在這個(gè)架構(gòu)下地?cái)?shù)據(jù)流圖:
下面這張圖芦昔,顯示的是 Druid 集群是如何運(yùn)作管理的诱贿,顯示了節(jié)點(diǎn)之間是如何通過(guò) meta data 進(jìn)行協(xié)調(diào)運(yùn)作的
(未完待續(xù))
OneAPM Mobile Insight 以真實(shí)用戶(hù)體驗(yàn)為度量標(biāo)準(zhǔn)進(jìn)行 Crash 分析,監(jiān)控網(wǎng)絡(luò)請(qǐng)求及網(wǎng)絡(luò)錯(cuò)誤咕缎,提升用戶(hù)留存珠十。訪(fǎng)問(wèn) OneAPM 官方網(wǎng)站感受更多應(yīng)用性能優(yōu)化體驗(yàn),想閱讀更多技術(shù)文章凭豪,請(qǐng)?jiān)L問(wèn) OneAPM 官方技術(shù)博客焙蹭。