Ignite內存數據網格是一個內存內的鍵值存儲,他能夠在分佈式集羣的內存內緩存數據。 它經過強語義的數據位置和關係數據路由,來下降冗餘數據的噪聲,使其能夠節點數的線性增加,直至幾百個節點。 Ignite數據網格速度足夠快,通過官方不斷的測試,目前,他是分佈式集羣中支持事務性或原子性數據的最快的實現之一。java
特性一覽算法
Ignite數據網格是一個內存內的鍵值存儲,能夠視爲分佈式的分區化的哈希,集羣中每一個節點都持有全部數據的一部分,這意味着集羣內節點越多,就能夠緩存越多的數據。 和其餘鍵值存儲不一樣,Ignite經過可插拔的哈選算法來決定數據的位置,每一個客戶端均可以經過插入一個自定義的哈希函數來決定一個鍵屬於那個節點,並不須要任何特殊的映射服務或者命名節點。數據庫
Ignite 100%兼容於JCache(JSR107)規範,JCache爲數據緩存提供了很是簡單,可是功能又很是強大的API。 JCache的一部分API包括:apache
根據配置,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的比例會很高,很容易達到每秒百萬級的規模。 工做方式:
滑動窗口
中併發處理;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惟一性。
支持的數據結構包括:
特性一覽
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 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環境。