1. 程式人生 > >[從原始碼學設計]螞蟻金服SOFARegistry 之 ChangeNotifier

[從原始碼學設計]螞蟻金服SOFARegistry 之 ChangeNotifier

# [從原始碼學設計]螞蟻金服SOFARegistry 之 ChangeNotifier [toc] ## 0x00 摘要 SOFARegistry 是螞蟻金服開源的一個生產級、高時效、高可用的服務註冊中心。 本系列文章重點在於分析設計和架構,即利用多篇文章,從多個角度反推總結 DataServer 或者 SOFARegistry 的實現機制和架構思路,讓大家藉以學習阿里如何設計。 本文為第十五篇,分析如何執行ChangeNotifier 來通知相關模組:hi,這裡有新資料變化來到了,兄弟們走起來。 ## 0x01 業務範疇 ### 1.1 概述 當有資料釋出者 publisher 上下線時,會分別觸發 publishDataProcessor 或 unPublishDataHandler,Handler 會往 dataChangeEventCenter 中新增一個數據變更事件,用於非同步地通知事件變更中心資料的變更。事件變更中心收到該事件之後,會往佇列中加入事件。 1. 此時 dataChangeEventCenter 會根據不同的事件型別非同步地對上下線資料進行相應的處理,即把這個事件變更資訊變成ChangeNotifier ,進而變成Operator,放到AbstractAcceptorStore; 2. 與此同時 DataChangeHandler 會把這個事件變更資訊通過 ChangeNotifier 對外發布,通知其他節點進行資料同步。 因為篇幅限制,前文對 ChangeNotifier 這部分只是略過,本文就詳細講解下事件變更通知ChangeNotifier。 這裡會再把整理流程串起來,會涉及到前面某些文章內容。 先給出圖示以便大家瞭解 ChangeNotifier 的作用。 ```java +--------------------+ | PublishDataHandler | +--------+-----------+ | | | publisher | v +---------+------------+ |DataChangeEventCenter | +---------+------------+ | | | ChangeData v +---------+------------+ | DataChangeEventQueue | +---------+------------+ | | | ChangeData v +-------+----------+ | DataChangeHandler| +-------+----------+ | | | ChangeData v +------+--------+ +------------+ | ChangeNotifier| +--------> | datumCache | +------+--------+ +------------+ | | v +---+------+ | notifier | +---+------+ | v +-----------+---------------+ | | v v +----+----------------+ +------+----------+ |SessionServerNotifier| | BackUpNotifier | +----+----------------+ +------+----------+ | | | | | | | v +--v------------+ +------+----------------+ | sessionServer | | AbstractAcceptorStore | +---------------+ +-----------------------+ ``` ### 1.2 資料變化 資料變化有兩個方向 - 資料伺服器節點變化; - 資料的變化,即Publisher和Scriber的變化; ChangeNotifier就是負責把 Publisher和Scriber的變化 通知給相關模組。變更通知就是一種解耦
。 ## 0x02 資料結構 我們首先需要看看通知的資料結構。 ### 2.1 介面定義 IDataChangeNotifier是通知的介面定義: ```java public interface IDataChangeNotifier {