一、集羣和部署html
-
Ignite集羣基於無共享架構,全部的集羣節點都是平等的,獨立的,整個集羣不存在單點故障。數據庫
-
經過靈活的Discovery SPI組件,Ignite節點能夠自動地發現對方,所以只要須要,能夠輕易地對集羣進行縮放。(與哪套集羣相似呢? ES)緩存
-
Ignite能夠獨立運行,能夠組成集羣,能夠運行於Kubernetes和Docker容器中,也能夠運行在Apache Mesos以及Hadoop Yarn上,能夠運行於虛擬機和雲環境,也能夠運行於物理機,從技術上來講,集羣部署在哪裏,是沒有限制的。服務器
- Apache Ignite具備一個可選的服務概念,並提供了兩種類型的節點:客戶端和服務器節點:
- Server 包含數據、緩存、計算和流,而且能夠是內存中的Map-Reduce任務的一部分。
- Client 提供遠程鏈接服務器以將元素放入/獲取到緩存的能力。它還能夠存儲部分數據(近緩存),這是一個較小的本地緩存,存儲最近和最頻繁訪問的數據。
- 除了客戶端節點,還能夠經過Ignite的二進制客戶端協議、JDBC/ODBC驅動、REST API接入集羣。
容器:網絡
-
Ignite徹底支持容器環境,Ignite與Docker的集成能夠在服務啓動以前,自動地將業務代碼構建而且部署進Ignite。架構
-
Ignite也能夠部署在Kubernetes中,能夠自動地部署和管理容器化的應用。分佈式
資源管理器:函數
- Ignite提供了對Hadoop Yarn,Kubernetes和Apache Mesos的原生支持,能夠很容易地部署到這些環境。
二、基於內存的存儲工具
Ignite基於分佈式的內存架構,它將內存計算的性能和擴展性,與磁盤持久化和強一致性整合到一個系統中。oop
- 基於內存的方式和傳統的基於磁盤的方式的主要不一樣是,Ignite將內存視爲全功能的存儲,而不是像傳統大多數數據庫那樣僅僅是一個緩存層。好比,Ignite能夠運行於純內存模式,這時它就是一個內存數據庫(IMDB)和內存數據網格(IMDG)。
- 另外一方面,若是打開了持久化,Ignite就變成了一個處理是在內存中進行的基於內存的系統,可是數據和索引又持久化到磁盤上。這裏與傳統的基於磁盤的RDBMS或NoSQL系統的主要區別是,Ignite支持強一致、水平擴展、而且同時支持SQL和鍵-值處理API。
並置和C/S處理
- 基於磁盤的系統,好比RDBMS或者NoSQL,一般採用傳統的C/S模式,數據須要從服務端傳輸到要處理的客戶端,一般最終又被廢棄,這種方法不可擴展,由於在分佈式系統中,經過網絡移動大量數據是很是昂貴的開銷。
- 一個更有擴展性的方式是,經過將計算放在數據實際存儲的服務端上,反過來實現並置處理,這個方法能夠直接在數據實際存放的地方直接執行業務邏輯或者分佈式SQL關聯,避免了昂貴的序列化和網絡開銷。
分區和複製
- 根據配置,Ignite在內存存儲中,能夠是分區模式,也能夠是複製模式,
- 複製模式中,數據在集羣中的每一個節點都有一份副本,
- 而分區模式,Ignite會在多個集羣節點上對數據進行平均拆分,所以能夠在內存及磁盤上存儲TB級的數據。
冗餘
- Ignite能夠配置多個副本,來保證故障時的數據彈性。
一致性
- 無論使用哪一種複製方案,Ignite都會保證整個集羣的數據一致性。
Ignite做爲內存存儲
- 持久化對Ignite來講是可選的,這時整個集羣就會工做於純內存模式,全部的數據和索引都會只存儲於內存中,這樣會獲得最高的性能,由於數據不須要寫入磁盤。爲了不可能的節點故障致使數據丟失,建議適當地配置一些備份(或者叫複製因子)。
Ignite持久化
- 能夠有兩種方式開啓持久化,第一個方式是,使用它本身的分佈式、ACID以及兼容SQL的持久化,這能夠透明地與全部的內存架構透明且高效地集成。
- 若是開啓了原生持久化,Ignite會在磁盤上存儲數據的超集,而後在內存中存儲儘量多的數據。好比,一共有100條數據,內存有能力存儲20條,那麼磁盤會存儲全部的100條,而爲了高性能,內存能夠只緩存20條。
Ignite與第三方數據庫
- 第二個開啓持久化的方式,是將Ignite部署在已有的第三方數據庫之上,好比RDBMS、Apache Cassandra或者MongoDB。這種方式經過將部分數據的副本放在內存中,用於對底層數據庫進行加速。Ignite支持通讀和通寫模式,確保數據一致性以及二者之間的同步。
三、固化內存
Ignite基於固化內存架構,若是開啓了原生持久化,能夠同時處理存儲於內存和磁盤上的數據和索引。
- 固化內存架構,它將內存計算的性能和擴展性,與磁盤持久化和強一致性整合到一個系統中。
- Ignite固化內存的操做方式,相似於好比Linux這樣的操做系統的虛擬內存。可是二者的顯著區別是,若是開啓了持久化存儲,除了將整個或者部分數據保存在內存中,還會將整個數據集加上索引放在磁盤上,而虛擬內存只是在內存用盡時才使用磁盤,磁盤只是用於交換用途。
Ignite原生持久化
Ignite原生持久化是數據持久化的一個很是靈活、可擴展以及方便的方式,它普遍應用於應用須要一個分佈式內存數據庫的場景中。
Ignite的原生持久化是一個分佈式的、ACID、兼容SQL的磁盤存儲,它能夠與Ignite的固化內存無縫地集成,Ignite原生持久化是可選的,能夠打開和關閉,若是關閉,Ignite就是一個純內存存儲。
Ignite做爲一個平臺,若是固化內存和原生持久化同時使用的優點和特色:
固化內存
- 堆外內存
- 避免明顯的GC暫停
- 自動碎片整理
- 可預測的內存消耗
- 高SQL性能
磁盤
- 可選的持久化
- 支持閃存、SSD以及Intel的3D Xpoint
- 存儲數據的超集
- 全事務化(預寫日誌WAL)
- 集羣瞬時啓動
第三方持久化
- Ignite能夠用於已有第三方數據庫的緩存層,包括RDBMS、NoSQL或者HDFS。
- 該方式用於對保存數據的底層數據庫進行加速,Ignite將數據保存在內存中,在多個節點中進行分佈,提供了更快的數據訪問,它減小了應用和數據庫之間由於數據移動致使的網絡負載。
- 可是與原生持久化相比,是有不少限制的,好比,SQL查詢只能在內存中保存的數據上執行,所以,首先須要將數據預先從磁盤加載到內存中。
交換空間
- 若是不但願使用原生持久化或者第三方持久化,還能夠開啓交換,這時,若是內存過載,內存中的數據會被移動到磁盤上的交換空間中,
- 若是開啓了交換空間,Ignite將數據存儲於內存映射文件(MMF)中,根據當前的內存使用過量,操做系統會將MMF的內容交換到磁盤。交換空間一般用於避免因爲內存過載致使的內存溢出錯誤(OOME),以及須要更多時間來對集羣進行縮放,從而對數據集進行更平均的分佈的場景。
四、數據可視化
Ignite能夠與不少數據可視化工具集成,經過圖表或者豐富的圖形,協助對存儲在分佈式緩存中的數據進行分析和解釋,甚至提供可操做的建議。
IgniteWeb控制檯:Ignite的Web控制檯是一個基於Web的交互式管理工具, 功能包括:
- 建立、下載Ignite的各類配置;
-
從RDBMS中自動加載SQL元數據;
-
接入Ignite集羣而後執行SQL;
-
管理和監控Ignite節點和緩存;
-
查看堆、CPU以及其它有用的節點和緩存的指標;
Tableau:Tableau是一個聚焦於商業智能的交互式數據可視化工具,經過Ignite的ODBC驅動,Tableau就能夠接入Ignite集羣,功能包括:
-
查詢集羣中存儲的分佈式數據;
-
緩存數據的表格或者圖形展現;
-
使用Tableau支持的各類方式對數據進行分析;
Zeppelin:Apache Zeppelin是一個基於Web的記事本,能夠交互式地對數據進行分析,經過Ignite的JDBC驅動,Zeppelin就能夠接入集羣,功能包括:
- 經過Ignite的SQL解釋器獲取分佈式數據;
- 緩存數據的表格或者圖形展現;
- 經過Scala執行分佈式的計算。
五、Hadoop & Spark
5.1 Spark共享內存層
Apache Ignite提供了一個Spark RDD抽象的實現,他容許跨越多個Spark做業時方便地在內存內共享狀態,在不一樣的Spark做業、worker或者應用之間,IgniteRDD爲內存中的相同數據提供了一個共享、可變的視圖,原生的SparkRDD沒法在多個Spark做業或者應用之間進行共享。
-
IgniteRDD做爲Ignite分佈式緩存的視圖,既能夠在Spark做業執行進程中部署,也能夠在Spark worker中部署,也能夠在它本身的集羣中部署。
-
根據預配置的部署模型,狀態共享既能夠只存在於一個Spark應用的生命週期的內部(嵌入式模式),或者也能夠存在於Spark應用的外部(獨立模式)。
-
雖然SparkSQL支持豐富的SQL語法,可是它沒有實現索引。這樣即便在一個不太大的數據集上執行查詢,也可能花費比較長的時間,由於須要對數據進行所有掃描。若是使用Ignite,開發者能夠配置一級和二級索引,帶來上千倍的性能提高。
Ignite DataFrames:
Spark的DataFrame API引入了模式的概念來描述數據,這樣Spark就能夠以表格的形式管理模式和組織數據。簡而言之,DataFrame就是組織成命名列的分佈式數據集合。它從概念上來講,等價於關係數據庫的表,會促使Spark執行查詢優化器,產生比RDD更高效的執行計劃,而RDD僅僅是集羣中的一個分區化的元素集合。Ignite擴展了DataFrame,若是將Ignite做爲Spark的內存層,會簡化開發以及提升性能,好處包括:
- 經過向Ignite讀寫DataFrames,能夠在Spark做業之間共享數據和狀態;
-
經過高級的索引以及避免數據在網絡中的移動,優化Spark的查詢執行計劃,使Spark查詢速度更快;
5.2 內存文件系統
Ignite一個獨有的技術就是叫作Ignite文件系統(IGFS)的分佈式內存文件系統,IGFS提供了和Hadoop HDFS相似的功能,可是僅僅在內存內部。事實上,除了他本身的API,IGFS實現了Hadoop的文件系統API,而且能夠透明地加入Hadoop或者Spark應用。
-
IGFS將每一個文件中的數據拆分爲獨立的數據塊而後將他們存儲在分佈式內存緩存中。然而和Hadoop HDFS不一樣,IGFS不須要一個name節點,而且用一個哈希函數自動地肯定文件數據位置。
-
IGFS能夠獨立部署,也能夠部署在HDFS之上,不論是哪一種狀況,他對於HDFS中存儲的文件都是一個透明的緩存層。
-
IGFS能夠與原生的Apache Hadoop發行版集成,也能夠與Cloudera CDH、Hortonworks HDP集成。
Tachyon替代
在Spark環境中IGFS能夠透明地替代Spark環境中的Tachyon文件系統,鑑於IGFS是基於久經考驗的Ignite數據網格技術,他會比Tachyon有更好的讀和寫性能,而且更穩定。
Hadoop文件系統
若是打算使用IGFS做爲Hadoop文件系統,能夠參考Hadoop集成文檔,這時IGFS和HDFS並無什麼不一樣。
5.3 內存MapReduce
Apache Ignite帶來了一個Hadoop MapReduce API的內存實現,他比原生的Hadoop MapReduce實現有了顯著的性能提高。Ignite MapReduce比Hadoop性能更好,是由於基於推的資源分配以及進程內的計算和數據的並置。
- 由於IGFS不須要一個name節點,當使用IGFS時,Ignite MapReduce做業會在一個鏈路內直達IGFS數據節點。
六、Ignite的應用場景
-
在線場景:包括在線的RDBMS數據緩存和在線分佈式計算
-
離線場景:可用於一些在線的實時/準實時數據分析業務,另外可用於數據庫存儲過程替代
-
大數據平臺:Ignite可用於搭建獨立的大數據平臺,用於大規模數據的注入、清洗、存儲、查詢、統計分析、出報表等全流程業務處理
-
傳統大規模業務系統的分佈式架構遷移:Ignite能夠傳統應用緊密整合,在不顛覆已有架構的前提下,幫助用戶進行 傳統應用的分佈式架構轉型。爲運行多年的複雜、運行緩慢、技術架構落後的業務系統,提供加速能力的同時,引入衆多的先進功能,大幅提高原有系統的能力