1、集群和部署
-
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的原生支持,可以很容易地部署到這些環境。
2、基於內存的存儲
Ignite基於分布式的內存架構,它將內存計算的性能和擴展性,與磁盤持久化和強一致性整合到一個系統中。
- 基於內存的方式和傳統的基於磁盤的方式的主要不同是,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支持通讀和通寫模式,確保數據一致性以及兩者之間的同步。
3、固化內存
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),以及需要更多時間來對集群進行縮放,從而對數據集進行更平均的分布的場景。
4、數據可視化
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執行分布式的計算。
5、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數據節點。
6、Ignite的應用場景
-
在線場景:包括在線的RDBMS數據緩存和在線分布式計算
-
離線場景:可用於一些在線的實時/准實時數據分析業務,另外可用於數據庫存儲過程替代
-
大數據平台:Ignite可用於搭建獨立的大數據平台,用於大規模數據的注入、清洗、存儲、查詢、統計分析、出報表等全流程業務處理
-
傳統大規模業務系統的分布式架構遷移:Ignite可以傳統應用緊密整合,在不顛覆已有架構的前提下,幫助用戶進行 傳統應用的分布式架構轉型。為運行多年的復雜、運行緩慢、技術架構落后的業務系統,提供加速能力的同時,引入眾多的先進功能,大幅提升原有系統的能力