本文介紹ZooKeeper的使用場景和MSE ZooKeeper的優勢。
ZooKeeper的技術應用場景
場景一:大數據領域的高可用
Kafka、Hadoop、HBase和Flink等大數據系統默認把ZooKeeper當作分布式協調的組件,利用ZooKeeper做出高可用方案,從而提高集群可用性。
場景二:自研系統的分布式協調
Master的選舉:
搶占主節點的方式:系統需要選舉出1個Master來執行任務,如下圖所示,Node1為Master,它會創建臨時主節點,并將自己的信息寫入Master,當Node1宕機,臨時主節點被釋放,此時Node2和Node3會爭搶創建臨時主節點。假如Node2創建了臨時主節點,Node2變為Master,Node3發現主節點已存在,不再創建和獲取主節點信息。
最小節點方式:利用ZooKeeper的臨時有序節點實現Master的選舉。選Master的時候,每臺Server往目錄下面寫一個臨時有序節點,約定序號最小的節點作為Master,當主節點宕機之后,按照從小到大的順序產生主節點。
分布式鎖:在分布式環境中,程序都分布在獨立的節點中,分布式鎖是控制分布式系統之間同步訪問共享資源的一種方式,分布式鎖主要有如下2種類型:
排他鎖(Exclusive Locks):又稱為獨占鎖,利用ZooKeeper在一個具體路徑下只能創建一個節點的特性,即哪個節點優先創建成功,就意味著此節點搶到了鎖;同時其他節點也要監聽這個節點的變化,如果此節點刪除了,其他節點可以被通知去搶鎖。
共享鎖(Shared Locks):又稱為讀鎖,多個進程可以同時獲取這把鎖進行讀操作,但是如果某個進程要獲取寫操作權限,那么此進程必須沒有讀數據的操作,且此進程是第一個獲取到寫操作類型的鎖。
分布式隊列:利用ZooKeeper的持久化有序節點,實現先入先出(First In First Out,簡稱FIFO)的分布式隊列,即先進入隊列的請求操作先完成后,才會開始處理后進入隊列的請求。
配置中心
利用ZooKeeper的存儲配置,實現配置信息的集中式管理和數據的動態更新,保證數據一致性。
場景三:微服務領域的注冊中心場景
在微服務場景,利用ZooKeeper的注冊和訂閱功能,ZooKeeper可用作Dubbo和Spring Cloud的注冊中心。
MSE提供的ZooKeeper企業級服務
MSE提供的ZooKeeper企業級服務,分為開發版和專業版兩種,前者適用于開發測試,后者在性能、可觀測和高可用方面做了諸多提升,用于生產環境。更多關于開發版和專業版的功能特性,請參見版本特性。
優勢一:穩定高可用
多AZ部署:平均部署可用區,提高集群容災能力。例如,當一個5節點的ZooKeeper集群,部署在3個可用區的時候,它應該是2/2/1的分布,任意一個可用區出現故障,不影響ZooKeeper的整體可用性,同時阿里云AZ之間的延時低于3ms,可以做到故障的風險可控。
高可用負載均衡:MSE ZooKeeper提供的主備高可用的SLB,自動對用戶請求做負載均衡,會把請求壓力分散到后端節點,并且會自動摘除后端故障節點,保證請求到正常的節點上。
節點故障自愈:依托于K8s的Liveness能力,在節點出現故障時,會自動恢復故障節點,及時地保障服務的可持續性。
數據安全:MSE ZooKeeper專業版提供了快照的備份能力,在集群出現非預期的情況時,能夠快速重建恢復集群中的數據,保障數據的安全。
優勢二:免運維且控制臺功能豐富
自建ZooKeeper和MSE ZooKeeper專業版對比如下:
對比項 | MSE ZooKeeper專業版 | 自建ZooKeeper |
系統搭建及運維成本 | 資源全托管免運維,內置SLB,自動綁定域名,故障節點自動摘除。 | 需自行購買各種資源搭建系統,運維升級需投入精力,人工成本高。 |
易用性 | 提供可視化的配置數據查詢和更新功能。系統參數已調優,支持頁面修改全局參數,自動重啟生效。 | 不支持可視化,需通過黑屏命令行手動操作。針對每個節點手動修改配置文件,需按序重啟,容易出現配置不一致導致集群選主失敗,效率低、風險高。 |
高可用 | 多可用區部署,故障自動檢測及恢復,SLA保障率達99.95%。 | 需自行探索和開發高可用保障體系,對團隊技術要求高。 |
支持擴縮容不重啟。 | 擴縮容要全量重啟。 | |
性能 | 集成高性能JVM,進行深度優化,性能提升1倍。 | 需要自行調試。 |
監控告警 | 可對集群狀態、連接數、TPS、ZNode、請求延時等指標進行監控,提供自定義告警規則及釘釘、電話、短信等告警渠道。 | 不支持,需自行搭建監控告警體系。 |
權限管理 | 服務注冊及配置管理支持RAM鑒權,RAM用戶(即子賬號)可管理實例訪問權限。 | 不支持。 |
優勢三:可觀測性增強
提供監控大盤:MSE ZooKeeper專業版和阿里云Prometheus監控進行集成,提供20多個ZooKeeper常用的監控指標和4個核心資源監控指標,供您免費開啟使用。
支持核心告警規則:可以滿足日常運維需求,在使用過程中如果您發現核心告警規則無法滿足需求,請加入釘群(釘群號:34754806)聯系技術支持。
開放Metrics標準指標:MSE ZooKeeper專業版,通過API的形式把ZooKeeper內置的70+Metrics指標開放。利用這些數據您可以自行的繪制監控大盤。
優勢四:性能提升
寫入性能提升:ZooKeeper的寫入性能和磁盤性能強相關。MSE ZooKeeper采用了阿里云ESSD高性能云盤,最大IOPS能夠達到5W,最大吞吐量350M/S,數據的可靠性達99.9999999%(即9個9),整個寫入TPS性能可提升約20%。
基于Dragonwell進行構建,讀取性能提升:MSE ZooKeeper集成阿里高性能JDK,開啟協程優化能力,并對ZooKeeper的讀寫任務隊列做出鎖粒度的優化,在高并發處理的場景下,讀取性能相比開源能夠提升1倍左右。
參數性能調優,降低GC時間:ZooKeeper是時延敏感型的應用,GC的時間和次數直接影響處理的吞吐量。MSE ZooKeeper專業版對JVM參數進行調優,堆的參數設置會根據不同的配置進行動態調節,同時提前做了資源碎片的回收,使GC時間降低80%,避免出現FullGC。