? ? ? ?以前看zookeeper只知道是在分布式應用程序環境中起到協調通知的作用,但一直都未在具體項目中應用過。正好最近業務中有這樣的場景,就拿來實踐了一下。
? ? ? 業務場景:通過頁面將一些人工配置的數據保存下來,客戶端通過服務端暴露的restful接口來請求到這些數據。服務端大約20來個節點,當時考慮通過將數據緩存到redis中,然后每個請求過來直接到redis機器上取數據。這些數據大部分時間不會有太大變化,但人工還有可能隨時變更,重新保存,而且客戶端過來的請求量很大,并且每次請求里面可能都會循環多次去連redis取。考慮到到redis中取雖然是ms級,但是對于大量請求來說開辟連接、網絡io對性能來說也是一筆不小的開銷。
? ? ? ?考慮使用zk:如果我將這些不是太經常變更的數據直接放進本機的內存對象里面,取的時候讀本機內存,那樣響應速度將大大提升。但是節點不同,對象也不同,如何保證數據一致。此時可以考慮到zk的監聽機制。利用內存對象 、redis、zk實現不同節點數據同步。保存數據時候可以存入redis中,同時創建一個zk臨時節點并塞入當前時間戳數據。監聽端,創建zk監聽機制,當需要人工重新更改配置數據時候,將會引起zk的節點發生變化,此時zk及時監聽到通知各節點將redis中最新數據存入各個節點對象中,這樣就能保證數據是最新的而且一致性。