diamond專題(二)– 核心原理介紹

你們好,經過第一篇的快速使用,你們已經對diamond有了一個基本的瞭解。本次爲你們帶來的是diamond核心原理的介紹,主要包括server集羣的數據同步、client獲取server地址、client從server獲取數據、client運行時感知server的數據變化,這四部分。mysql

1、server集羣數據同步算法

diamond-server將數據存儲在mysql和本地文件中,mysql是一箇中心,diamond認爲存儲在mysql中的數據絕對正確,除此以外,server會將數據存儲在本地文件中。sql

同步數據有兩種方式:緩存

(1)server寫數據時,先將數據寫入mysql,而後寫入本地文件,寫入完成後發送一個HTTP請求給集羣中的其餘server,其餘server收到請求,從mysql中dump剛剛寫入的數據至本地文件。服務器

(2)server啓動後會啓動一個定時任務,定時從mysql中dump全部數據至本地文件。網絡

2、client獲取server地址ide

diamond-client在使用時沒有指定server地址的代碼,地址獲取對用戶是透明的。url

server地址存儲在一臺具備域名的機器上的HTTPserver中,咱們稱它爲地址服務器,diamond-client使用前須要在本地進行正確的域名綁定,啓動時它會根據域名綁定,去對應環境的地址服務器上獲取diamond-server地址列表。server

獲取的地址列表,會保存在client本地,當出現網絡異常,沒法從網絡獲取地址列表時,client會使用本地保存的地址列表。內存

client啓動後會啓動一個定時任務,定時從HTTPserver上獲取地址列表並保存在本地,以保證地址是最新的。

3、client主動獲取數據

client調用getAvailableConfigInfomation(),便可獲取一份最新的可用的配置數據,獲取過程其實是拼接httpurl,使用http-client調用httpmethod的過程。

爲了不短期內大量的獲取數據請求發向server,client端實現了一個帶有過時時間的緩存,client將本次獲取到的數據保存在緩存中,在過時時間內的全部請求,都返回緩存內的數據,不向server發出請求。

4、client運行中感知數據變化

這是diamond最爲核心的一個功能。

這個特性是經過比較client和server的數據的MD5值實現的。

server在啓動時,會將全部數據的MD5加載到內存中(MD5根據某算法得出,保證數據內容不一樣,MD5不一樣,MD5存儲在mysql中),數據更新時,會更新內存中對應的MD5

client在啓動並第一次獲取數據後,會將數據的MD5保存在內存中,而且在啓動時會啓動一個定時任務,定時去server檢查數據是否變化。每次檢查時,client將MD5傳給server,server比較傳來的MD5和自身內存中的MD5是否相同,若是相同,說明數據沒變,返回一個標示數據不變的字符串給client;若是不一樣,說明數據變了,返回變化數據的dataId和group給client.client收到變化數據的dataId和group,再去server請求一次數據,拿回數據後回調監聽器。

相關文章
相關標籤/搜索