cached根據protobuf的元數據機制去保存和讀取數據庫中的數據。
為了簡化服務器交互的復雜度,邏輯服務器用的protobuf和cached的protobuf,數據結構要完全1致。
不1致的話,會出現不肯定的毛病。比如,邏輯服務器用Msg1序列化數據,傳給cached, cached卻用Msg2去解析,重組,保存到DB。結果就全亂了!
所以,邏輯服務器連接cached成功后,先要保證protobuf是1致的。
1. logicd從cached獲得Message名字列表和所有Message的總MD5
Message列表名字,每個文件只須給出1個Message名字便可
這些數據在cached啟動的時候,1次性生成便可。
2. logicd根據返回的Message名字列表,反查Message所在文件的所有Message,算出總MD5,判斷該MD5是不是和返回的MD51致。
關于MD5計算
cached和logicd計算進程不1樣。
cached
cached的protobuf的對象都從proto文件導入,動態生成protobuf對象。
1. 通過Import獲得DescriptorPool;
2. 通過DescriptorPool::FindFileByName(...)獲得各個FileDescriptor;
3. 從FileDescriptor,計算出MD5,最后計算總MD5。
logicd
logicd的protobuf都是編譯進來的,通過DescriptorPool::generated_pool()獲得DescriptPool對象。后面步驟和cached1樣。