Hazelcast作為一個高度可擴展的數據分發和集群平台,提供了高效的、可擴展的分布式數據存儲、數據緩存。Hazelcast是開源的,在分布式技術方面,Hazelcast提供了十分友好的接口供開發者選擇,如Map,Queue,ExecutorService, Lock和Jcache。
Hazelcast的穩定性很高,分布式應用可以使用Hazelcast進行存儲數據、同步數據、發布訂閱消息等。Hazelcast是基於Java開發的,其客戶端有Java, C/C++, .NET以及REST。Hazelcast同時也支持memcache協議。它很好的支持了Hibernate,可以很容易的在當今流行的數據庫系統中應用。
如果你在尋找一個基於內存的、可擴展的以及對開發者友好的NoSql,那么Hazelcast是一個很不錯的選擇!
Hazelcast是一個高度可擴展的數據分發和集群平台。特性包括:
- 提供java.util.{Queue, Set, List, Map}分布式實現。
- 提供java.util.concurrency.locks.Lock分布式實現。
- 提供java.util.concurrent.ExecutorService分布式實現。
- 提供用於一對多關系的分布式MultiMap。
- 提供用於發布/訂閱的分布式Topic(主題)。
- 通過JCA與J2EE容器集成和事務支持。
- 提供用於安全集群的Socket層加密。
- 支持同步和異步持久化。
- 為Hibernate提供二級緩存Provider 。
- 通過JMX監控和管理集群。
- 支持動態HTTP Session集群。
- 利用備份實現動態分割。
- 支持動態故障恢復。
1.優點
a. Hazelcast開發比較簡單
Hazelcast是基於Java寫的,沒有任何其它的以來。它提供的API跟Java util包很像。對於開發者來說,只需要加入hazelcast.jar,然后就可以快速使用在多個JVM之間的數據共享(分布式)。
b. Hazelcast的節點之間是平等的(Peer-to-Peer)
不像其它很多的NoSql解決方案,Hazelcast的節點之間是對等的(沒有主次之分)。所有的節點存儲的數據都是相等的,在應用中可以很容易的增加一個Hazelcast節點。或者以客戶端-服務端的形式使用。
c. Hazelcast是可擴展的
Hazelcast的擴展性非常強,可以很簡單的增加或減少節點。可以自動的監聽節點的增加,並以線性的方式增加存儲空間和能力。節點之間的通信是以TCP的方式建立的。
d. Hazelcast效率很高。
將數據存儲在內存中,所以是非常高效的,包括讀操作和寫操作。
e. Hazelcast是可備份的
Hazelcast的數據會在多個節點上進行備份。一旦一個節點失敗了,數據將會從別的節點上進行恢復。
f. Hazelcast頁面元素齊全
頁面可以看到map,list等數據內容,以及一些容量的儀表圖.可以看到很多有用的數據,包括每個Map的請求次數等.
2. 使用場景
分布式緩存,通常使用在數據庫之前的那一層
緩存服務器
NoSql的數據存儲
Spring cache
微服務的結構
儲存臨時數據,如web的session等
3. Hazelcast的數據拆分
Hazelcast的數據拆分叫做間隔(Partitions)。默認情況下,Hazelcast會將數據拆分成271個間隔(總數,並不是單個單點)。當傳入一個key時,Hazelcast會對它進行序列化,以及進行hash的算法等算出一個數值,通過該數值它存放在相應的間隔中(271個的其中一個)。在不同的節點中存放相同數量的間隔。Hazelcast還會生成備份的間隔,同樣也是存放在這些間隔中。
4.配置
配置組連接選項
<group> <name>test</name> <password>test</password> </group>
配置管理頁面,如果配置為true,則可以在mancenter目錄下啟動頁面管理
<management-center enabled="true">http://10.1.4.97:8080/mancenter</management-center>
配置連接網絡(自增長如果配為true,端口啟動失敗時會自增)
<port auto-increment="true" port-count="100">5701</port>
集群節點發現機制,自選一種
<join> <multicast enabled="false"> <multicast-group>224.2.2.3</multicast-group> <multicast-port>54327</multicast-port> </multicast> <tcp-ip enabled="true"> <interface>10.10.10.10</interface> <member-list> <member>10.10.10.10</member> </member-list> </tcp-ip> <aws enabled="false"> <access-key>my-access-key</access-key> <secret-key>my-secret-key</secret-key> <!--optional, default is us-east-1 --> <region>us-west-1</region> <!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property --> <host-header>ec2.amazonaws.com</host-header> <!-- optional, only instances belonging to this group will be discovered, default will try all running instances --> <security-group-name>hazelcast-sg</security-group-name> <tag-key>type</tag-key> <tag-value>hz-nodes</tag-value> </aws> </join>
配置節點對套接字加密,算法可選
<symmetric-encryption enabled="false"> <!-- encryption algorithm such as DES/ECB/PKCS5Padding, PBEWithMD5AndDES, AES/CBC/PKCS5Padding, Blowfish, DESede --> <algorithm>PBEWithMD5AndDES</algorithm> <!-- salt value to use when generating the secret key --> <salt>thesalt</salt> <!-- pass phrase to use when generating the secret key --> <password>thepass</password> <!-- iteration count to use when generating the secret key --> <iteration-count>19</iteration-count> </symmetric-encryption>
配置執行服務器的線程和隊列容量
<executor-service name="default"> <pool-size>16</pool-size> <!--Queue capacity. 0 means Integer.MAX_VALUE.--> <queue-capacity>0</queue-capacity> </executor-service>
參考:http://blog.csdn.net/hengyunabc/article/details/18514563