最近在一個(gè)新的項(xiàng)目技術(shù)選型的時(shí)候看到了Ignite。Ignite作為一個(gè)高性能,分布式內(nèi)存計(jì)算和事務(wù)平臺(tái),解決了大規(guī)模、大數(shù)據(jù)量、高并發(fā)的企業(yè)級(jí)應(yīng)用的痛點(diǎn),是一個(gè)非常有潛力的技術(shù)。 Ignite對(duì)多級(jí)存儲(chǔ)的支持主要有三種模式:內(nèi)存,內(nèi)存+數(shù)據(jù)庫(kù),內(nèi)存+原生持久化。 內(nèi)存:僅使用內(nèi)存存儲(chǔ)數(shù)據(jù),為了保證數(shù)據(jù)不丟失,應(yīng)該保證數(shù)據(jù)至少有一份備份。 內(nèi)存+數(shù)據(jù)庫(kù):在數(shù)據(jù)庫(kù)上層用Ignite作為緩存,這里的數(shù)據(jù)庫(kù)可以是傳統(tǒng)的數(shù)據(jù)庫(kù),例如MySQ,Oracle等。在這里Ignite的作用類(lèi)似于我們常用的Ehcache,Guava Cache等,但是Ignite是分布式的且更加強(qiáng)大。 內(nèi)存+原生持久化:Ignite本身支持持久化,可以將數(shù)據(jù)全部持久化到磁盤(pán),同時(shí)將全部或者部分熱點(diǎn)數(shù)據(jù)加載到內(nèi)存中。 Ignite本身的持久化支持分布式,事務(wù)和SQL語(yǔ)句,具體持久化過(guò)程如下圖所示: 持久化 持久化的核心在于Write-Ahead Log (WAL),其目的在盡快將數(shù)據(jù)更新到磁盤(pán),并且保證在整個(gè)集群出現(xiàn)問(wèn)題時(shí)能夠恢復(fù)數(shù)據(jù)。 Ignite支持關(guān)系型數(shù)據(jù)庫(kù)中的SELECT, UPDATE, INSERT, DELETE操作,甚至還支持JOIN操作。上面我們說(shuō)到Ignite有三種不同模式,每種模式對(duì)SQL的支持不一樣。 分布式SQL 內(nèi)存模式:在這種模式下支持上述的各種SQL操作,且性能非常好。 內(nèi)存+原生持久化模式:這種模式下支持上述的各種SQL操作,且并不需要把全部數(shù)據(jù)加載到內(nèi)存中,Ignite的SQL引擎支持內(nèi)存和硬盤(pán)的聯(lián)合查詢。 內(nèi)存+數(shù)據(jù)庫(kù)模式:這種模式不支持Ignite和數(shù)據(jù)庫(kù)的聯(lián)合查詢,也就是說(shuō),對(duì)于一條語(yǔ)句查詢或者更新,Ignite的SQL引擎不會(huì)分別從Ignite內(nèi)存和數(shù)據(jù)庫(kù)中取出滿足條件的數(shù)據(jù)并且聚合后返回,這是目前做不到的。除非將外部數(shù)據(jù)庫(kù)的數(shù)據(jù)全部加載到Ignite中。 Ignite可以作為一個(gè)傳統(tǒng)的K-V存儲(chǔ)使用,類(lèi)似于我們之前常用的Redis,這里就不再贅述。 Key-Value存儲(chǔ) Ignite 支持分布式事務(wù),無(wú)論是做緩存還是數(shù)據(jù)持久化到硬盤(pán)都可以保證數(shù)據(jù)的一致性。 分布式事務(wù) Ignite支持多種分布式事務(wù)方式,主要有兩段式提交和三段式提交以及Ignite本身的WAL。兩段式和三段式是分布式事務(wù)常用的兩種方式,不再贅述。 這里簡(jiǎn)單說(shuō)下Ignite本身的WAL方式,WAL是Write-Ahead Log的簡(jiǎn)稱(chēng),數(shù)據(jù)在持久化到磁盤(pán)的時(shí)候會(huì)先寫(xiě)到日志文件里面,然后再更新到磁盤(pán)。這種方式只支持Ignite原生的持久化方式,如果是內(nèi)存+外部數(shù)據(jù)庫(kù)的方式,只能選擇兩段式或者三段式事務(wù)。 在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)或者非關(guān)系中數(shù)據(jù)庫(kù)中,我們通常將數(shù)據(jù)從數(shù)據(jù)庫(kù)取到客戶端應(yīng)用進(jìn)行處理,而Ignite采用了一種不同的方式,將復(fù)雜的計(jì)算或者是SQL直接放在Ignite集群的節(jié)點(diǎn)上處理,將執(zhí)行的結(jié)果返回給客戶端應(yīng)用。這樣就避免了大量的數(shù)據(jù)在網(wǎng)絡(luò)上傳輸。 Ignite集中處理 Ignite為構(gòu)建機(jī)器學(xué)習(xí)模型提供了一套簡(jiǎn)單,彈性和有效的工具集,且不需要做數(shù)據(jù)轉(zhuǎn)換。機(jī)器學(xué)習(xí)不熟悉,這里就不班門(mén)弄斧了。 Ignite支持機(jī)器學(xué)習(xí) 根據(jù)上面Ignite的特點(diǎn),Ignite適合的使用場(chǎng)景主要有幾種: Ignite可以作為應(yīng)用的緩存層甚至是直接作為數(shù)據(jù)庫(kù)使用,因?yàn)镮gnite不僅支持?jǐn)?shù)據(jù)的內(nèi)存存儲(chǔ),還支持持久化和事務(wù),甚至支持SQL查詢。如下圖所示架構(gòu): Ignite作為緩存 應(yīng)用或者是服務(wù)先將數(shù)據(jù)存儲(chǔ)到Ignite集群中,然后在根據(jù)需要持久化到磁盤(pán),寫(xiě)到其他數(shù)據(jù)庫(kù),甚至是抽取到大數(shù)據(jù)平臺(tái),在這個(gè)架構(gòu)中Ignite對(duì)上可以滿足應(yīng)用和服務(wù)的高速訪問(wèn),對(duì)下可以支持多種數(shù)據(jù)持久化存儲(chǔ)的需要。 Ignite可以作為一個(gè)高性能的數(shù)據(jù)計(jì)算中心,支持復(fù)雜的計(jì)算和分析,同時(shí)也可以作為一個(gè)數(shù)據(jù)集成總線,聚合不同來(lái)源的數(shù)據(jù),然后做分析處理。因?yàn)镮gnite是基于內(nèi)存處理的,所以處理速度會(huì)很快。 簡(jiǎn)單總結(jié)一下,Ignite以內(nèi)存為中心的架構(gòu)設(shè)計(jì)在性能方面有很強(qiáng)的表現(xiàn),可以作為緩存為應(yīng)用和服務(wù)加速,同時(shí)支持原生持久化的分布式內(nèi)存數(shù)據(jù)庫(kù)、事務(wù)和Key-Value存儲(chǔ)、分布式計(jì)算框架、易于與各種技術(shù)集成、支持機(jī)器學(xué)習(xí)等,還提供了完整的多語(yǔ)言API支持。 Ignite融合了分布式、關(guān)系型數(shù)據(jù)庫(kù)、高速緩存的特點(diǎn),對(duì)于目前的高并發(fā)、大數(shù)據(jù)量的互聯(lián)網(wǎng)級(jí)應(yīng)用提供了強(qiáng)有力的支撐,在技術(shù)選型時(shí)可以綜合考慮,采用Ignite集群來(lái)提升系統(tǒng)性能。 |
|
來(lái)自: wuhancar > 《大數(shù)據(jù)》