Apache Ignite(一):簡介以及和Coherence、Gemfire、Redis等的比較

1.Ignite簡介

Apache Ignite 內存數據組織框架是一個高性能、集成化和分佈式的內存計算和事務平臺,用於大規模的數據集處理,比傳統的基於磁盤或閃存的技術具備更高的性能,同時他還爲應用和不一樣的數據源之間提供高性能、分佈式內存中數據組織管理的功能。數據庫

2.Ignite歷史

Ignite來源於尼基塔·伊萬諾夫於2007年建立的GridGain系統公司開發的GridGain軟件,尼基塔領導公司開發了領先的分佈式內存片內數據處理技術-領先的Java內存片內計算平臺,今天在全世界每10秒它就會啓動運行一次。他有超過20年的軟件應用開發經驗,建立了HPC和中間件平臺,並在一些創業公司和知名企業都作出過貢獻,包括Adaptec, Visa和BEA Systems。尼基塔也是使用Java技術做爲服務器端開發應用的先驅者,1996年他在爲歐洲大型系統作集成工做時他就進行了相關實踐。
2014年3月,GridGain公司將該軟件90%以上的功能和代碼開源,僅在商業版中保留了高端企業級功能,如安全性,數據中心複製,先進的管理和監控等。2015年1月,GridGain經過Apache 2.0許可進入Apache的孵化器進行孵化,很快就於8月25日畢業而且成爲Apache的頂級項目,9月28日即發佈了1.4.0版,2016年1月初發布了1.5.0版,應該說發展、迭代速度很是快。該技術相關資料較少,但確是一個頗有潛力的技術,解決了大規模、大數據量、高併發企業級或者互聯網應用面臨的若干痛點。緩存

3.Ignite和Hadoop以及Spark的關係

Ignite和Hadoop解決的是不一樣的問題,即便在必定程度上可能應用了相似的底層基礎技術。Ignite是一種多用途,和OLAP/ OLTP內存中數據結構相關的,而Hadoop僅僅是Ignite原生支持(和加速)的諸多數據來源之一。
Spark是一個和Ignite相似的項目。可是Spark聚焦於OLAP,而Ignite憑藉強大的事務處理能力在混合型的OLTP/ OLAP場景中表現更好。特別是針對Hadoop,Ignite將爲現有的Map/Reduce,Pig或Hive做業提供即插即用式的加速,避免了推倒重來的作法,而Spark須要先作數據ETL,更適合新寫的分析應用。安全

4.和相似技術的比較

在Ignite之前,大規模、大數據量、高併發企業級或者互聯網應用爲了解決數據緩存、下降數據庫負載、提升查詢性能等突出問題,不少採用了Hazelcast或者Oracle Coherence或者GemFire(好比12306網站)或者目前應用愈來愈普遍的Redis等緩存技術,本文對這些相關的技術作了簡單的比較,基本內容來源於其官方網站,進行了翻譯整理,方便更多的人瞭解他。服務器

4.1.Ignite和Hazelcast

Apache Ignite和Hazelcast都提供了富數據網格的特性,解決了可擴展的分佈式集羣環境下在內存中對數據進行緩存和分區的問題。
Ignite和Hazelcast在緩存的方式上是有不少不一樣的,同時支持事務和數據的查詢,下面的表格列出了一些主要的不一樣點,這些都是咱們在選擇內存數據網格產品時須要特別關注的。網絡

序號 對比項目 Apache ignite Hazelcast
1 聚焦於開源 Ignite還在不斷增長和加強開源版本的功能集,最新的主版本還增長了對C++以及.Net/C#的支持,和Node.js的集成也會很快到來,並且還增長了更快的無死鎖事務。 Hazelcast的開發聚焦於收費的企業版中,好比堆外存儲以及持續查詢等的特性只在收費版中才提供,SSL加密的功能已經從開源版中刪除,只在收費版中提供。
2 JCache(JSR107) Ignite徹底兼容JCache (JSR 107)緩存規範 Hazelcast徹底兼容JCache (JSR 107)緩存規範
3 堆外存儲 Ignite根據用戶配置支持將數據存儲在堆內或者堆外 Hazelcast僅在商業版中提供堆外存儲的功能
4 堆外索引 只要配置了堆外存儲,Ignite就會在堆外存儲索引(爲了避免影響使用堆內內存的用戶應用。) 不支持
5 持續查詢 Ignite支持容錯的持續查詢,即容許客戶端和服務器端訂閱數據變化的持續通知 Hazelcast僅在商業(收費)版中提供持續查詢的功能。
6 SSL加密 Ignite支持SSL/TLS加密,即容許全部的客戶端和服務端經過加密的SSL或者TLS協議進行通訊。 Hazelcast將SSL加密支持從開源版中刪除,目前僅在商業(收費)版中支持該功能。
7 SQL查詢 Ignite支持完整的SQL(ANSI-99)語法以查詢內存中的數據 Hazelcast僅對SQL提供有限的支持(只有幾個關鍵字)
8 關聯查詢 Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,好比:select * from A a, B b where a.b_id = b.id Hazelcast不支持任何的關聯查詢,無論用不用SQL,若是須要,開發者須要手工處理多個查詢的結果。
9 查詢一致性 Ignite提供完整的查詢一致性,即查詢是在一個特定的快照中執行的,查詢開始以後的數據更新不影響查詢的結果。 Hazelcast查詢是不一致的,可能查詢結果的一部分將看到某些更新,而另外一部分則不會。
10 查詢容錯 Ignite查詢是容錯的,即查詢結果始終是一致的不會受到集羣拓撲發生變化的影響,好比節點的加入,退出或崩潰。 Hazelcast查詢是不容錯的,即查詢結果在集羣拓撲發生變化時不一致,而數據正在後臺從新平衡。
11 數據一致性 Ignite支持內存中數據的原子的和事務的一致性,無論數據存儲在分區或者複製緩存中。 Hazelcast僅在分區緩存中支持原子的和事務的一致性,而存儲在複製緩存中的數據沒有任何事務一致性的保證。
12 無死鎖事務 Ignite支持無死鎖樂觀事務,他不會得到任何鎖,用戶也不用再擔憂鎖順序,這樣的事務同時還提供了更好的性能。 Hazelcast中必須注意按順序地更新數據以免死鎖,這每每是不可能的,尤爲是在大項目中。
13 事務化EntryProcessor Ignite支持事務化EntryProcessor,他能夠在服務端在一個事務中執行並置的業務代碼。 在Hazelcast中沒法使用EntryProcessor或者在一個事務中執行業務代碼。
14 Web會話集羣化 Ignite爲全部已知的應用服務器提供Web會話的緩存和集羣化支持。 Hazelcast僅在商業(收費)版中提供Web會話集羣化支持。
15 計算網格 Ignite提供集羣內的MapReduce、ForkJoin和基本的分佈式lambda處理,包括做業的負載平衡,容錯,檢查點,計劃任務等。 Hazelcast僅支持MapReduce和集羣內的分佈式隨機做業。
16 流式數據 Ignite支持內存內的流處理,包括對流式數據的滑動窗口的查詢和維護支持。 Hazelcast不對流處理提供任何的支持。
17 服務網格 Ignite可使用戶方便地將其服務集羣化,包括支持各類集羣單例。 Hazelcast管理的服務不提供單例集羣的功能。
18 .Net/C#支持 Ignite爲.NET/C#用戶提供了完整的內存組織API,包括執行C#閉包,C#緩存,事務以及查詢API,原生C# CacheStore API等功能。 Hazelcast只爲.NET/C#提供了有限的客戶端API。
19 C++支持 Ignite爲C++用戶提供了完整的內存組織API。 Hazelcast只爲C++提供了有限的客戶端API。
20 Node.js支持 Ignite將爲Node.js用戶提供客戶端API支持。 Hazelcast不支持Node.js。

4.2.Ignite和Coherence

Apache Ignite和Oracle Coherence都提供了富數據網格的特性,解決了可擴展的分佈式集羣環境下在內存中對數據進行緩存和分區的問題。
Ignite和Coherence在緩存和事務的方式上是有不少不一樣的,同時支持數據的查詢,下面的表格列出了一些主要的不一樣點,這些都是咱們在選擇數據網格產品時須要特別關注的。數據結構

序號 對比項目 Apache Ignite Oracle Coherence
1 開源和閉源 Ignite是一個Apache項目,而且還在不斷的增長和加強開源版的功能集,最新的主版本提供了對C++、.NET/C#的支持,對Node.js的支持也會很快到來。 Coherence是一個Oracle的專有軟件,並不提供開源和免費的版本。
2 JCache (JSR 107) Ignite徹底兼容JCache (JSR 107)緩存規範 Coherence徹底兼容JCache (JSR 107)緩存規範
3 堆外存儲 Ignite根據用戶配置支持將數據存儲在堆內或者堆外 Oracle Coherence對將數據存儲在堆外向開發者提供了有限的選項。
4 堆外索引 只要配置了堆外存儲,Ignite就會在堆外存儲索引(爲了避免影響使用堆內內存的用戶應用。) 不支持
5 SQL查詢 Ignite支持完整的SQL(ANSI-99)語法以查詢查詢內存中的數據 不支持
6 關聯查詢 Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,好比:select * from A a, B b where a.b_id = b.id Coherence不支持任何的關聯查詢,無論用不用SQL,若是須要,開發者須要手工處理多個查詢的結果。
7 ACID事務 Ignite提供了每臺服務器每秒成千上萬事務的優異性能。 Coherence由於性能低不建議使用事務。
8 分層存儲 Ignite支持分層存儲模型,數據能夠在堆內堆外以及交換空間內存儲和移動,上層將提供更多的存儲能力,固然延遲也會增長。 不支持
9 流式數據 Ignite提供內存內流計算,包括支持流式數據的滑動窗口的維護和查詢 不支持
10 配置 Ignite支持經過Java Bean以及原生的Spring XML集成對系統進行配置,同時也支持經過代碼對系統進行方便配置的能力。 Coherence經過專有的XML格式文件進行配置,不支持經過代碼進行配置。

4.3.Ignite和Gemfire

Apache Ignite和Pivotal Gemfire都提供了富數據網格的特性,解決了可擴展的分佈式集羣環境下在內存中對數據進行緩存和分區的問題。
Ignite和Gemfire在緩存和事務的方式上是有不少不一樣的,同時支持數據的查詢,下面的表格列出了一些主要的不一樣點,這些都是咱們在選擇數據網格產品時須要特別關注的。閉包

序號 對比項目 Apache Ignite Pivotal Gemfire
1 開源和閉源 Ignite是一個Apache項目,而且還在不斷的增長和加強開源版的功能集,最新的主版本提供了對C++、.NET/C#的支持,對Node.js的支持也會很快到來。 Gemfire是Pivotal的專有軟件。
2 JCache (JSR107) Ignite數據網格是JCache(JSR107)規範的一個實現,該API爲數據訪問提供了簡單易用、可是功能強大的API。 Gemfire沒有實現JCache,使用專有的API。
3 堆內和堆外 Ignite根據用戶配置支持將數據存儲在堆內和堆外。 Gemfire不支持將數據存儲在堆外
4 SQL查詢 Ignite支持完整的SQL(ANSI-99) 查詢語法以查詢內存中的數據。 Gemfire不支持標準的SQL語法,可是他提供了本身的叫作OQL的對象查詢語言。
5 關聯查詢 Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,好比:select * from A a, B b where a.b_id = b.id Gemfire不支持任何的跨區或者跨緩存的關聯查詢,若是須要,開發者須要手工處理多個查詢的結果。
6 跨分區事務 Ignite支持跨分區事務,事務能夠在整個集羣中緩存的全部分區中執行。 Gemfire不支持跨越多個緩存分區或者節點的事務。
7 分層存儲 Ignite支持分層存儲模型,數據能夠在堆內堆外以及交換空間內存儲和移動,上層將提供更多的存儲能力,固然延遲也會增長。 不支持
8 流式數據 Ignite提供內存內流計算,包括支持流式數據的滑動窗口的維護和查詢 不支持
9 配置 Ignite支持經過Java Bean以及原生的Spring XML集成對系統進行配置,同時也支持經過代碼對系統進行方便配置的能力。 Gemfire經過專有的XML格式文件進行配置,不支持經過代碼進行配置。
10 部署 Ignite節點是對等的,而且在啓動時自動加入集羣(不須要任何locator服務器)。 Gemfire須要啓動和維護一個locator服務器,以便控制節點的加入和退出。

4.4.Ignite和Redis

Apache Ignite和Redis都提供了分佈式緩存的功能,可是每一個產品提供的功能特性是很是不一樣的。Redis主要是一個數據結構存儲,可是Ignite提供了不少內存內的分佈式組件,包括數據網格、計算網格、流計算,固然也包括數據結構。
Ignite是一個內存數據組織,而且提供了更多的功能,沒法進行一個一個對應功能特性的比較,可是咱們仍然能對一些數據網格功能進行對比。併發

序號 對比項目 Apache Ignite Redis
1 JCache (JSR 107) Ignite徹底兼容JCache(JSR107)緩存規範 不支持
2 ACID事務 Ignite徹底支持ACID事務,包括樂觀和悲觀併發模型以及READ_COMMITTED, REPEATABLE_READ和SERIALIZABLE隔離級別。 Redis提供了客戶端樂觀事務的有限支持,在併發更新狀況下,客戶端須要手工重試事務。
3 數據分區 Ignite支持分區緩存,相似於一個分佈式哈希,集羣中的每一個節點都存儲數據的一部分,在拓撲發生變化的狀況下,Ignite會自動進行數據的再平衡。 Redis沒有提供分區,可是提供了副本的分片,使用分片很是死板,而且不論是客戶端仍是服務端,每當拓撲發生變化時都須要一系列至關複雜的手工步驟。
4 全複製 Ignite支持緩存的複製,集羣中的每一個節點的每一個鍵值對都支持。 Redis不提供對全複製的直接支持。
5 原生對象 Ignite容許用戶使用本身的領域對象模型而且提供對任何Java/Scala, C++和.NET/C#數據類型(對象)的原生支持,用戶能夠在Ignite緩存中輕易的存儲任何程序和領域對象。 Redis不容許用戶使用自定義數據類型,僅支持預約義的基本數據結構集合,好比Set、List、Array以及一些其餘的。
6 客戶端側(近)緩存 Ignite提供對於最近訪問數據的客戶端側緩存的直接支持。 不支持
7 (服務端側)並置處理 Ignite支持在服務器端靠近數據以並置的方式直接執行任何Java, C++和.NET/C#代碼。 Redis一般沒有任何並置處理的能力,服務器端基本只支持LUA腳本語言,服務器端不直接支持Java, .NET,或者C++代碼執行。
8 SQL查詢 Ignite支持完整SQL(ANSI-99)語法以查詢內存中的數據。 Redis不支持任何查詢語言,只支持客戶端緩存API。
9 持續查詢 Ignite提供對客戶端和服務器端持續查詢的支持,用戶能夠設置服務器端的過濾器來減小和下降傳輸到客戶端的事件數量。 Redis提供客戶端基於鍵的事件通知的支持,可是他不提供服務器端的過濾器,所以形成了在客戶端和服務器端中更新通知網絡流量的顯著增長。
10 數據庫集成 Ignite能夠自動集成外部的數據庫-RDBMS, NoSQL,和HDFS。 Redis沒法與外部數據庫集成。
相關文章
相關標籤/搜索