Hazelcast集群服務——Hazelcast介紹


Hazelcast是什么

    “分布式”、“集群服務”、“網格式內存數據”、“分布式緩存“、“彈性可伸縮服務”——這些牛逼閃閃的名詞拿到哪都是ITer裝逼的不二之選。在Javaer的世界,有這樣一個開源項目,只需要引入一個jar包、只需簡單的配置和編碼即可實現以上高端技能,他就是 Hazelcast

    Hazelcast 是由Hazelcast公司(沒錯,這公司也叫Hazelcast!)開發和維護的開源產品,可以為基於jvm環境運行的各種應用提供分布式集群和分布式緩存服務。Hazelcast可以嵌入到任何使用Java、C++、.NET開發的產品中(C++、.NET只提供客戶端接入)。Hazelcast目前已經更新到3.X版本,Java中絕大部分數據結構都被其以為分布式的方式實現。比如Javaer熟悉的Map接口,當通過Hazelcast創建一個Map實例后,在節點A調用 Map::put("A","A_DATA") 方法添加數據,節點B使用 Map::get("A") 可以獲到值為"A_DATA" 的數據。Hazelcast 提供了 Map、Queue、MultiMap、Set、List、Semaphore、Atomic 等接口的分布式實現;提供了基於Topic 實現的消息隊列或訂閱\發布模式;提供了分布式id生成器(IdGenerator);提供了分布式事件驅動(Distributed Events);提供了分布式計算(Distributed Computing);提供了分布式查詢(Distributed Query)。總的來說在獨立jvm經常使用數據結果或模型 Hazelcast 都提供了分布式集群的實現。

    Hazelcast 有開源版本和商用版本。開源版本遵循 Apache License 2.0 開源協議免費使用。商用版本需要獲取特定的License,兩者之間最大的區別在於:商用版本提供了數據高密度存儲。我們都知道jvm有自己特定的GC機制,無論數據是在堆還是棧中,只要發現無效引用的數據塊,就有可能被回收。而Hazelcast的分布式數據都存放在jvm的內存中,頻繁的讀寫數據會導致大量的GC開銷。使用商業版的Hazelcast會擁有高密度存儲的特性,大大降低Jvm的內存開銷,從而降低GC開銷。

    很多開源產品都使用Hazelcast 來組建微服務集群,例如咱們的Vert.x,首選使用Hazelcast來組建分布式服務。有興趣可以看我的這篇分享——Vert.x 如何創建集群 ,文中說明了Vert.x如何使用Hazelcast組建集群。

    附:

Hazelcast的特性

自治集群(無中心化)

    Hazelcast 沒有任何中心節點(文中的節點可以理解為運行在任意服務器的獨立jvm,下同),或者說Hazelcast 不需要特別指定一個中心節點。在運行的過程中,它自己選定集群中的某個節點作為中心點來管理所有的節點。

數據按應用分布式存儲

    Hazelcast 的數據是分布式存儲的。他會將數據盡量存儲在需要使用該項數據的節點上,以實現數據去中心化的目的。在傳統的數據存儲模型中(MySql、MongDB、Redis 等等)數據都是獨立於應用單獨存放,當需要提升數據庫的性能時,需要不斷加固單個數據庫應用的性能。即使是現在大量的數據庫支持集群模式或讀寫分離,但是基本思路都是某幾個庫支持寫入數據,其他的庫不斷的拷貝更新數據副本。這樣做的壞處一是會產生大量臟讀的問題,二是消耗大量的資源來傳遞數據——從數據源頻繁讀寫數據會耗費額外資源,當數據量增長或創建的主從服務越來越多時,這個消耗呈指數級增長。

    使用 Hazelcast 可以有效的解決數據中心化問題。他將數據分散的存儲在每個節點中,節點越多越分散。每個節點都有各自的應用服務,而Hazelcast集群會根據每個應用的數據使用情況分散存儲這些數據,在應用過程中數據會盡量“靠近”應用存放。這些在集群中的數據共享整個集群的存儲空間和計算資源。

抗單點故障

    集群中的節點是無中心化的,每個節點都有可能隨時退出或隨時進入。因此,在集群中存儲的數據都會有一個備份(可以配置備份的個數,也可以關閉數據備份)。這樣的方式有點類似於 hadoop,某項數據存放在一個節點時,在其他節點必定有至少一個備份存在。當某個節點退出時,節點上存放的數據會由備份數據替代,而集群會重新創建新的備份數據。

簡易性

    所有的 Hazelcast 功能只需引用一個jar包,除此之外,他不依賴任何第三方包。因此可以非常便捷高效的將其嵌入到各種應用服務器中,而不必擔心帶來額外的問題(jar包沖突、類型沖突等等)。他僅僅提供一系列分布式功能,而不需要綁定任何框架來使用,因此適用於任何場景。

    除了以上特性,Hazelcast 還支持服務器/客戶端模型,支持腳本管理、能夠和 Docker 快速整合等等。                 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM