Skip to content

Instantly share code, notes, and snippets.

@philipz
Created September 12, 2025 02:45
Show Gist options
  • Save philipz/c003da31a1bc5a8440e96ec05f9e06f1 to your computer and use it in GitHub Desktop.
Save philipz/c003da31a1bc5a8440e96ec05f9e06f1 to your computer and use it in GitHub Desktop.

Revisions

  1. philipz created this gist Sep 12, 2025.
    147 changes: 147 additions & 0 deletions Hazelcast_data_structure.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,147 @@
    # Hazelcast分散式資料結構技術深度分析

    Hazelcast作為統一的即時資料平台,透過其多樣化的分散式資料結構支撐著全球75%的金融交易處理。**本分析揭示了Hazelcast七種核心資料結構的技術實作原理、CAP定理權衡策略、以及企業級架構設計考量**,基於其獨特的對等式叢集架構和雙重一致性模型(AP/CP),為技術架構師提供關鍵的技術選型洞察。

    Hazelcast的分散式架構採用**無主從模式的對等式設計**,消除單點故障風險,同時透過271個預設分區的一致性雜湊演算法實現資料的均勻分布。其**多執行緒處理模型**在高併發場景下較Redis等單執行緒解決方案展現出顯著優勢,在128併發執行緒測試中達到119萬操作/秒的吞吐量。**CP子系統基於Raft共識演算法**為需要強一致性的應用提供線性化保證,而預設的AP模式則透過懶惰複製機制確保高可用性。

    ## Maps (IMap) - 分散式分區鍵值儲存的核心引擎

    ### 技術實作原理和架構設計

    **IMap採用一致性雜湊分區機制**,使用`MOD(hash(key), partition_count)`公式將鍵值對分布至271個預設分區中。每個成員儲存大致相等數量的條目,當新成員加入時自動重新平衡。**關鍵架構特點**是採用主備份模型,每個分區有一個主複本和可配置的備份複本(預設1個),備份儲存在不同的成員上以實現容錯。

    **內部儲存違反標準Map合約**,使用序列化形式的hashCode()和equals()進行比較而非物件本身的實作,這是分散式環境下的必要權衡。支援OBJECT(反序列化,預設)和BINARY(序列化)兩種記憶體格式,前者適合查詢友善的應用,後者則記憶體效率更高。

    ### 一致性模型和CAP定理權衡

    IMap在CAP定理中選擇**可用性和分區容錯性(AP)**,實施懶惰複製策略:主要節點接收更新並本地執行後,再傳播至備份。提供最終一致性保證,透過主動反熵機制修復不一致狀態。**同步備份**模式要求呼叫者等待備份確認,而**異步備份**採用射後不理模式,允許使用者根據一致性需求選擇適當策略。

    **分腦保護機制**透過合併策略處理網路分區情況,預設使用PutIfAbsentMergePolicy,並支援CRDT(無衝突複製資料類型)進行衝突解決。

    ### 效能特性和擴展性考量

    **讀取效能**達到O(1)平均複雜度,透過Near Cache對頻繁存取的靜態資料建立本地快取。**批次操作**如putAll()和setAll()提供更佳吞吐量,而**非同步方法**返回CompletionStage實現非阻塞操作。**索引能力**支援雜湊索引(O(1)等值查詢)和排序索引(O(log n)+結果集的範圍查詢),索引建構在分區間平行化執行且不阻塞。

    **寫入最佳化**方面,當不需要返回值時使用set()比put()更高效,Entry Processor支援伺服器端原子操作減少網路開銷,而write-behind模式的寫入聚合功能進一步提升效能。

    ### 故障恢復和高可用性機制

    內建**故障檢測器**持續監控成員健康狀態,透過成員間協作診斷識別失敗節點。**自動容錯轉移**在主要節點失敗時提升備份,**分區重分布**在成員離開後自動重新平衡,**反熵系統**背景同步修復一致性。**分散式鎖定**機制支援每鍵鎖定,提供可重入鎖定和租期支援,實現悲觀鎖定策略。

    ### 企業級應用場景和最佳實務

    **金融服務**領域廣泛應用於市場資料管理、即時詐欺檢測和交易系統,全球前十大銀行使用IMap實現90%主機工作負載轉移。**電商零售**場景中,全球第二大電商零售商透過IMap處理黑色星期五等極端流量,實現次秒級回應時間。

    **最佳實務配置**包括:根據容錯需求配置適當備份數量、實施適當的驅逐策略(LRU、LFU、RANDOM)、設定TTL值進行資料生命週期管理、對查詢密集應用實施適當索引、考慮相關資料的分區分組。

    ### 與其他分散式解決方案的比較

    相較於**Redis Cluster**,IMap的多執行緒架構在高併發場景下展現優勢,128執行緒時達到119萬操作/秒而Redis僅66萬操作/秒。與**Apache Cassandra**相比,IMap更適合讀取密集、低延遲存取模式,而Cassandra在寫入密集工作負載中表現更佳(8-9倍批次寫入速度)。

    ## Replicated Maps - 全複製架構的高速本地存取

    ### 技術實作原理和架構設計

    **Replicated Maps採用完全複製策略**,每個成員儲存完整資料副本,無分區機制。更新異步分發至所有叢集成員,透過內部分區系統確保相同鍵的更新序列化,使用反熵系統在成員錯過更新時實現收斂。這種設計**犧牲記憶體效率換取極快本地讀取**

    ### 效能特性和可擴展性限制

    **讀取效能極佳**,所有資料立即可用於每個成員,無需網路呼叫。**寫入效能受叢集大小限制**,寫入可擴展性呈O(n)複製成本。記憶體使用量隨叢集大小線性增長,不適合大型資料集或大型叢集。

    **適用場景**主要為小到中等資料集且具有高讀寫比例的情況,如目錄資料、配置資料或冪等可計算資料。儲存格式支援OBJECT(快速存取,本地變更無需put()即可見)和BINARY(更高封裝性,未明確put()的變更被捨棄)。

    ### 一致性模型特性

    提供**弱一致性**,由於異步複製無法提供寫入/讀取的原子性保證。刻意缺失java.util.concurrent.ConcurrentMap方法,在成員內提供讀後寫一致性。EntryListener僅反映本地變更,事件在不同成員上以不同時間觸發。

    ## Caches (JCache/ICache) - JSR-107相容的企業快取解決方案

    ### 技術實作和標準相容性

    **100% JSR-107技術相容性套件(TCK)相容**,實作javax.cache.Cache介面並提供Hazelcast ICache擴展。CachingProvider自動檢測Hazelcast實作,CacheManager建立和管理命名快取實例。建構在Hazelcast分散式基礎設施之上,繼承底層平台的分區和複製機制。

    ### 快取策略和效能機制

    支援四種核心快取策略:**Read-through**(透過CacheLoader自動載入)、**Write-through**(透過CacheWriter立即寫入後備儲存)、**Write-behind**(異步寫入後備儲存)、**Cache-aside**(手動快取填充和更新)。

    **驅逐和過期機制**包括基於大小的驅逐(ENTRY_COUNT、USED_NATIVE_MEMORY_SIZE)和基於時間的過期(AccessedExpiryPolicy、CreatedExpiryPolicy),支援每鍵自訂過期策略和背景清理過期條目。

    ### 企業級功能和整合

    提供**完整執行緒安全性**,支援併發存取的原子操作和Entry Processor執行的適當隔離。**分腦保護**確保網路分區期間的一致性,**JMX管理**在啟用時提供監控能力。異步操作可用於所有阻塞操作,統計收集可配置(預設停用以提升效能)。

    ## MultiMaps - 多值映射的分散式實作

    ### 內部資料組織和實作

    **專門的映射允許單一鍵對應多個值**,值儲存為每鍵的集合(Set或List)。基於鍵的分區:相同鍵的條目在同一成員上,不同鍵分布在叢集成員間。**集合類型支援**包括SET(無重複、無空值、順序無關)和LIST(允許重複、無空值、保持順序),可透過value-collection-type參數配置。

    ### 效能特性和限制

    **分布策略**實現條目在叢集間的近似均勻分布,使用與標準Hazelcast Map相同的所有權邏輯,成員加入/離開時自動重新平衡。**主要限制**包括不支援索引、謂詞或MapLoader/MapStore,效能特徵與IMap的鍵操作類似,集合操作隨每鍵值數量擴展。

    ## Lists和Sets - 傳統集合的分散式實作

    ### Lists (IList) - 有序集合實作

    **非分區資料結構**,整個列表儲存在單一成員上,保證所有操作的順序保持。允許重複元素,不允許空值,採用單分區儲存配置備份成員。**可擴展性限制**為無法超越單機容量水準擴展,所有操作在分區擁有者上執行,建議對大型資料集使用多個列表分散負載。

    **效能分析**顯示迭代時快速本地存取(本地副本),遠程分區存取有網路開銷,順序存取透過本地複製最佳化,支援基於索引的存取和標準List介面。

    ### Sets (ISet) - 去重集合實作

    採用**equals()/hashCode()自動重複消除**,使用類似其他Hazelcast結構的二進制形式比較,不允許空值且不保持順序。**非分區設計**將整個集合儲存在單一叢集成員上,無法水平擴展超越單機容量,建議使用多個命名集合在叢集間分散資料。

    **分散式成員測試**平均O(1)的contains()操作,快速新增/移除操作,由於單分區設計存在可擴展性限制,大型資料集可能在單一成員上造成記憶體壓力。

    ## Vector Collections - AI/ML向量儲存和相似性搜尋

    ### 技術實作和AI/ML整合

    **專為儲存、搜尋和管理向量嵌入而設計**,基於JVector庫實作DiskANN演算法進行相似性搜尋。圖形索引結構以節點作為向量,邊緣針對搜尋最佳化,支援高維向量空間和可配置度量。**AI/ML整合**設計用於語義搜尋、詐欺檢測和RAG(檢索增強生成),Pipeline API整合用於從非結構化資料計算嵌入。

    ### 相似性搜尋演算法和效能

    **雙階段搜尋**:協調器分發至成員,聚合結果;**單階段搜尋**:直接分區級搜尋用於單成員叢集。可配置partitionLimit和memberLimit以平衡品質與效能權衡,分區搜尋需要跨分區聚合。

    **索引策略**支援命名向量索引,相同維度和距離度量,支援的度量包括COSINE、EUCLIDEAN、DOT_PRODUCT,向量維度必須匹配嵌入模型輸出。**效能調整**中分區數量顯著影響效能,較少分區=更好搜尋效能但更高遷移成本,更多分區=更佳資料攝取平行度。

    ### 儲存和記憶體管理

    **記憶體內儲存**(JVM堆)用於快速存取,鍵值模型:使用者定義鍵將向量連結至元資料,元資料儲存支援任何可序列化物件。**向量去重**可用且開銷最小(<1%),基於集合鍵的分區,大型分區的遷移開銷考量。**當前限制**(5.5 beta版本)包括不支援備份、向量集合不包含在滾動升級相容性中、非空集合的destroy/clear操作存在已知記憶體洩漏問題。

    ## 架構設計建議和技術選型指南

    ### 資料結構選型決策矩陣

    **IMap適用場景**:通用分散式鍵值需求、需要進階功能(索引、查詢、Entry Processor)、中大型資料集、需要水平擴展的應用。**ReplicatedMap適用場景**:小型資料集(<10MB)、極高讀取頻率、低寫入頻率、需要本地快速存取的靜態資料。

    **Cache (JCache/ICache)適用場景**:需要JSR-107標準相容性、複雜過期策略、與現有快取基礎設施整合。**MultiMap適用場景**:單鍵對應多值的自然資料模型、需要集合語義的分散式應用。

    **List/Set適用場景**:小到中型有序集合、需要傳統Java集合語義、可接受單分區限制。**Vector Collections適用場景**:AI/ML應用、相似性搜尋需求、已存在Hazelcast基礎設施的組織。

    ### 大規模系統架構考量

    **叢集拓撲設計**建議:嵌入式部署提供更高效能和更簡單部署,客戶端-伺服器模式提供更好隔離和更容易擴展,混合模式基於使用案例需求組合使用。**多資料中心部署**支援主動-主動複製模式、主動-被動容錯轉移配置、地理負載平衡和跨區域延遲最佳化。

    **效能最佳化策略**包括:分區感知操作直接路由至分區擁有者、Near Cache用於讀取密集工作負載、Entry Processor進行伺服器端計算減少網路開銷、索引用於查詢最佳化。**容量規劃**建議每個成員16GB或更少的最大JVM堆(HD Memory 8GB),優先水平擴展而非垂直擴展,單一主機單一Hazelcast成員。

    ### 一致性和可用性權衡策略

    **AP模式選擇**適合高可用性優先的應用、可容忍最終一致性的場景、需要分區容錯的分散式系統。**CP模式選擇**適合強一致性要求、金融交易等關鍵業務、可容忍在分區期間降低可用性。

    **混合策略**允許同一應用中不同資料結構使用不同一致性模型,關鍵資料使用CP保證,非關鍵資料使用AP獲得更好效能。**監控和管理**透過Management Center進行即時叢集監控,JMX和REST API整合,Prometheus匯出器用於進階分析。

    ### 企業部署和營運考量

    **安全套件功能**包括JAAS基礎安全框架、LDAP和Kerberos整合、基於角色的存取控制(RBAC)、X.509憑證基礎相互認證。**合規性和審計**支援企業安全功能如安全領域、審計日誌和監控、SOC 2 Type II合規性。

    **成本效益分析**顯示全球第二大電商零售商實現90%授權軟體成本減少,從數百台伺服器減少至6台伺服器,顯著硬體成本節省和更低的開發營運成本。**總擁有成本因素**包括透過更好資源利用率最佳化硬體、雲端部署彈性和成本最佳化、減少複雜快取層需求。

    ## 結論:Hazelcast的戰略價值和技術優勢

    Hazelcast透過其統一的即時資料平台方法,在需要低延遲、高吞吐量處理與營運簡單性的Java環境中表現卓越。**雙重AP/CP模型**讓應用能夠根據使用案例選擇適當的一致性保證,而**多樣化的資料結構生態系統**支援從簡單快取到複雜AI/ML工作負載的各種需求。

    **關鍵成功因素**包括適當的容量規劃和效能測試、全面的安全實作、有效的監控和營運程序、與現有企業架構的整合、以及員工訓練和最佳實務採用。組織實作Hazelcast通常在應用效能、基礎設施成本和回應即時業務需求的能力方面看到顯著改善,使其成為數位轉型倡議的戰略技術投資。

    在技術選型中,Hazelcast最適合重視**營運簡單性、效能可預測性、開源授權靈活性**的組織,特別是在Java生態系統中需要統一資料平台方法的企業環境。