Apache Ignite(二):核心特性一覽(V1.4.0版本)

1.數據網格

Ignite內存數據網格是一個內存內的鍵值存儲,他能夠在分佈式集羣的內存內緩存數據。 它經過強語義的數據位置和關係數據路由,來下降冗餘數據的噪聲,使其能夠節點數的線性增加,直至幾百個節點。 Ignite數據網格速度足夠快,通過官方不斷的測試,目前,他是分佈式集羣中支持事務性或原子性數據的最快的實現之一。 特性一覽java

1.1.鍵值存儲

Ignite數據網格是一個內存內的鍵值存儲,能夠視爲分佈式的分區後的哈希,集羣中每一個節點都持有全部數據的一部分,這意味着集羣內節點越多,就能夠緩存越多的數據。 和其餘鍵值存儲不一樣,Ignite經過可插拔的哈選算法來決定數據的位置,每一個客戶端均可以經過插入一個自定義的哈希函數來決定一個鍵屬於那個節點,並不須要任何特殊的映射服務或者命名節點。算法

1.2.JCache(JSR107)

Ignite 100%兼容於JCache(JSR107)規範,JCache爲數據緩存提供了很是簡單,可是功能又很是強大的API。 JCache的一部分API包括:緩存

  • 基本緩存操做
  • ConcurrentMap APIs
  • 並行處理(EntryProcessor)
  • 事件和度量
  • 可插拔的持久化

1.3.分區和複製

根據配置,Ignite能夠對內存內的數據進行分區和複製,和REPLICATED模式不一樣,數據是在集羣內的全部節點中全複製的,在PARTITIONED模式中,數據是在集羣內的多個節點中平均拆分的,容許在內存內緩存TB級的數據。 Ignite也能夠配置成具備多個副本,來保證故障時的數據彈性。 無論使用那種緩存模式,Ignite都保證任何故障模式下跨全部集羣節點的數據一致性。服務器

1.4.自修復集羣

Ignite集羣能夠自我修復,故障時客戶端會自動重連,慢的客戶端會被自動踢出,故障節點的數據也會被自動傳播到網格內的其餘節點。網絡

1.5.客戶端近緩存

當數據被遠程客戶端訪問時,Ignite也支持客戶端側的近緩存,在事務模式下,近緩存中的數據仍然是事務性的,要麼是自動更新,要麼是以一直的方式更新事務提交無效。數據結構

1.6.ACID事務

Ignite支持2種模式的緩存操做,事務性和原子性,事務模式下,能夠事務性的將多個緩存操做做爲一組,而原子模式下支持多個原子操做,一次一個。原子模式更輕量一般比事務模式緩存具備更好的性能。 事務模式下Ignite支持樂觀事務和悲觀事務,使用了儘量通過一階段提交優化後的2階段提交協議。閉包

1.7.查詢和分佈式關聯

Ignite提供了很是優雅的查詢API,支持:併發

  • 基於謂詞的掃描查詢
  • SQL查詢(ANSI 99)
  • 文本查詢

對於SQL和文本查詢,Ignite提供了內存內的索引,所以全部的數據查詢都是很是快的,若是在堆外內存緩存數據,查詢索引也會在堆外內存中。 Ignite也容許用戶使用可插拔的IndexingSpi來定製本身的索引。負載均衡

1.8.持續查詢

持續查詢對於當執行一個查詢後又想持續的得到以前的查詢結果的數據更新通知時,是很是有用的。框架

1.9.堆內和堆外內存

Ignite支持2種模式緩存內存內的數據,堆內和堆外,堆外內存容許當堆太大時將數據存儲在主Java堆空間以外,來避免JVM垃圾回收時致使的暫停,可是數據仍然在內存中。 只要配置了堆外內存,Ignite同時也會在堆外存儲索引,這意味着索引不會佔用任何堆內內存空間。

1.10.分層存儲

當數據訪問率降低時,ignite會有選擇的將數據從堆內內存遷移至堆外內存,甚至從堆外內存遷移至交換(磁盤)存儲。 當這部分數據又被訪問時,他會當即被遷移到頂層,同時將其餘的訪問率低的數據遷移到更低的下一個內存層。

1.11.JDBC驅動

Ignite同時提供JDBC驅動,容許用戶使用標準SQL查詢和JDBC API得到緩存內的分佈式數據。 Ignite容許用戶使用任何標準SQL工具鏈接至Ignite而後在Ignite緩存的內存數據中開始執行SQL查詢。

1.12.Web Session集羣化

Ignite數據網格可以緩存任何支持Java Servlet3.0規範的的應用服務器的Web Session,包括Apache Tomcat,Eclipse Jetty,Oracle WebLogic以及其餘。 當運行應用服務器集羣時緩存Web Session對於提升Servlet容器的性能以及可擴展性是很是有用的。

1.13.Hibernate二級緩存

Ignite能夠做爲Hibernate的二級緩存,他能夠顯著的提升應用中持久化層的速度。

1.14.Spring緩存

Ignite支持基於Spring註解方式的Java方法緩存,這樣的話,一個方法的執行結果就能夠緩存在Ignite緩存中。之後若是同一個方法經過一樣的參數集進行調用,結果會直接從緩存中獲取而不是實際執行這個方法。

2.計算網格

分佈式計算是經過並行處理的方式來得到更高的性能,更低的延遲以及線性可擴展性,Ignite計算網格提供了一組簡單的API來容許用戶在集羣內的多臺計算機中執行分佈式計算和數據處理。 分佈式計算是基於在集羣內的節點中進行任何的計算而後將結果返回的能力。 特性一覽

2.1.分佈式閉包執行

Ignite計算網格容許對集羣內的任何閉包進行廣播和負載平衡,包括Java8 lambda,還包括純Java Runnables和Callables。

2.2.ForkJoin執行

ComputeTask是Ignite對內存內ForkJoin的抽象和範式,也是MapReduce的一個輕量級形式,純MapReduce並非爲了性能而構建,只是適用於進行離線數據的批量處理(好比Hadoop MapReduce)。 然而,對駐留在內存的數據進行計算時,實時性,低延遲和高吞吐量一般具備很高的優先級,同時,簡化API也很是重要。基於這些考慮,Ignite提供了ComputeTask API,這個就是Ignite的ForkJoin實現(輕量級MapReduce)。

2.3.集羣化 ExecutorService

Ignite提供了一個標準JDK中ExecutorService的集羣實現,他會自動地在集羣內以負載平衡的模式執行全部的計算。計算也會容錯而且只要有一個節點就能保證執行,你能夠把他視爲集羣化的分佈式的線程池。

2.4.計算和數據的並置

計算和數據的並置可使網絡中數據序列化最小化,而且能夠顯著的提升應用的性能和可擴展性。無論什麼時候,都要儘可能作好集羣節點中緩存的待處理數據和計算的並置。 Ignite根據須要,能夠提供多種方式自動或者手動地進行計算和數據的並置。

2.5.容錯

Ignite支持自動做業故障切換。若是一個節點崩潰或其餘錯誤,做業會自動轉移到其餘可用節點從新執行。可插拔的FailoverSpi負責進行執行一個故障任務時新節點的選擇。 至少一次保證:Ignite保證只要有一個節點存在,任務就不會丟失。

2.6.負載均衡

負載平衡組件負責平衡集羣內各節點的分佈式任務。Ignite中負載平衡是經過可插拔的LoadBalancingSpi實現的,它控制集羣內全部節點的負載而且確保集羣內的每一個節點的均衡負載。 對於同質化環境中的同質化任務,負載平衡是經過隨機或者循環的策略實現的。然而,在不少其餘的場景中,特別是在負荷不均衡時,他提供了不少的更復雜的自適應的負載平衡策略。

2.7.任務檢查點

檢查點是經過可插拔的CheckpointSpi實現的,他提供了一個保存做業中間狀態的功能,檢查點對於長期執行的任務須要保存一些中間狀態以防止節點故障是很是有用的。當一個故障節點重啓時,一個做業能夠載入一個保存的檢查點而後從故障處繼續執行。

2.8.做業調度

可插拔的CollisionSpi對於待執行的做業到達某個節點時如何進行調度提供了細粒度的控制。他提供了不少的策略,包括:FIFO,優先級甚至磨洋工。

3.流式計算和CEP

Ignite流式計算容許以可擴展和容錯的方式處理連續的、無止境的數據流。在一箇中等規模的集羣中,數據注入Ignite的比例會很高,很容易達到每秒百萬級的規模。 工做方式:

  1. 客戶端將流式數據注入Ignite;
  2. 數據在Ignite數據節點中自動分區;
  3. 數據在滑動窗口中併發處理;
  4. 客戶端在流式數據中執行併發SQL查詢;
  5. 客戶端訂閱數據變化的持續查詢。

特性一覽

3.1.數據流處理器

數據流處理器是由IgniteDataStreamer API定義的,他是爲了將大量的持續數據流注入Ignite流緩存而構建的。數據流處理器以可擴展和容錯的方式,爲全部數據流注入ignite提供了至少一次保證

3.2.並行處理

當你須要執行本身的業務邏輯而不只僅是添加新數據時,就須要利用StreamRecerver API的優點了。 流接收器容許直接在緩存數據的節點上以並行的方式處理數據流,在數據進入緩存以前能夠修改數據或者添加任何自定義預處理邏輯.

3.3.滑動窗口

Ignite流功能容許在數據滑動窗口內進行查詢。滑動窗口被配置爲Ignite的緩存抽取策略,能夠基於時間、基於大小或者基於批量處理,能夠配置一個緩存一個數據窗口,若是你須要同一個數據具備不一樣的滑動窗口的話,也能夠很是容易的爲同一個數據定義不止一個緩存。

3.4.滑動窗口查詢

可使用全部的Ignite數據索引功能,再加上Ignite SQL、TEXT,以及基於謂詞的緩存查詢,在數據流中進行查詢。

3.5.持續查詢

持續查詢對於當執行一個查詢後又想持續的得到以前的查詢結果的數據更新通知時,是很是有用的。

4.分佈式數據結構

Ignite以分佈式的形式支持基於java.util.concurrent框架的大部分數據結構。好比,能夠在一個節點上使用java.util.concurrent.BlockingQeque加入一些東西,而後再另外一個節點上獲取它。或者有一個分佈式的ID生成器,他能夠保證全部節點上的ID惟一性。 支持的數據結構包括:

  • Concurrent Map (Cache)
  • 分佈式隊列和集合
  • AtomicLong
  • AtomicReference
  • AtomicSequence (ID Generator)
  • CountDownLatch

特性一覽

4.1.並置和非並置

隊列和集合能夠以並置或者非並置的方式進行部署。在並置模式中,集合中的全部元素都會駐留在同一個集羣節點上。這種模式下,應該使用相對較小的集合。在非並置模式下,集合的元素會均等地分佈在集羣內,這就容許在內存內保存很大的集合。

4.2.有界隊列

有界隊列容許用戶持有一個有預約義最大容量的隊列,這將有助於控制整個緩存的容量。

4.3.基於預留的ID生成器

ID生成器是經過AtomicSequence實現的,當你以原子序列執行incrementAndGet()(或任何其餘的原子性操做)時,數據結構會保存將來值的一個範圍,這會保證跨集羣內該序列實例的惟一性。 直到全部保存的值都被使用,全部的序列增加操做都會發生在客戶端本地。

5.分佈式消息

Ignite提供了集羣範圍內的高性能的消息功能,支持基於發佈-訂閱以及直接點對點通訊模型的數據交換。消息能夠以有序的,也能夠以無序的方式進行交換。

特性一覽

5.1.有序和無序

Ignite支持有序的以及無序的消息,有序消息要稍微慢一點,可是若是你用的話,Ignite保證收到消息的順序和發送消息的順序一致。

5.2.主題和點對點

Ignite消息支持基於主題的訂閱,主題消息能夠發送給一組節點,也能夠發送給某一個節點。

6.服務網格

服務網格容許用戶在集羣中任意部署自定義的服務,好比自定義計數器,ID生成器,分級映射等。 服務網格的主要應用場景是提供了在集羣中部署各類單例服務的能力。可是,若是你須要一個服務的多實例,Ignite也能保證全部服務實例的正確部署和容錯。 特性一覽

6.1.用戶定義服務

用戶能夠定義本身的服務而且Ignite會自動在集羣內進行服務的分佈化。好比,你能夠建立本身特定的分佈式計數器,或者自定義的數據加載服務,或者任何其餘邏輯,而後將其部署到集羣中。

6.2.集羣單例

Ignite容許將任意數量的服務部署到網各節點,然而,最常常被使用的特性是在集羣中部署單例服務,不論是拓撲變動仍是節點故障,Ignite都會維護單一性。

6.3.容錯

Ignite會保證服務的持續有效,以及按照指定的配置進行部署,不論是拓撲變動仍是節點故障。

6.4.負載平衡

在全部的狀況下,不僅是單例服務部署,Ignite都會自動地確保在集羣內的每一個節點上部署大體數量相等的服務。當集羣拓撲發生變化時,Ignite會對部署的服務進行從新評估,而後可能對已經部署的服務從新在其餘節點上部署以保證更好的負載平衡。

7.Spark共享RDD

Apache Ignite提供了一個Spark RDD抽象的實現,他容許跨越多個Spark做業時方便地在內存內共享狀態,不論是在同一個應用內部仍是在不一樣的Spark應用之間。 IgniteRDD做爲Ignite分佈式緩存的視圖,既能夠在Spark做業執行進程中部署,也能夠在Spark workder中部署,也能夠在他本身的集羣中部署。 根據事先配置好的部署模型,狀態共享既能夠只存在於一個Spark應用的生命週期的內部(嵌入式模式),或者也能夠存在於Spark應用的外部(獨立模式),這種模式下狀態能夠在多個Spark應用之間共享。

特性一覽

7.1.共享Spark RDD

IgniteRDD是原生Spark RDD的一個實現,DataFrame API具備全部標準RDD的功能,而且RDD的狀態能夠在Spark做業、應用以及worker之間共享。

7.2.更快的SQL

Spark不支持SQL索引,可是Ignite能夠,因爲先進的內存索引功能,IgniteRDD在執行SQL查詢時比Spark原生RDD或者DataFrame有百倍的性能提高。

8.內存文件系統

Ignite一個獨有的技術就是分佈式內存文件系統(IGFS),IGFS提供了和Hadoop HDFS相似的功能,可是僅僅在內存內部。事實上,除了他本身的API,IGFS實現了Hadoop的文件系統API,而且能夠透明地加入Hadoop或者Spark應用。 IGFS將每一個文件中的數據拆分爲獨立的數據塊而後將他們存儲在分佈式內存緩存中。然而和Hadoop HDFS不一樣,IGFS不須要一個name節點,而且用一個哈希函數自動地肯定文件數據位置。 IGFS能夠獨立部署,也能夠部署在HDFS之上,不論是哪一種狀況,他對於HDFS中存儲的文件都是一個透明的緩存層。

特性一覽

8.1.堆內和堆外

IGFS既能夠在堆內,也能夠在堆外存儲文件,對於更大的存儲空間關鍵是利用堆外來避免長時間的JVM垃圾回收致使的暫停。

8.2.IGFS做爲Hadoop文件系統

IGFS實現了Hadoop的FileSystem API,而且能夠部署爲原生的Hadoop文件系統,就像HDFS同樣,這樣就能夠在Hadoop或者Spark環境中以即插即用的方式原生部署IGFS。

8.3.Hadoop文件系統緩存

IGFS也能夠在另外一個Hadoop文件系統上部署爲一個緩存層。這種狀況下,IGFS中的一個文件若是發生變化,更新會被自動地寫入HDFS。此外,若是讀取了一個文件而且當時他不在IGFS中,Ignite會自動地將其從HDFS載入IGFS。

8.4.Hadoop發行版

IGFS集成了一個原生的Apache Hadoop,也支持Cloudera CDH以及Hortonworks HDP。

9.內存MapReduce

Apache Ignite帶來了一個Hadoop MapReduce API的內存實現,他比原生的Hadoop MapReduce實現有了顯著的性能提高。Ignite MapReduce比Hadoop性能更好,是由於基於推的資源分配以及數據的進程內協同計算。 另外,由於IGFS不須要一個name節點,當使用IGFS時,Ignite MapReduce做業會在一個鏈路內直達IGFS數據節點。

特性一覽

9.1.原生Hadoop MapReduce

Ignite MapReduce是Hadoop MapReduce API的一個實現,他能夠原生地加入已有的Hadoop環境,而且性能有很大的提高。

9.2.Hadoop加速

Ignite提供了一個Hadoop的加速發行版,包括IGFS以及Ignite MapReduce,這個環境能夠很容易地加入已有的Hadoop環境。

10.客戶端協議

對於客戶端鏈接Ignite集羣,Ignite提供了若干種協議,包括Ignite原生客戶端,REST/HTTP,SSL/TLS,Memcached,Node.js(正在開發中)等等。 特性一覽

10.1.Ignite原生客戶端

對於客戶端遠程鏈接Ignite,原生客戶端提供了完整的功能,他容許使用完整的Ignite API,包括近緩存,事務,計算,流式處理,服務等等。

10.2.Memcached

Ignite兼容於Memcached,他容許用戶使用任何Memcached兼容客戶端在Ignite緩存中保存以及獲取分佈式數據,包括Java、PHP、Python、Ruby以及其餘的客戶端。

10.3.REST/HTTP

Ignite提供了一個HTTP REST客戶端,能夠以REST的方式經過HTTP或者HTTPS協議進行通訊。REST API能夠進行執行不少的操做,好比從緩存中讀取,實行任務,獲取各類度量等等。

10.4.SSL/TLS

Ignite容許在全部的Ignite客戶端和服務端節點之間使用SSL進行Socket通訊。

10.5.Node.js(開發中)

Ignite將來會提供Node.js客戶端,他能進行全部的緩存操做以及在Ignite中存儲的JSON數據中執行SQL查詢。

11.部署環境

Apache Ignite能夠獨立運行,在集羣中運行,在Docker容器中運行,還能夠運行在Apache Mesos以及Hadoop Yarn環境。他能夠在物理機上運行,也能夠在虛擬機上運行。

特性一覽

11.1.獨立集羣

Ignite節點之間會自動感知,這有助於集羣的可擴展性,而不須要重啓集羣,簡單地啓動新加入的節點而後他們就是自動地加入集羣。

11.2.Docker容器

Docker能夠將Ignite及其全部的依賴打包進一個標準的映像。Docker下載Ignite版本映像以後,就能夠將用戶的應用部署進Ignite,配置節點,他會自動啓動整個配置後的Ignite節點。

11.3.公共雲

對於公共雲環境,Ignite原生地集成了Amazon AWS和GCE,對於其餘的雲環境,Ignite集成了Apache JCloud,他支持大多數已有的雲服務商。

11.4.Apache Mesos

Ignite提供了Apache Mesos的原生支持,能夠很容易地將Ignite部署進Mesos數據中心,好比Hadoop和Spark環境。

11.5.Hadoop Yarn

Ignite提供了Hadoop Yarn的原生支持,能夠很容易地將Ignite部署進Hadoop和Spark環境。

相關文章
相關標籤/搜索