<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Apache Ignite內(nèi)存數(shù)據(jù)組織

          聯(lián)合創(chuàng)作 · 2023-10-01 12:29

          1.Ignite是什么?

          Apache Ignite是一個(gè)支持水平擴(kuò)展和容錯(cuò)的分布式內(nèi)存計(jì)算平臺(tái),面向數(shù)據(jù)密集型應(yīng)用,可以在TB級(jí)的數(shù)據(jù)上以內(nèi)存級(jí)的速度構(gòu)建實(shí)時(shí)應(yīng)用。

          1.1.Ignite定位

          Ignite是不是內(nèi)存數(shù)據(jù)庫? 

          ,雖然Ignite的固化內(nèi)存在內(nèi)存和磁盤中都工作得很好,但是磁盤持久化可以禁用從而成為一個(gè)純粹的內(nèi)存數(shù)據(jù)庫,支持SQL和分布式關(guān)聯(lián)。 

          Ignite是不是內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)?

          ,Ignite是一個(gè)全功能的分布式鍵-值數(shù)據(jù)網(wǎng)格,它既可以用于純內(nèi)存模式,也可以帶有Ignite的原生持久化,它也可以與任何第三方數(shù)據(jù)庫集成,包括RDBMS和NoSQL。 
          Ignite是不是一個(gè)分布式緩存? 

          ,如果禁用原生持久化,Ignite就是一個(gè)分布式緩存,它實(shí)現(xiàn)了JCache規(guī)范(JSR107),并且提供了比規(guī)范更多的功能,包括分區(qū)和復(fù)制分布式模式、分布式ACID事務(wù)、SQL查詢、原生持久化等等。 

          Ignite是不是分布式數(shù)據(jù)庫? 

          ,在整個(gè)集群的多個(gè)節(jié)點(diǎn)中,Ignite中的數(shù)據(jù)要么是分區(qū)模式的,要么是復(fù)制模式的,這給系統(tǒng)帶來了伸縮性,增加了彈性。Ignite可以自動(dòng)地控制數(shù)據(jù)如何分區(qū),另外,開發(fā)者也可以插入自定義(關(guān)系)函數(shù),以及為了提高效率將部分?jǐn)?shù)據(jù)并置在一起。 

          Ignite是不是關(guān)系型SQL數(shù)據(jù)庫? 

          不完整,盡管Ignite的目標(biāo)是和其他的關(guān)系型SQL數(shù)據(jù)庫具有類似的行為,但是在處理約束和索引方面還是有不同的。Ignite支持一級(jí)和二級(jí)索引,但是只有一級(jí)索引支持唯一性,Ignite還不支持外鍵約束。 

          Ignite是不是磁盤或者只有內(nèi)存的存儲(chǔ)? 

          都是,Ignite中的原生持久化是可以開關(guān)的,這使得Ignite可以持有比可用內(nèi)存量大得多的數(shù)據(jù)。尤其是,少量的操作型數(shù)據(jù)集可以只保存在內(nèi)存中,而更大的無法放在內(nèi)存中的數(shù)據(jù)集,可以放在磁盤上,將內(nèi)存作為一個(gè)緩存層,可以獲得更好的性能。 

          Ignite是不是一個(gè)NoSQL數(shù)據(jù)庫? 

          不確切,和其他的NoSQL數(shù)據(jù)庫一樣,Ignite支持高可用和水平伸縮,但是,和其它的NoSQL數(shù)據(jù)庫不同,Ignite支持跨越整個(gè)集群的ACID事務(wù)和SQL。 

          Ignite是不是事務(wù)型數(shù)據(jù)庫? 

          不完整,ACID事務(wù)是支持的,但是僅僅在鍵-值A(chǔ)PI級(jí)別,Ignite還支持跨分區(qū)的事務(wù),這意味著事務(wù)可以跨越不同服務(wù)器不同分區(qū)中的鍵。 

          在SQL層,Ignite支持原子性,還不是事務(wù)型一致性,社區(qū)計(jì)劃在未來的版本中實(shí)現(xiàn)SQL事務(wù)。 

          Ignite是不是一個(gè)多模型數(shù)據(jù)庫? 

          ,Ignite數(shù)據(jù)的建模和訪問,同時(shí)支持鍵值和SQL,另外,Ignite還為在分布式數(shù)據(jù)上的計(jì)算處理,提供了強(qiáng)大的API。 

          Ignite是不是一個(gè)鍵-值存儲(chǔ)? 

          ,Ignite提供了豐富的鍵-值A(chǔ)PI,兼容于JCache (JSR-107),并且支持Java,C++和.NET。

          2.關(guān)鍵特性

          2.1.分布式內(nèi)存級(jí)SQL數(shù)據(jù)庫


          Ignite帶來了一個(gè)兼容于ANSI-99、支持水平擴(kuò)展和容錯(cuò)的分布式SQL數(shù)據(jù)庫,根據(jù)需要,分布模式既可以是跨整個(gè)集群的分區(qū)模式,也可以是全復(fù)制模式。 

          和其它的分布式SQL數(shù)據(jù)庫不同,Ignite的持久化存儲(chǔ)將內(nèi)存和磁盤都視為有效的存儲(chǔ)層,磁盤層,即原生持久化存儲(chǔ),默認(rèn)是禁用的,這時(shí)Ignite就是一個(gè)純粹的內(nèi)存數(shù)據(jù)庫(IMjDB)。 

          和其他的SQL存儲(chǔ)一樣,也可以使用JDBC或者ODBC與Ignite進(jìn)行交互,Ignite還為Java、.NET和C++開發(fā)者提供了原生的SQL API,并且性能更好。 

          Ignite的一個(gè)顯著優(yōu)勢(shì)是,完全支持分布式SQL關(guān)聯(lián),Ignite的數(shù)據(jù)關(guān)聯(lián)支持并置模式和非并置模式。如果是并置模式,關(guān)聯(lián)是在每個(gè)節(jié)點(diǎn)的本地可用數(shù)據(jù)集上執(zhí)行,而不需要在網(wǎng)絡(luò)間移動(dòng)大量的數(shù)據(jù),在分布式數(shù)據(jù)庫中,這樣的方式提供了最好的擴(kuò)展性和性能。 

          除了標(biāo)準(zhǔn)的SQL,Ignite還提供了強(qiáng)大的處理API。

          • 鍵值A(chǔ)PI:Ignite的鍵值A(chǔ)PI可以使用戶以鍵值存儲(chǔ)的方式與Ignite交互,除了JCache規(guī)范(JSR107)支持的標(biāo)準(zhǔn)鍵值操作,Ignite還提供了分布式ACID事務(wù)、持續(xù)查詢、掃描查詢這樣的擴(kuò)展支持;

          • 并置處理:這個(gè)方式允許直接在數(shù)據(jù)所在的節(jié)點(diǎn)直接執(zhí)行分布式SQL關(guān)聯(lián)或者自定義業(yè)務(wù)邏輯,避免了昂貴的序列化和網(wǎng)絡(luò)開銷。

          2.2.鍵-值內(nèi)存數(shù)據(jù)網(wǎng)格

          Ignite提供了廣泛的鍵-值A(chǔ)PI,可以作為一個(gè)內(nèi)存數(shù)據(jù)網(wǎng)格,可以將Ignite視為一個(gè)分布式分區(qū)化的哈希映射,每個(gè)節(jié)點(diǎn)持有整個(gè)數(shù)據(jù)集的一部分,和其他的內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)不同,Ignite可以同時(shí)將數(shù)據(jù)保存在內(nèi)存和磁盤上,因此也就可以存儲(chǔ)比可用物理內(nèi)存多得多的數(shù)據(jù)。 
          目前,Ignite數(shù)據(jù)網(wǎng)格是分布式架構(gòu)支持ACID事務(wù)或者原子化數(shù)據(jù)更新最快的實(shí)現(xiàn)之一。 

          第三方數(shù)據(jù)庫 

          通過在應(yīng)用和數(shù)據(jù)庫層之間嵌入一個(gè)分布式緩存,Ignite會(huì)改進(jìn)已有第三方數(shù)據(jù)庫的性能和可擴(kuò)展性,比如RDBMS、NoSQL或者基于Hadoop的存儲(chǔ),這種做法不需要對(duì)已有的數(shù)據(jù)進(jìn)行替換,通過通讀和通寫,會(huì)保持與底層數(shù)據(jù)庫的同步,Ignite會(huì)自動(dòng)地與底層數(shù)據(jù)庫事務(wù)進(jìn)行合并,向用戶透明地提供事務(wù)保證。 

          但是,這種方法也有限制,比如,SQL和掃描查詢只能處理保存在緩存中的數(shù)據(jù),不包括外部數(shù)據(jù)庫,因?yàn)镮gnite無法索引外部數(shù)據(jù),如果希望磁盤上的數(shù)據(jù)也應(yīng)該被索引到并且可以通過SQL訪問,建議使用Ignite的原生持久化。 

          JCache API 
          Ignite的鍵-值A(chǔ)PI符合JCache規(guī)范(JSR107),支持如下功能:

          • 內(nèi)存鍵值存儲(chǔ);

          • 基本的緩存操作;

          • ConcurrentMap API;

          • 并置處理(EntryProcessor);

          • 事件和指標(biāo);

          • 可插拔的持久化。

          擴(kuò)展鍵-值A(chǔ)PI 
          除了標(biāo)準(zhǔn)的JCache API,Ignite還支持分布式的ACID事務(wù)、持續(xù)查詢、并置處理等等。 
          Ignite數(shù)據(jù)網(wǎng)格甚至可以線性地增長(zhǎng)到幾百個(gè)節(jié)點(diǎn),它通過強(qiáng)語義的數(shù)據(jù)位置和關(guān)系數(shù)據(jù)路由,來降低冗余數(shù)據(jù)噪聲。它可以被視為一個(gè)分布式分區(qū)化的哈希映射,每個(gè)節(jié)點(diǎn)可以持有整個(gè)數(shù)據(jù)集的一部分,這意味著節(jié)點(diǎn)越多,緩存的數(shù)據(jù)也可以越多。

          2.3.ACID事務(wù)

           Ignite是一個(gè)強(qiáng)一致的平臺(tái),完全支持分布式ACID事務(wù),內(nèi)存和磁盤層,都提供一樣的一致性保證。 

          Ignite的事務(wù),可以跨越多個(gè)節(jié)點(diǎn),多個(gè)緩存(或者說表)以及多個(gè)分區(qū)。對(duì)于應(yīng)用來說,樂觀鎖和悲觀鎖都是可用的,樂觀模式還支持無死鎖事務(wù),可以在業(yè)務(wù)代碼層面避免分布式死鎖。 

          二階段提交協(xié)議 
          在分布式系統(tǒng)中,事務(wù)可能跨越多個(gè)節(jié)點(diǎn),顯然,要保證所有參與節(jié)點(diǎn)的數(shù)據(jù)一致性是一個(gè)很大的挑戰(zhàn)。比如,如果一個(gè)節(jié)點(diǎn)故障,故障節(jié)點(diǎn)的事務(wù)就不能完整提交,在這類場(chǎng)景中,要保證數(shù)據(jù)一致性,一個(gè)廣泛使用的方法是二階段提交協(xié)議(2PC)。 

          Ignite帶來了二階段提交協(xié)議的最快實(shí)現(xiàn),另外,如果事務(wù)只涉及一個(gè)分區(qū)或者一個(gè)節(jié)點(diǎn),Ignite會(huì)使用一個(gè)更快的一階段提交協(xié)議。在一個(gè)事務(wù)中,如果數(shù)據(jù)發(fā)生了變化,那么在變化提交之前,Ignite會(huì)在本地事務(wù)映射中保存一個(gè)事務(wù)的狀態(tài),提交時(shí),數(shù)據(jù)會(huì)被發(fā)送到相關(guān)的遠(yuǎn)程節(jié)點(diǎn),其中只有持有相關(guān)數(shù)據(jù)主副本的節(jié)點(diǎn),才會(huì)參與事務(wù)。 

          一致性和Ignite持久化 
          如果使用了Ignite的原生持久化,那么所有的更新都會(huì)寫入預(yù)寫日志(WAL)文件中來保證一致性,即使事務(wù)執(zhí)行期間集群或者某個(gè)節(jié)點(diǎn)故障,也沒有問題。 
          WAL的目的是,以附加模式將更新傳播到磁盤,這是將數(shù)據(jù)持久化到磁盤的最快方式,如果集群或者某個(gè)節(jié)點(diǎn)故障,WAL提供了一個(gè)故障場(chǎng)景的恢復(fù)機(jī)制,集群總是可以恢復(fù)到最近成功提交的事務(wù)狀態(tài)。 

          一致性和第三方持久化 
          如果Ignite作為緩存層運(yùn)行于第三方數(shù)據(jù)庫之上,比如RDBMS,Ignite仍然會(huì)保證緩存數(shù)據(jù)和外部數(shù)據(jù)的事務(wù)一致性。比如,如果RDBMS作為持久化層,Ignite會(huì)在將提交消息發(fā)給相關(guān)的集群節(jié)點(diǎn)之前,將事務(wù)寫入數(shù)據(jù)庫,這樣的話,如果在數(shù)據(jù)庫層發(fā)生事務(wù)故障,Ignite仍然會(huì)將回滾消息發(fā)給所有的相關(guān)節(jié)點(diǎn),從而保持兩者之間的數(shù)據(jù)一致性。

          2.4.并置處理

          基于磁盤的系統(tǒng),比如RDBMS以及NoSQL,通常使用傳統(tǒng)的C/S模式,這時(shí)數(shù)據(jù)是要從服務(wù)端傳輸?shù)娇蛻舳说模诳蛻舳诉M(jìn)行處理,然后可能被丟棄。這個(gè)方法無法擴(kuò)展,因?yàn)樵诜植际较到y(tǒng)中通過網(wǎng)絡(luò)移動(dòng)大量數(shù)據(jù)是非常昂貴的操作。 

          一個(gè)擴(kuò)展性更好的方法是并置處理,它會(huì)反過來將計(jì)算帶到數(shù)據(jù)實(shí)際駐留的服務(wù)端節(jié)點(diǎn),它會(huì)在數(shù)據(jù)實(shí)際存儲(chǔ)的地方執(zhí)行高級(jí)的業(yè)務(wù)邏輯或者分布式SQL,甚至關(guān)聯(lián),避免了昂貴的序列化和網(wǎng)絡(luò)開銷。

          2.5.機(jī)器學(xué)習(xí)

          Ignite的機(jī)器學(xué)習(xí)(ML)是一套簡(jiǎn)單、可擴(kuò)展以及高效的工具,可以構(gòu)建可預(yù)測(cè)的機(jī)器學(xué)習(xí)模型,而不需要昂貴的數(shù)據(jù)傳輸。 

          將機(jī)器和深度學(xué)習(xí)加入Ignite的原理是很簡(jiǎn)單的,當(dāng)前,如果要想讓機(jī)器學(xué)習(xí)成為主流,數(shù)據(jù)科學(xué)家要解決兩個(gè)主要的問題: 

          問題#1:常規(guī)數(shù)據(jù)遷移(ETL) 
          首先,模型是在不同的系統(tǒng)中訓(xùn)練和部署(訓(xùn)練結(jié)束之后)的,數(shù)據(jù)科學(xué)家需要等待ETL或者其他的數(shù)據(jù)傳輸過程,來將數(shù)據(jù)移至比如Apache Mahout或者Apache Spark這樣的系統(tǒng)進(jìn)行訓(xùn)練,然后還要等待這個(gè)過程結(jié)束并且將模型部署到生產(chǎn)環(huán)境。在系統(tǒng)間移動(dòng)TB級(jí)的數(shù)據(jù)可能花費(fèi)數(shù)小時(shí)的時(shí)間,此外,訓(xùn)練部分通常發(fā)生在舊的數(shù)據(jù)集上。 

          問題#2:水平擴(kuò)展能力缺乏 
          第二個(gè)問題和擴(kuò)展性有關(guān)。機(jī)器學(xué)習(xí)和深度學(xué)習(xí)需要處理的數(shù)據(jù)量不斷增長(zhǎng),已經(jīng)無法放在單一的服務(wù)器上。這促使數(shù)據(jù)科學(xué)家要么提出更復(fù)雜的解決方案,要么切換到比如Spark或者TensorFlow這樣的分布式計(jì)算平臺(tái)上。但是這些平臺(tái)通常只能解決模型訓(xùn)練的一部分問題,這給開發(fā)者之后的生產(chǎn)部署帶來了很多的困難。 

          無ETL和大規(guī)模擴(kuò)展性 
          Ignite的機(jī)器學(xué)習(xí)依賴于Ignite基于內(nèi)存的存儲(chǔ),這給機(jī)器學(xué)習(xí)和深度學(xué)習(xí)任務(wù)帶來了大規(guī)模的擴(kuò)展性,并且取消了在不同系統(tǒng)間進(jìn)行ETL產(chǎn)生的等待。比如,在Ignite集群的內(nèi)存和磁盤中存儲(chǔ)的數(shù)據(jù)上,開發(fā)者可以直接進(jìn)行深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的訓(xùn)練和推理,然后,Ignite提供了一系列的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法,對(duì)Ignite的分布式并置處理進(jìn)行優(yōu)化,這樣在處理大規(guī)模的數(shù)據(jù)集或者不斷增長(zhǎng)的輸入數(shù)據(jù)流時(shí),這樣的實(shí)現(xiàn)提供了內(nèi)存級(jí)的速度和近乎無限的擴(kuò)展性,而不需要將數(shù)據(jù)移到另外的存儲(chǔ)。通過消除數(shù)據(jù)的移動(dòng)以及長(zhǎng)時(shí)間的處理等待,Ignite的機(jī)器學(xué)習(xí)可以持續(xù)地進(jìn)行學(xué)習(xí),可以在最新數(shù)據(jù)到來之時(shí)實(shí)時(shí)地對(duì)決策進(jìn)行改進(jìn)。 

          容錯(cuò)和持續(xù)學(xué)習(xí) 
          Ignite的機(jī)器學(xué)習(xí)能夠?qū)?jié)點(diǎn)的故障容錯(cuò)。這意味著如果在學(xué)習(xí)期間節(jié)點(diǎn)出現(xiàn)故障,所有的恢復(fù)過程對(duì)用戶是透明的,學(xué)習(xí)過程不會(huì)被中斷,就像所有節(jié)點(diǎn)都正常那樣獲得結(jié)果。 

          2.6.多語言支持

          Ignite是以Java語言為主進(jìn)行開發(fā)的,因此可以在JVM支持的任何操作系統(tǒng)和架構(gòu)上部署和運(yùn)行,比如,Ignite可以部署在Linux、Windows、MacOS、Oracle Solaris等操作系統(tǒng)上,支持x86、x64、SPARC、PowerPC指令集架構(gòu)。 
          Java的API支持Ignite的所有功能,使用Java或者Scala開發(fā)的應(yīng)用,相關(guān)的邏輯可以直接嵌入Ignite,然后借助于SQL以及鍵-值操作與集群進(jìn)行交互,執(zhí)行分布式計(jì)算和機(jī)器學(xué)習(xí)算法等等。 

          除了Java,Ignite還支持.NET平臺(tái),Ignite.NET和Ignite C++使用JNI,會(huì)把大部分的調(diào)用轉(zhuǎn)發(fā)給Java,這里需要注意的是,JNI的負(fù)載非常小,不會(huì)導(dǎo)致性能的下降,尤其是在分布式環(huán)境,整體的應(yīng)用性能中網(wǎng)絡(luò)是主要的開銷。 

          使用標(biāo)準(zhǔn)的JDBC或者ODBC連接,可以像其他的SQL存儲(chǔ)一樣與Ignite進(jìn)行交互。Ignite還為Java、.NET和C++開發(fā)者提供原生的SQL API,性能更好。 

          要使用其他的語言訪問Ignite,比如Python、Ruby、PHP或者NodeJS,可以考慮使用Ignite的二進(jìn)制客戶端協(xié)議,JDBC或者ODBC驅(qū)動(dòng),或者文檔中提到的其他客戶端協(xié)議。

          3.擴(kuò)展特性

          3.1.服務(wù)網(wǎng)格

           
          服務(wù)網(wǎng)格可以在集群中任意部署自定義的服務(wù),可以實(shí)現(xiàn)和部署任意服務(wù),比如自定義計(jì)數(shù)器,ID生成器,分級(jí)映射等。

          服務(wù)網(wǎng)格的主要應(yīng)用場(chǎng)景是提供了在集群中部署各種單例服務(wù)的能力。但是,如果需要一個(gè)服務(wù)的多實(shí)例,Ignite也能保證所有服務(wù)實(shí)例的正確部署和容錯(cuò)。

          3.2.數(shù)據(jù)注入和流計(jì)算


          Ignite流式計(jì)算允許以可擴(kuò)展和容錯(cuò)的方式處理連續(xù)不中斷的數(shù)據(jù)流。在一個(gè)中等規(guī)模的集群中,數(shù)據(jù)注入Ignite的比例會(huì)很高,很容易達(dá)到每秒百萬級(jí)的規(guī)模。 

          Ignite可以與主要的流處理技術(shù)和框架進(jìn)行集成,比如Kafka、Camel、Storm或者JMS,他們可以為基于Ignite的架構(gòu)帶來非常強(qiáng)大的功能。 

          數(shù)據(jù)加載 
          Ignite提供了若干種技術(shù)來對(duì)數(shù)據(jù)進(jìn)行預(yù)加載,比如,開啟原生持久化后,Ignite的流處理API就是一個(gè)好的選擇,如果使用第三方存儲(chǔ),那么使用CacheStoreAPI可以直接接入。 

          工作方式:

          1. 客戶端將流式數(shù)據(jù)注入Ignite;

          2. 數(shù)據(jù)在Ignite數(shù)據(jù)節(jié)點(diǎn)中自動(dòng)分區(qū);

          3. 數(shù)據(jù)在滑動(dòng)窗口中并發(fā)處理;

          4. 客戶端在流式數(shù)據(jù)中執(zhí)行并發(fā)SQL查詢

          5. 客戶端訂閱數(shù)據(jù)變化的持續(xù)查詢。

          3.3.RDBMS集成


          Ignite支持與各種持久化存儲(chǔ)進(jìn)行集成,它可以接入數(shù)據(jù)庫、導(dǎo)入模式、配置索引類型、以及自動(dòng)化地生成所有必要的XML OR映射配置和Java領(lǐng)域模型POJO,他們可以很容易地導(dǎo)入自己的開發(fā)工程。 

          Ignite可以與任何支持JDBC驅(qū)動(dòng)的關(guān)系型數(shù)據(jù)庫(RDBMS)進(jìn)行集成,包括Oracle, PostgreSQL, Microsoft SQL Server, 和MySQL。 

          RDBMS集成向?qū)?/strong> 
          通過Web控制臺(tái),Ignite支持自動(dòng)化的RDBMS集成,它是一個(gè)交互式的配置向?qū)?、管理和監(jiān)控工具,功能包括:

          • 創(chuàng)建和下載各種集群的配置文件;

          • 從任何RDBMS模式中自動(dòng)化地構(gòu)建Ignite的SQL元數(shù)據(jù);

          • 在內(nèi)存緩存中執(zhí)行SQL查詢;

          • 查看查詢的執(zhí)行計(jì)劃、內(nèi)存模式和流化圖表。

          這個(gè)Web控制臺(tái)是一個(gè)創(chuàng)新的工具,它提供了豐富的功能來管理集群,并不限于上述提到的這些功能。

          3.4.分布式數(shù)據(jù)結(jié)構(gòu)

          Ignite以分布式的形式支持基于java.util.concurrent框架的大部分?jǐn)?shù)據(jù)結(jié)構(gòu)。比如,可以在一個(gè)節(jié)點(diǎn)上使用java.util.concurrent.BlockingQeque加入一些東西,然后再另一個(gè)節(jié)點(diǎn)上獲取它?;蛘哂幸粋€(gè)分布式的ID生成器,他可以保證所有節(jié)點(diǎn)上的ID唯一性。 
          支持的數(shù)據(jù)結(jié)構(gòu)包括:

          • Concurrent Map (Cache)

          • 分布式隊(duì)列和集合

          • AtomicLong

          • AtomicReference

          • AtomicSequence (ID生成器)

          • CountDownLatch

          • ExecutorService

          3.5.消息和事件

          Ignite提供了集群范圍的高性能的消息功能,支持基于發(fā)布-訂閱以及直接點(diǎn)對(duì)點(diǎn)通信模型的數(shù)據(jù)交換。消息可以以有序的,也可以以無序的方式進(jìn)行交換。有序消息會(huì)稍微有點(diǎn)慢,但是如果使用的話,Ignite會(huì)保證收到消息的順序和發(fā)送消息的順序一致。 

          當(dāng)在分布式網(wǎng)格環(huán)境中發(fā)生各種事件時(shí),Ignite的分布式事件功能可以使應(yīng)用收到通知??梢宰詣?dòng)地收到集群內(nèi)的本地和遠(yuǎn)程節(jié)點(diǎn)上發(fā)生的任務(wù)執(zhí)行、讀寫和查詢操作的通知,事件通知也可以分組在一起然后分批或者定期地發(fā)送。

          4.架構(gòu)

          4.1.集群和部署

           
          Ignite集群基于無共享架構(gòu),所有的集群節(jié)點(diǎn)都是平等的,獨(dú)立的,整個(gè)集群不存在單點(diǎn)故障。 
          通過靈活的Discovery SPI組件,Ignite節(jié)點(diǎn)可以自動(dòng)地發(fā)現(xiàn)對(duì)方,因此只要需要,可以輕易地對(duì)集群進(jìn)行縮放。 

          Ignite可以獨(dú)立運(yùn)行,可以組成集群,可以運(yùn)行于Kubernetes和Docker容器中,也可以運(yùn)行在Apache Mesos以及Hadoop Yarn上,可以運(yùn)行于虛擬機(jī)和云環(huán)境,也可以運(yùn)行于物理機(jī),從技術(shù)上來說,集群部署在哪里,是沒有限制的。 

          服務(wù)端、客戶端和協(xié)議 
          Ignite中定義有兩種類型的節(jié)點(diǎn),客戶端和服務(wù)端節(jié)點(diǎn),分別有不同的用途。 
          服務(wù)端節(jié)點(diǎn)作為數(shù)據(jù)和計(jì)算的容器,一旦接入,Ignite就會(huì)作為分布式數(shù)據(jù)庫(或者叫數(shù)據(jù)網(wǎng)格)存儲(chǔ)數(shù)據(jù),然后參與查詢的處理、計(jì)算的執(zhí)行、數(shù)據(jù)流處理等等。 
          而對(duì)于客戶端節(jié)點(diǎn),提供了遠(yuǎn)程接入分布式數(shù)據(jù)庫(一組服務(wù)端節(jié)點(diǎn))的功能,Ignite的原生客戶端可以使用完整的Ignite API,包括SQL、事務(wù)、計(jì)算、數(shù)據(jù)流、服務(wù)等等。 
          除了客戶端節(jié)點(diǎn),還可以通過Ignite的二進(jìn)制客戶端協(xié)議、JDBC/ODBC驅(qū)動(dòng)、REST API接入集群。 

          公有云
          對(duì)于公共云環(huán)境,Ignite原生集成了Amazon AWS以及Google Compute Engine,對(duì)于其他的云環(huán)境,Ignite集成了JCloud,它支持了大部分的已有云服務(wù)商。 

          容器 
          Ignite完全支持容器環(huán)境,Ignite與Docker的集成可以在服務(wù)啟動(dòng)之前,自動(dòng)地將業(yè)務(wù)代碼構(gòu)建并且部署進(jìn)Ignite。 

          Ignite也可以部署在Kubernetes中,可以自動(dòng)地部署和管理容器化的應(yīng)用。 

          資源管理器 
          Ignite提供了對(duì)Hadoop Yarn,KubernetesApache Mesos的原生支持,可以很容易地部署到這些環(huán)境。

          4.2.基于內(nèi)存的存儲(chǔ)

          Ignite基于分布式的內(nèi)存架構(gòu),它將內(nèi)存計(jì)算的性能和擴(kuò)展性,與磁盤持久化和強(qiáng)一致性整合到一個(gè)系統(tǒng)中。 

          基于內(nèi)存的方式和傳統(tǒng)的基于磁盤的方式的主要不同是,Ignite將內(nèi)存視為全功能的存儲(chǔ),而不是像傳統(tǒng)大多數(shù)數(shù)據(jù)庫那樣僅僅是一個(gè)緩存層。比如,Ignite可以運(yùn)行于純內(nèi)存模式,這時(shí)它就是一個(gè)內(nèi)存數(shù)據(jù)庫(IMDB)和內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)。 

          另一方面,如果打開了持久化,Ignite就變成了一個(gè)處理是在內(nèi)存中進(jìn)行的基于內(nèi)存的系統(tǒng),但是數(shù)據(jù)和索引又持久化到磁盤上。這里與傳統(tǒng)的基于磁盤的RDBMS或NoSQL系統(tǒng)的主要區(qū)別是,Ignite支持強(qiáng)一致、水平擴(kuò)展、并且同時(shí)支持SQL和鍵-值處理API。 

          并置和C/S處理 
          基于磁盤的系統(tǒng),比如RDBMS或者NoSQL,通常采用傳統(tǒng)的C/S模式,數(shù)據(jù)需要從服務(wù)端傳輸?shù)揭幚淼目蛻舳耍ǔW罱K又被廢棄,這種方法不可擴(kuò)展,因?yàn)樵诜植际较到y(tǒng)中,通過網(wǎng)絡(luò)移動(dòng)大量數(shù)據(jù)是非常昂貴的開銷。 

          一個(gè)更有擴(kuò)展性的方式是,通過將計(jì)算放在數(shù)據(jù)實(shí)際存儲(chǔ)的服務(wù)端上,反過來實(shí)現(xiàn)并置處理,這個(gè)方法可以直接在數(shù)據(jù)實(shí)際存放的地方直接執(zhí)行業(yè)務(wù)邏輯或者分布式SQL關(guān)聯(lián),避免了昂貴的序列化和網(wǎng)絡(luò)開銷。 

          分區(qū)和復(fù)制 
          根據(jù)配置,Ignite在內(nèi)存存儲(chǔ)中,可以是分區(qū)模式,也可以是復(fù)制模式,復(fù)制模式中,數(shù)據(jù)在集群中的每個(gè)節(jié)點(diǎn)都有一份副本,而分區(qū)模式,Ignite會(huì)在多個(gè)集群節(jié)點(diǎn)上對(duì)數(shù)據(jù)進(jìn)行平均拆分,因此可以在內(nèi)存及磁盤上存儲(chǔ)TB級(jí)的數(shù)據(jù)。 

          冗余 
          Ignite可以配置多個(gè)副本,來保證故障時(shí)的數(shù)據(jù)彈性。 

          一致性 
          不管使用哪種復(fù)制方案,Ignite都會(huì)保證整個(gè)集群的數(shù)據(jù)一致性。 

          Ignite作為內(nèi)存存儲(chǔ) 
          持久化對(duì)Ignite來說是可選的,這時(shí)整個(gè)集群就會(huì)工作于純內(nèi)存模式,所有的數(shù)據(jù)和索引都會(huì)只存儲(chǔ)于內(nèi)存中,這樣會(huì)得到最高的性能,因?yàn)閿?shù)據(jù)不需要寫入磁盤。為了避免可能的節(jié)點(diǎn)故障導(dǎo)致數(shù)據(jù)丟失,建議適當(dāng)?shù)嘏渲靡恍﹤浞荩ɑ蛘呓袕?fù)制因子)。 

          Ignite持久化 
          可以有兩種方式開啟持久化,第一個(gè)方式是,使用它自己的分布式、ACID以及兼容SQL的持久化,這可以透明地與所有的內(nèi)存架構(gòu)透明且高效地集成。 

          如果開啟了原生持久化,Ignite會(huì)在磁盤上存儲(chǔ)數(shù)據(jù)的超集,然后在內(nèi)存中存儲(chǔ)盡可能多的數(shù)據(jù)。比如,一共有100條數(shù)據(jù),內(nèi)存有能力存儲(chǔ)20條,那么磁盤會(huì)存儲(chǔ)所有的100條,而為了高性能,內(nèi)存可以只緩存20條。 

          Ignite與第三方數(shù)據(jù)庫 
          第二個(gè)開啟持久化的方式,是將Ignite部署在已有的第三方數(shù)據(jù)庫之上,比如RDBMS、Apache Cassandra或者M(jìn)ongoDB。這種方式通過將部分?jǐn)?shù)據(jù)的副本放在內(nèi)存中,用于對(duì)底層數(shù)據(jù)庫進(jìn)行加速。Ignite支持通讀和通寫模式,確保數(shù)據(jù)一致性以及兩者之間的同步。

          4.3.固化內(nèi)存

          Ignite基于固化內(nèi)存架構(gòu),如果開啟了原生持久化,可以同時(shí)處理存儲(chǔ)于內(nèi)存和磁盤上的數(shù)據(jù)和索引。 

          固化內(nèi)存架構(gòu),它將內(nèi)存計(jì)算的性能和擴(kuò)展性,與磁盤持久化和強(qiáng)一致性整合到一個(gè)系統(tǒng)中。 
          Ignite固化內(nèi)存的操作方式,類似于比如Linux這樣的操作系統(tǒng)的虛擬內(nèi)存。但是兩者的顯著區(qū)別是,如果開啟了持久化存儲(chǔ),除了將整個(gè)或者部分?jǐn)?shù)據(jù)保存在內(nèi)存中,還會(huì)將整個(gè)數(shù)據(jù)集加上索引放在磁盤上,而虛擬內(nèi)存只是在內(nèi)存用盡時(shí)才使用磁盤,磁盤只是用于交換用途。 

          Ignite原生持久化 
          Ignite原生持久化是數(shù)據(jù)持久化的一個(gè)非常靈活、可擴(kuò)展以及方便的方式,它廣泛應(yīng)用于應(yīng)用需要一個(gè)分布式內(nèi)存數(shù)據(jù)庫的場(chǎng)景中。 

          Ignite的原生持久化是一個(gè)分布式的、ACID、兼容SQL的磁盤存儲(chǔ),它可以與Ignite的固化內(nèi)存無縫地集成,Ignite原生持久化是可選的,可以打開和關(guān)閉,如果關(guān)閉,Ignite就是一個(gè)純內(nèi)存存儲(chǔ)。 

          下面是Ignite作為一個(gè)平臺(tái),如果固化內(nèi)存和原生持久化同時(shí)使用的優(yōu)勢(shì)和特點(diǎn): 
          內(nèi)存

          • 堆外內(nèi)存

          • 避免明顯的GC暫停

          • 自動(dòng)碎片整理

          • 可預(yù)測(cè)的內(nèi)存消耗

          • 高SQL性能

          磁盤

          • 可選的持久化

          • 支持閃存、SSD以及Intel的3D Xpoint

          • 存儲(chǔ)數(shù)據(jù)的超集

          • 全事務(wù)化(預(yù)寫日志W(wǎng)AL)

          • 集群瞬時(shí)啟動(dòng)

          第三方持久化 
          Ignite可以用于已有第三方數(shù)據(jù)庫的緩存層,包括RDBMS、NoSQL或者HDFS。該方式用于對(duì)保存數(shù)據(jù)的底層數(shù)據(jù)庫進(jìn)行加速,Ignite將數(shù)據(jù)保存在內(nèi)存中,在多個(gè)節(jié)點(diǎn)中進(jìn)行分布,提供了更快的數(shù)據(jù)訪問,它減少了應(yīng)用和數(shù)據(jù)庫之間因?yàn)閿?shù)據(jù)移動(dòng)導(dǎo)致的網(wǎng)絡(luò)負(fù)載。但是與原生持久化相比,是有很多限制的,比如,SQL查詢只能在內(nèi)存中保存的數(shù)據(jù)上執(zhí)行,因此,首先需要將數(shù)據(jù)預(yù)先從磁盤加載到內(nèi)存中。 

          交換空間 
          如果不希望使用原生持久化或者第三方持久化,還可以開啟交換,這時(shí),如果內(nèi)存過載,內(nèi)存中的數(shù)據(jù)會(huì)被移動(dòng)到磁盤上的交換空間中,如果開啟了交換空間,Ignite將數(shù)據(jù)存儲(chǔ)于內(nèi)存映射文件(MMF)中,根據(jù)當(dāng)前的內(nèi)存使用量,操作系統(tǒng)會(huì)將MMF的內(nèi)容交換到磁盤。交換空間通常用于避免由于內(nèi)存過載導(dǎo)致的內(nèi)存溢出錯(cuò)誤(OOME),以及需要更多時(shí)間來對(duì)集群進(jìn)行縮放,從而對(duì)數(shù)據(jù)集進(jìn)行更平均的分布的場(chǎng)景。

          5.數(shù)據(jù)可視化

          Ignite可以與很多數(shù)據(jù)可視化工具集成,通過圖表或者豐富的圖形,協(xié)助對(duì)存儲(chǔ)在分布式緩存中的數(shù)據(jù)進(jìn)行分析和解釋,甚至提供可操作的建議。 
          IgniteWeb控制臺(tái) 

          Ignite的Web控制臺(tái)是一個(gè)基于Web的交互式管理工具, 功能包括:

          • 創(chuàng)建、下載Ignite的各種配置;

          • 從RDBMS中自動(dòng)加載SQL元數(shù)據(jù);

          • 接入Ignite集群然后執(zhí)行SQL;

          • 管理和監(jiān)控Ignite節(jié)點(diǎn)和緩存;

          • 查看堆、CPU以及其它有用的節(jié)點(diǎn)和緩存的指標(biāo);

          Tableau 

          Tableau是一個(gè)聚焦于商業(yè)智能的交互式數(shù)據(jù)可視化工具,通過Ignite的ODBC驅(qū)動(dòng),Tableau就可以接入Ignite集群,功能包括:

          • 查詢集群中存儲(chǔ)的分布式數(shù)據(jù);

          • 緩存數(shù)據(jù)的表格或者圖形展示;

          • 使用Tableau支持的各種方式對(duì)數(shù)據(jù)進(jìn)行分析;

          Zeppelin 

          Apache Zeppelin是一個(gè)基于Web的記事本,可以交互式地對(duì)數(shù)據(jù)進(jìn)行分析,通過Ignite的JDBC驅(qū)動(dòng),Zeppelin就可以接入集群,功能包括:

           - 通過Ignite的SQL解釋器獲取分布式數(shù)據(jù);
          - 緩存數(shù)據(jù)的表格或者圖形展示;
          - 通過Scala執(zhí)行分布式的計(jì)算。

          6.Ignite & Spark

          6.1.Spark共享內(nèi)存層


          Ignite共享RDD 
          Apache Ignite提供了一個(gè)Spark RDD抽象的實(shí)現(xiàn),他允許跨越多個(gè)Spark作業(yè)時(shí)方便地在內(nèi)存內(nèi)共享狀態(tài),在不同的Spark作業(yè)、worker或者應(yīng)用之間,IgniteRDD為內(nèi)存中的相同數(shù)據(jù)提供了一個(gè)共享、可變的視圖,原生的SparkRDD無法在多個(gè)Spark作業(yè)或者應(yīng)用之間進(jìn)行共享。 
          IgniteRDD作為Ignite分布式緩存的視圖,既可以在Spark作業(yè)執(zhí)行進(jìn)程中部署,也可以在Spark worker中部署,也可以在它自己的集群中部署。根據(jù)預(yù)配置的部署模型,狀態(tài)共享既可以只存在于一個(gè)Spark應(yīng)用的生命周期的內(nèi)部(嵌入式模式),或者也可以存在于Spark應(yīng)用的外部(獨(dú)立模式)。 

          雖然SparkSQL支持豐富的SQL語法,但是它沒有實(shí)現(xiàn)索引。這樣即使在一個(gè)不太大的數(shù)據(jù)集上執(zhí)行查詢,也可能花費(fèi)比較長(zhǎng)的時(shí)間,因?yàn)樾枰獙?duì)數(shù)據(jù)進(jìn)行全部掃描。如果使用Ignite,開發(fā)者可以配置一級(jí)和二級(jí)索引,帶來上千倍的性能提升。 
          Ignite DataFrames 
          Spark的DataFrame API引入了模式的概念來描述數(shù)據(jù),這樣Spark就可以以表格的形式管理模式和組織數(shù)據(jù)。簡(jiǎn)而言之,DataFrame就是組織成命名列的分布式數(shù)據(jù)集合。它從概念上來說,等價(jià)于關(guān)系數(shù)據(jù)庫的表,會(huì)促使Spark執(zhí)行查詢優(yōu)化器,產(chǎn)生比RDD更高效的執(zhí)行計(jì)劃,而RDD僅僅是集群中的一個(gè)分區(qū)化的元素集合。 

          Ignite擴(kuò)展了DataFrame,如果將Ignite作為Spark的內(nèi)存層,會(huì)簡(jiǎn)化開發(fā)以及提高性能,好處包括:

          • 通過向Ignite讀寫DataFrames,可以在Spark作業(yè)之間共享數(shù)據(jù)和狀態(tài);

          • 通過高級(jí)的索引以及避免數(shù)據(jù)在網(wǎng)絡(luò)中的移動(dòng),優(yōu)化Spark的查詢執(zhí)行計(jì)劃,使Spark查詢速度更快。

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码翔田千里 | 日韩国产精品毛片 | 日韩av在线看 | 女人久久久久 | 人妻夜夜|