您好,登錄后才能下訂單哦!
這篇文章主要講解了“Apache Ignite核心特性有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Apache Ignite核心特性有哪些”吧!
Ignite內存數據網格是一個內存內的鍵值存儲,他可以在分布式集群的內存內緩存數據。 它通過強語義的數據位置和關系數據路由,來降低冗余數據的噪聲,使其可以節點數的線性增長,直至幾百個節點。 Ignite數據網格速度足夠快,經過官方不斷的測試,目前,他是分布式集群中支持事務性或原子性數據的最快的實現之一。 特性一覽
Ignite數據網格是一個內存內的鍵值存儲,可以視為分布式的分區后的哈希,集群中每個節點都持有所有數據的一部分,這意味著集群內節點越多,就可以緩存越多的數據。 和其他鍵值存儲不同,Ignite通過可插拔的哈選算法來決定數據的位置,每個客戶端都可以通過插入一個自定義的哈希函數來決定一個鍵屬于那個節點,并不需要任何特殊的映射服務或者命名節點。
Ignite 100%兼容于JCache(JSR107)規范,JCache為數據緩存提供了非常簡單,但是功能又非常強大的API。 JCache的一部分API包括:
基本緩存操作
ConcurrentMap APIs
并行處理(EntryProcessor)
事件和度量
可插拔的持久化
根據配置,Ignite可以對內存內的數據進行分區和復制,和REPLICATED模式不同,數據是在集群內的所有節點中全復制的,在PARTITIONED模式中,數據是在集群內的多個節點中平均拆分的,允許在內存內緩存TB級的數據。 Ignite也可以配置成具有多個副本,來保證故障時的數據彈性。 不管使用那種緩存模式,Ignite都保證任何故障模式下跨所有集群節點的數據一致性。
Ignite集群可以自我修復,故障時客戶端會自動重連,慢的客戶端會被自動踢出,故障節點的數據也會被自動傳播到網格內的其他節點。
當數據被遠程客戶端訪問時,Ignite也支持客戶端側的近緩存,在事務模式下,近緩存中的數據仍然是事務性的,要么是自動更新,要么是以一直的方式更新事務提交無效。
Ignite支持2種模式的緩存操作,事務性和原子性,事務模式下,可以事務性的將多個緩存操作作為一組,而原子模式下支持多個原子操作,一次一個。原子模式更輕量通常比事務模式緩存具有更好的性能。 事務模式下Ignite支持樂觀事務和悲觀事務,使用了盡可能經過一階段提交優化后的2階段提交協議。
Ignite提供了非常優雅的查詢API,支持:
基于謂詞的掃描查詢
SQL查詢(ANSI 99)
文本查詢
對于SQL和文本查詢,Ignite提供了內存內的索引,因此所有的數據查詢都是非常快的,如果在堆外內存緩存數據,查詢索引也會在堆外內存中。 Ignite也允許用戶使用可插拔的IndexingSpi來定制自己的索引。
持續查詢對于當執行一個查詢后又想持續的獲得之前的查詢結果的數據更新通知時,是非常有用的。
Ignite支持2種模式緩存內存內的數據,堆內和堆外,堆外內存允許當堆太大時將數據存儲在主Java堆空間之外,來避免JVM垃圾回收時導致的暫停,但是數據仍然在內存中。 只要配置了堆外內存,Ignite同時也會在堆外存儲索引,這意味著索引不會占用任何堆內內存空間。
當數據訪問率下降時,ignite會有選擇的將數據從堆內內存遷移至堆外內存,甚至從堆外內存遷移至交換(磁盤)存儲。 當這部分數據又被訪問時,他會立即被遷移到頂層,同時將其他的訪問率低的數據遷移到更低的下一個內存層。
Ignite同時提供JDBC驅動,允許用戶使用標準SQL查詢和JDBC API獲得緩存內的分布式數據。 Ignite允許用戶使用任何標準SQL工具連接至Ignite然后在Ignite緩存的內存數據中開始執行SQL查詢。
Ignite數據網格能夠緩存任何支持Java Servlet3.0規范的的應用服務器的Web Session,包括Apache Tomcat,Eclipse Jetty,Oracle WebLogic以及其他。 當運行應用服務器集群時緩存Web Session對于提高Servlet容器的性能以及可擴展性是非常有用的。
Ignite可以作為Hibernate的二級緩存,他可以顯著的提高應用中持久化層的速度。
Ignite支持基于Spring注解方式的Java方法緩存,這樣的話,一個方法的執行結果就可以緩存在Ignite緩存中。以后如果同一個方法通過同樣的參數集進行調用,結果會直接從緩存中獲取而不是實際執行這個方法。
分布式計算是通過并行處理的方式來獲得更高的性能,更低的延遲以及線性可擴展性,Ignite計算網格提供了一組簡單的API來允許用戶在集群內的多臺計算機中執行分布式計算和數據處理。 分布式計算是基于在集群內的節點中進行任何的計算然后將結果返回的能力。 特性一覽
Ignite計算網格允許對集群內的任何閉包進行廣播和負載平衡,包括Java8 lambda,還包括純Java Runnables和Callables。
ComputeTask是Ignite對內存內ForkJoin的抽象和范式,也是MapReduce的一個輕量級形式,純MapReduce并不是為了性能而構建,只是適用于進行離線數據的批量處理(比如Hadoop MapReduce)。 然而,對駐留在內存的數據進行計算時,實時性,低延遲和高吞吐量通常具有很高的優先級,同時,簡化API也非常重要。基于這些考慮,Ignite提供了ComputeTask API,這個就是Ignite的ForkJoin實現(輕量級MapReduce)。
Ignite提供了一個標準JDK中ExecutorService的集群實現,他會自動地在集群內以負載平衡的模式執行所有的計算。計算也會容錯并且只要有一個節點就能保證執行,你可以把他視為集群化的分布式的線程池。
計算和數據的并置可以使網絡中數據序列化最小化,并且可以顯著的提高應用的性能和可擴展性。不管何時,都要盡量做好集群節點中緩存的待處理數據和計算的并置。 Ignite根據需要,可以提供多種方式自動或者手動地進行計算和數據的并置。
Ignite支持自動作業故障切換。如果一個節點崩潰或其他錯誤,作業會自動轉移到其他可用節點重新執行。可插拔的FailoverSpi負責進行執行一個故障任務時新節點的選擇。 至少一次保證:Ignite保證只要有一個節點存在,任務就不會丟失。
負載平衡組件負責平衡集群內各節點的分布式任務。Ignite中負載平衡是通過可插拔的LoadBalancingSpi實現的,它控制集群內所有節點的負載并且確保集群內的每個節點的均衡負載。 對于同質化環境中的同質化任務,負載平衡是通過隨機或者循環的策略實現的。然而,在很多其他的場景中,特別是在負荷不均衡時,他提供了很多的更復雜的自適應的負載平衡策略。
檢查點是通過可插拔的CheckpointSpi實現的,他提供了一個保存作業中間狀態的功能,檢查點對于長期執行的任務需要保存一些中間狀態以防止節點故障是非常有用的。當一個故障節點重啟時,一個作業可以載入一個保存的檢查點然后從故障處繼續執行。
可插拔的CollisionSpi對于待執行的作業到達某個節點時如何進行調度提供了細粒度的控制。他提供了很多的策略,包括:FIFO,優先級甚至磨洋工。
Ignite流式計算允許以可擴展和容錯的方式處理連續的、無止境的數據流。在一個中等規模的集群中,數據注入Ignite的比例會很高,很容易達到每秒百萬級的規模。 工作方式:
客戶端將流式數據注入Ignite;
數據在Ignite數據節點中自動分區;
數據在滑動窗口中并發處理;
客戶端在流式數據中執行并發SQL查詢;
客戶端訂閱數據變化的持續查詢。
特性一覽
數據流處理器是由IgniteDataStreamer API定義的,他是為了將大量的持續數據流注入Ignite流緩存而構建的。數據流處理器以可擴展和容錯的方式,為所有數據流注入ignite提供了至少一次保證。
當你需要執行自己的業務邏輯而不僅僅是添加新數據時,就需要利用StreamRecerver API的優勢了。 流接收器允許直接在緩存數據的節點上以并行的方式處理數據流,在數據進入緩存之前可以修改數據或者添加任何自定義預處理邏輯.
Ignite流功能允許在數據滑動窗口內進行查詢。滑動窗口被配置為Ignite的緩存抽取策略,可以基于時間、基于大小或者基于批量處理,可以配置一個緩存一個數據窗口,如果你需要同一個數據具有不同的滑動窗口的話,也可以非常容易的為同一個數據定義不止一個緩存。
可以使用所有的Ignite數據索引功能,再加上Ignite SQL、TEXT,以及基于謂詞的緩存查詢,在數據流中進行查詢。
持續查詢對于當執行一個查詢后又想持續的獲得之前的查詢結果的數據更新通知時,是非常有用的。
Ignite以分布式的形式支持基于java.util.concurrent框架的大部分數據結構。比如,可以在一個節點上使用java.util.concurrent.BlockingQeque加入一些東西,然后再另一個節點上獲取它。或者有一個分布式的ID生成器,他可以保證所有節點上的ID唯一性。 支持的數據結構包括:
Concurrent Map (Cache)
分布式隊列和集合
AtomicLong
AtomicReference
AtomicSequence (ID Generator)
CountDownLatch
特性一覽
隊列和集合可以以并置或者非并置的方式進行部署。在并置模式中,集合中的所有元素都會駐留在同一個集群節點上。這種模式下,應該使用相對較小的集合。在非并置模式下,集合的元素會均等地分布在集群內,這就允許在內存內保存很大的集合。
有界隊列允許用戶持有一個有預定義最大容量的隊列,這將有助于控制整個緩存的容量。
ID生成器是通過AtomicSequence實現的,當你以原子序列執行incrementAndGet()(或任何其他的原子性操作)時,數據結構會保存未來值的一個范圍,這會保證跨集群內該序列實例的唯一性。 直到所有保存的值都被使用,所有的序列增長操作都會發生在客戶端本地。
Ignite提供了集群范圍內的高性能的消息功能,支持基于發布-訂閱以及直接點對點通信模型的數據交換。消息可以以有序的,也可以以無序的方式進行交換。
特性一覽
Ignite支持有序的以及無序的消息,有序消息要稍微慢一點,但是如果你用的話,Ignite保證收到消息的順序和發送消息的順序一致。
Ignite消息支持基于主題的訂閱,主題消息可以發送給一組節點,也可以發送給某一個節點。
服務網格允許用戶在集群中任意部署自定義的服務,比如自定義計數器,ID生成器,分級映射等。 服務網格的主要應用場景是提供了在集群中部署各種單例服務的能力。但是,如果你需要一個服務的多實例,Ignite也能保證所有服務實例的正確部署和容錯。 特性一覽
用戶可以定義自己的服務并且Ignite會自動在集群內進行服務的分布化。比如,你可以創建自己特定的分布式計數器,或者自定義的數據加載服務,或者任何其他邏輯,然后將其部署到集群中。
Ignite允許將任意數量的服務部署到網各節點,然而,最經常被使用的特性是在集群中部署單例服務,不管是拓撲變更還是節點故障,Ignite都會維護單一性。
Ignite會保證服務的持續有效,以及按照指定的配置進行部署,不管是拓撲變更還是節點故障。
在所有的情況下,不只是單例服務部署,Ignite都會自動地確保在集群內的每個節點上部署大致數量相等的服務。當集群拓撲發生變化時,Ignite會對部署的服務進行重新評估,然后可能對已經部署的服務重新在其他節點上部署以保證更好的負載平衡。
Apache Ignite提供了一個Spark RDD抽象的實現,他允許跨越多個Spark作業時方便地在內存內共享狀態,不管是在同一個應用內部還是在不同的Spark應用之間。 IgniteRDD作為Ignite分布式緩存的視圖,既可以在Spark作業執行進程中部署,也可以在Spark workder中部署,也可以在他自己的集群中部署。 根據事先配置好的部署模型,狀態共享既可以只存在于一個Spark應用的生命周期的內部(嵌入式模式),或者也可以存在于Spark應用的外部(獨立模式),這種模式下狀態可以在多個Spark應用之間共享。
特性一覽
IgniteRDD是原生Spark RDD的一個實現,DataFrame API具有所有標準RDD的功能,并且RDD的狀態可以在Spark作業、應用以及worker之間共享。
Spark不支持SQL索引,但是Ignite可以,由于先進的內存索引功能,IgniteRDD在執行SQL查詢時比Spark原生RDD或者DataFrame有百倍的性能提升。
Ignite一個獨有的技術就是分布式內存文件系統(IGFS),IGFS提供了和Hadoop HDFS類似的功能,但是僅僅在內存內部。事實上,除了他自己的API,IGFS實現了Hadoop的文件系統API,并且可以透明地加入Hadoop或者Spark應用。 IGFS將每個文件中的數據拆分為獨立的數據塊然后將他們存儲在分布式內存緩存中。然而和Hadoop HDFS不同,IGFS不需要一個name節點,并且用一個哈希函數自動地確定文件數據位置。 IGFS可以獨立部署,也可以部署在HDFS之上,不管是哪種情況,他對于HDFS中存儲的文件都是一個透明的緩存層。
特性一覽
IGFS既可以在堆內,也可以在堆外存儲文件,對于更大的存儲空間關鍵是利用堆外來避免長時間的JVM垃圾回收導致的暫停。
IGFS實現了Hadoop的FileSystem API,并且可以部署為原生的Hadoop文件系統,就像HDFS一樣,這樣就可以在Hadoop或者Spark環境中以即插即用的方式原生部署IGFS。
IGFS也可以在另一個Hadoop文件系統上部署為一個緩存層。這種情況下,IGFS中的一個文件如果發生變化,更新會被自動地寫入HDFS。此外,如果讀取了一個文件并且當時他不在IGFS中,Ignite會自動地將其從HDFS載入IGFS。
IGFS集成了一個原生的Apache Hadoop,也支持Cloudera CDH以及Hortonworks HDP。
Apache Ignite帶來了一個Hadoop MapReduce API的內存實現,他比原生的Hadoop MapReduce實現有了顯著的性能提升。Ignite MapReduce比Hadoop性能更好,是因為基于推的資源分配以及數據的進程內協同計算。 另外,因為IGFS不需要一個name節點,當使用IGFS時,Ignite MapReduce作業會在一個鏈路內直達IGFS數據節點。
特性一覽
Ignite MapReduce是Hadoop MapReduce API的一個實現,他可以原生地加入已有的Hadoop環境,并且性能有很大的提升。
Ignite提供了一個Hadoop的加速發行版,包括IGFS以及Ignite MapReduce,這個環境可以很容易地加入已有的Hadoop環境。
對于客戶端連接Ignite集群,Ignite提供了若干種協議,包括Ignite原生客戶端,REST/HTTP,SSL/TLS,Memcached,Node.js(正在開發中)等等。 特性一覽
對于客戶端遠程連接Ignite,原生客戶端提供了完整的功能,他允許使用完整的Ignite API,包括近緩存,事務,計算,流式處理,服務等等。
Ignite兼容于Memcached,他允許用戶使用任何Memcached兼容客戶端在Ignite緩存中保存以及獲取分布式數據,包括Java、PHP、Python、Ruby以及其他的客戶端。
Ignite提供了一個HTTP REST客戶端,可以以REST的方式通過HTTP或者HTTPS協議進行通信。REST API可以進行執行很多的操作,比如從緩存中讀取,實行任務,獲取各種度量等等。
Ignite允許在所有的Ignite客戶端和服務端節點之間使用SSL進行Socket通信。
Ignite未來會提供Node.js客戶端,他能進行所有的緩存操作以及在Ignite中存儲的JSON數據中執行SQL查詢。
Apache Ignite可以獨立運行,在集群中運行,在Docker容器中運行,還可以運行在Apache Mesos以及Hadoop Yarn環境。他可以在物理機上運行,也可以在虛擬機上運行。
特性一覽
Ignite節點之間會自動感知,這有助于集群的可擴展性,而不需要重啟集群,簡單地啟動新加入的節點然后他們就是自動地加入集群。
Docker可以將Ignite及其所有的依賴打包進一個標準的映像。Docker下載Ignite版本映像之后,就可以將用戶的應用部署進Ignite,配置節點,他會自動啟動整個配置后的Ignite節點。
對于公共云環境,Ignite原生地集成了Amazon AWS和GCE,對于其他的云環境,Ignite集成了Apache JCloud,他支持大多數已有的云服務商。
Ignite提供了Apache Mesos的原生支持,可以很容易地將Ignite部署進Mesos數據中心,比如Hadoop和Spark環境。
Ignite提供了Hadoop Yarn的原生支持,可以很容易地將Ignite部署進Hadoop和Spark環境。
感謝各位的閱讀,以上就是“Apache Ignite核心特性有哪些”的內容了,經過本文的學習后,相信大家對Apache Ignite核心特性有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。