您好,登錄后才能下訂單哦!
這篇文章主要講解了“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可以在接近數據的服務端,以并置的方式執行執行任何原生的Java、C++和.Net/C#代碼。
Ignite集群可以自我修復,故障時客戶端會自動重連,慢客戶端會被自動踢出,故障節點的數據也會被自動傳播到網格內的其他節點。
近緩存是本地客戶端側的緩存,他會存儲最近和最頻繁訪問的數據。
Ignite在內存中支持2種模式的數據緩存,堆內
和堆外
。當緩存數據占用很大的堆,超過了Java主堆空間時,堆外存儲可以克服JVM垃圾回收(gc)導致的長時間暫停,但數據仍然在內存內。
當配置為堆外存儲時,Ignite同時也會在堆外存儲查詢索引,這意味著索引不會占用任何堆內內存的空間。
如果數據變冷(不被訪問),Ignite會有選擇地將其從堆內移動到堆外,然后再從堆外移動到交換存儲(磁盤)。 當某些數據又被訪問時,他會立即被傳播到頂層,并且將其他的冷數據降到低一級的存儲層。
從1.5版本開始,Ignite引入了一個新的存儲緩存數據的概念,叫做二進制對象,他可以:
讀取一個序列化的對象的屬性而不需要將整個對象反序列化;
動態改變一個對象的結構;
動態創建一個對象的結構。
Ignite提供了一個完全符合ACID的分布式事務來保證一致性。 Ignite支持樂觀
和悲觀
的并發模型以及讀提交
、可復制讀
和序列化
的隔離級別。 Ignite的事務使用了二階段提交協議,適當地也進行了很多一階段提交的優化。
Ignite支持無死鎖的樂觀事務,他不獲得任何鎖,用戶也不用擔心鎖的順序,這樣的事務也提供了更好的性能。
Ignite的事務化EntryProcessor可以在服務端以一個事務來執行并置化的邏輯。
Ignite可以在整個集群中,在一個緩存的所有分區中執行事務。
Ignite允許開發人員定義明確的鎖來強制緩存對象的互斥。
Ignite支持使用標準的SQL語法(ANSI 99)來查詢緩存,可以使用任何的SQL函數,包括聚合和分組。
Ignite支持分布式的SQL關聯和跨緩存的關聯。
持續查詢對于當執行一個查詢后又想持續的獲得之前的查詢結果的數據更新通知時,是非常有用的。
對于SQL查詢,Ignite支持內存內的索引,因此所有的數據檢索都是非常快的。
Ignite支持完整的查詢一致性,查詢開始執行后的更新不會影響查詢的結果。
Ignite的查詢是容錯的,即查詢結果總是一致的并且不會受到集群拓撲改變的影響。
Ignite提供JDBC驅動
,可以使用標準SQL查詢和JDBC API獲得緩存內的分布式數據。
Ignite的ODBC驅動可以使用標準的SQL查詢和ODBC API來從緩存中獲得數據。
通寫模式允許更新數據庫中的數據。
通讀模式允許從數據庫中讀取數據。
Ignite提供了一個選項,通過后寫緩存來異步地執行數據庫更新。
自動化地連接底層數據庫并且生成XML的對象關系映射配置和Java領域模型POJO。
Ignite可以自動地與外部數據庫集成,包括RDBMS、NoSQL和HDFS。
Ignite數據網格能夠緩存任何支持Java Servlet3.0規范的的應用服務器的Web Session,包括Apache Tomcat,Eclipse Jetty,Oracle WebLogic以及其他。 當運行應用服務器集群時緩存Web Session對于提高Servlet容器的性能以及可擴展性是非常有用的。
Ignite可以作為Hibernate的二級緩存
(或者L2Cache),他可以顯著的提高應用中持久化層的速度。
Ignite支持基于Spring注解方式的Java方法緩存以使一個方法的執行結果可以緩存在Ignite緩存中。以后如果同一個方法通過同樣的參數集進行調用,結果會直接從緩存中獲取而不是實際執行這個方法。
Ignite.NET構建于Ignite之上,他可以執行幾乎所有的內存數據網格操作,包括ACID事務、SQL查詢、分布式關聯、消息和事件等。
Ignite.C++構建于Ignite之上,他可以執行幾乎所有的內存數據網格操作,包括SQL查詢、分布式關聯等。
Ignite可以配置為一個Java事務API(JTA)事務管理器搜索類。
Ignite提供了對OSGi的支持。
分布式計算是通過并行處理的方式來獲得更高的性能,更低的延遲以及線性可擴展性,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的JMS數據流處理器可以從JMS代理中消費消息然后將他們插入Ignite緩存。
IgniteSink是一個Flume池,他會從一個相關的Flume通道中提取事件然后將其注入Ignite緩存。
Ignite的MQTT流處理器從一個MQTT主題中消費消息,然后向Ignite緩存提供一個轉換后的鍵值對。
Ignite的Twitter流處理器從一個Twitter流API中消費消息,然后將他們注入Ignite緩存。
Ignite的Kafka數據流處理器從一個Kafka代理中的給定Kafka主題中消費消息,然后將他們插入Ignite緩存。
Ignite的Camel流處理器從一個Apache Camel消費者端點消費消息,然后將他們注入Ignite緩存。
Ignite的Storm流處理器從一個Apache Storm消費者端點消費消息,然后將他們注入Ignite緩存。
Ignite以分布式的形式支持基于java.util.concurrent
框架的大部分數據結構。比如,可以在一個節點上使用java.util.concurrent.BlockingQeque
加入一些東西,然后再另一個節點上獲取它。或者有一個分布式的ID生成器,他可以保證所有節點上的ID唯一性。
支持的數據結構包括:
Concurrent Map (Cache)
分布式隊列和集合
AtomicLong
AtomicReference
AtomicSequence (ID生成器)
CountDownLatch
ExecutorService
特性一覽
Ignite提供了一個快速的分布式阻塞隊列
和分布式集合
的實現。
隊列和集合可以以并置
或者非并置
的方式進行部署。在并置
模式中,集合中的所有元素都會駐留在同一個集群節點上。這種模式下,應該使用相對較小的集合。在非并置
模式下,集合的元素會均等地分布在集群內,這就允許在內存內保存很大的集合。
有界隊列允許用戶持有一個有預定義最大容量的隊列,這將有助于控制整個緩存的容量。
Ignite支持分布式的AtomicLong
和AtomicReference
。
Ignite的CountDownLatch可以在所有的Ignite節點上同步作業。
ID生成器是通過AtomicSequence
實現的,當以原子序列執行incrementAndGet()
(或任何其他的原子性操作)時,數據結構會保存未來值的一個范圍,這會保證跨集群內該序列實例的唯一性。
Ignite的分布式semaphore的實現和行為類似于** java.util.concurrent.Semaphore**。
Ignite提供了集群范圍的高性能的消息功能,支持基于發布-訂閱以及直接點對點通信模型的數據交換。消息可以以有序的,也可以以無序的方式進行交換。有序消息會稍微有點慢,但是如果使用的話,Ignite會保證收到消息的順序和發送消息的順序一致。 當在分布式網格環境中發生各種事件時,Ignite的分布式事件功能可以使應用收到通知。可以自動地收到集群內的本地和遠程節點上發生的任務執行、讀寫和查詢操作的通知,事件通知也可以分組在一起然后分批或者定期地發送。
特性一覽
Ignite的分布式消息可以使所有的節點基于主題進行集群范圍的通信。
Ignite的消息可以發給一組節點或者一個單獨的節點。
Ignite支持有序的以及無序的消息,有序消息要稍微慢一點,但是如果你用的話,Ignite保證收到消息的順序和發送消息的順序一致。
當集群內發生各種事件時,Ignite的分布式事件功能可以使應用收到通知。
應用可以收到集群內的本地和遠程節點上有關任務執行、讀寫和查詢操作的通知。
事件通知可以分組在一起然后分批或者定期地進行發送。
服務網格可以在集群中任意部署自定義的服務,可以實現和部署任意服務,比如自定義計數器,ID生成器,分級映射等。 服務網格的主要應用場景是提供了在集群中部署各種單例服務的能力。但是,如果需要一個服務的多實例,Ignite也能保證所有服務實例的正確部署和容錯。
特性一覽
用戶可以定義自己的服務并且Ignite會自動在集群內進行服務的分布化。比如,你可以創建自己特定的分布式計數器,或者自定義的數據加載服務,或者任何其他邏輯,然后將其部署到集群中。
Ignite允許將任意數量的服務部署到任意的網格節點,然而,最常用的特性是在集群中部署單例服務,不管是拓撲變更還是節點故障,Ignite都會維護單一性。
Ignite會保證服務的持續有效,以及按照指定的配置進行部署,不管是拓撲變更還是節點故障。
在所有的情況下,不只是單例服務部署,Ignite都會自動地確保在集群內的每個節點上部署大致數量相等的服務。當集群拓撲發生變化時,Ignite會對部署的服務進行重新評估,然后可能對已經部署的服務重新在其他節點上部署以保證更好的負載平衡。
Ignite支持與各種持久化存儲的集成,它可以連接數據庫,導入模式,配置索引類型,以及自動生成所有必要的XML OR映射配置和Java領域模型POJO,這些都可以輕易地下載和復制進自己的工程。 Ignite可以與任何支持JDBC驅動的關系數據庫集成,包括Oracle、PostgreSQL、MS SQL Server和MySQL。
通過IgniteWeb控制臺,可以自動化的進行RDBMS集成,這是一個交互式的配置向導、管理和監控工具,它可以:
為Ignite集群創建和下載各種配置;
從任何RDBMS模式自動化地構建Ignite的SQL元數據;
在內存緩存中執行SQL查詢;
查看查詢的執行計劃、內存模式以及流化圖表。
Ignite Web控制臺是一個創新工具,它提供了很多豐富的功能來管理Ignite集群,并不限于上述提到的功能。
Apache Ignite提供了一個Spark RDD抽象的實現,他允許跨越多個Spark作業時方便地在內存內共享狀態,不管是在同一個應用內部還是在不同的Spark應用之間。 IgniteRDD
作為Ignite分布式緩存的視圖,既可以在Spark作業執行進程中部署,也可以在Spark workder中部署,也可以在他自己的集群中部署。 根據預配置的部署模型,狀態共享既可以只存在于一個Spark應用的生命周期的內部(嵌入式模式
),或者也可以存在于Spark應用的外部(獨立模式
),這種模式下狀態可以在多個Spark應用之間共享。
特性一覽
IgniteRDD
是原生Spark RDD和DataFrame API的一個實現,除了所有的標準的RDD功能,還會跨越其他的Spark作業、應用和worker共享RDD的狀態。
Spark不支持SQL索引,但是Ignite可以,由于先進的內存索引功能,IgniteRDD在執行SQL查詢時比Spark原生RDD或者DataFrame有百倍的性能提升。
Ignite一個獨有的技術就是叫做Ignite文件系統(IGFS)的分布式內存文件系統,IGFS提供了和Hadoop HDFS類似的功能,但是僅僅在內存內部。事實上,除了他自己的API,IGFS實現了Hadoop的文件系統API,并且可以透明地加入Hadoop或者Spark應用。 IGFS將每個文件中的數據拆分為獨立的數據塊然后將他們存儲在分布式內存緩存中。然而和Hadoop HDFS不同,IGFS不需要一個name節點,并且用一個哈希函數自動地確定文件數據位置。 IGFS可以獨立部署,也可以部署在HDFS之上,不管是哪種情況,他對于HDFS中存儲的文件都是一個透明的緩存層。 Tachyon替代 在Spark環境中IGFS可以透明地替代Tachyon文件系統,鑒于IGFS是基于久經考驗的Ignite數據網格技術,他會比Tachyon有更好的讀和寫性能,并且更穩定。 Hadoop文件系統 如果打算使用IGFS作為Hadoop文件系統,可以參考Hadoop集成文檔,這時IGFS和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以及其他的Memcached客戶端。
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原生地繼承了Amazon AWS
、Google Compute Engine
,對于其他的云環境,Ignite集成了Apache JCloud
,他支持大多數的云供應商。 容器 Ignite可以容易地運行于容器環境,Ignite集成了Docker
,在服務器啟動之前可以自動地構建并且將用戶代碼部署進Ignite。 資源管理 Ignite原生地集成了Hadoop Yarn
和Apache Mesos
,可以將Ignite輕易地無縫部署進Hadoop和Spark環境。
特性一覽
Ignite節點會自動地感知自定義類,而不需要顯式地部署他們。
Ignite以二進制的方式存儲對象,而不需要在服務端節點上部署類。
Ignite節點之間會自動感知,這有助于必要時擴展集群,而不需要重啟整個集群,簡單地啟動新加入的節點然后他們就是自動地加入集群。
Docker
可以將Ignite及其所有的依賴打包進一個標準的映像。Docker自動下載Ignite版本映像之后,就可以將用戶的應用部署進Ignite,配置節點,他會自動啟動整個配置好的Ignite節點。
對于公有云環境,Ignite原生地繼承了Amazon AWS
、Google Compute Engine
,對于其他的云環境,Ignite集成了Apache JCloud
,他支持大多數的云供應商。
Ignite提供了Apache Mesos的原生支持,可以很容易地將Ignite部署進Mesos數據中心,比如Hadoop和Spark環境。
Ignite提供了Hadoop Yarn的原生支持,可以很容易地將Ignite部署進Hadoop和Spark環境。
感謝各位的閱讀,以上就是“Apache Ignite有哪些特性”的內容了,經過本文的學習后,相信大家對Apache Ignite有哪些特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。