- Hazelcast 教程
- Hazelcast - 首頁
- Hazelcast - 簡介
- Hazelcast - 設定
- Hazelcast - 第一個應用程式
- Hazelcast - 配置
- 設定多節點例項
- Hazelcast - 資料結構
- Hazelcast - 客戶端
- Hazelcast - 序列化
- Hazelcast 高階
- Hazelcast - Spring 整合
- Hazelcast - 監控
- Map Reduce 與聚合
- Hazelcast - 集合監聽器
- 常見陷阱與效能技巧
- Hazelcast 有用資源
- Hazelcast - 快速指南
- Hazelcast - 有用資源
- Hazelcast - 討論
Hazelcast - 常見陷阱與效能技巧
單機 Hazelcast 佇列
Hazelcast 佇列儲存在單個成員上(以及不同機器上的備份)。這意味著佇列可以容納一臺機器所能容納的任意數量的項。因此,新增更多成員不會擴充套件佇列容量。如果在佇列中載入超過機器所能處理的資料量,可能會導致機器崩潰。
使用 Map 的 set 方法而不是 put
如果我們使用 IMap 的 put(key, newValue),Hazelcast 會返回 oldValue。這意味著,在反序列化上花費了額外的計算和時間。這也包括從網路傳送更多資料。相反,如果我們對 oldValue 不感興趣,我們可以使用 set(key, value),它返回 void。
讓我們看看如何儲存和注入對 Hazelcast 結構的引用。以下程式碼建立了一個名為“stock”的對映,並在一個地方新增 Mango,在另一個地方新增 Apple。
//initialize hazelcast instance
HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance();
// create a map
IMap<String, String> hzStockTemp = hazelcast.getMap("stock");
hzStock.put("Mango", "4");
IMap<String, String> hzStockTemp2 = hazelcast.getMap("stock");
hzStock.put("Apple", "3");
但是,這裡的問題是我們兩次使用了 getMap("stock")。雖然此呼叫在單節點環境中看起來無害,但在叢集環境中會造成緩慢。getMap() 函式呼叫涉及到對叢集中其他成員的網路往返。
因此,建議我們將對對映的引用儲存在本地,並在操作對映時使用該引用。例如 -
// create a map
IMap<String, String> hzStock = hazelcast.getMap("stock");
hzStock.put("Mango", "4");
hzStock.put("Apple", "3");
Hazelcast 使用序列化資料進行物件比較
正如我們在前面的示例中看到的,需要注意的是,Hazelcast 在比較鍵時不會使用反序列化物件。因此,它無法訪問我們在 equals/hashCode 方法中編寫的程式碼。根據 Hazelcast,如果兩個 Java 物件的所有屬性的值相同,則這些鍵相等。
使用監控
在大型分散式系統中,監控起著非常重要的作用。使用 REST API 和 JMX 進行監控對於採取主動措施而不是被動反應非常重要。
同構叢集
Hazelcast 假設所有機器都是平等的,即所有機器都具有相同的資源。但是,如果我們的叢集包含一臺效能較低的機器(例如,記憶體較少、CPU 能力較低等),那麼如果計算發生在該機器上,就會導致速度變慢。更糟糕的是,較弱的機器可能會耗盡資源,從而導致級聯故障。因此,Hazelcast 成員必須具有相同的資源能力。