[從原始碼學設計]螞蟻金服SOFARegistry之延遲操作
阿新 • • 發佈:2021-01-24
# [從原始碼學設計]螞蟻金服SOFARegistry之延遲操作
## 0x00 摘要
SOFARegistry 是螞蟻金服開源的一個生產級、高時效、高可用的服務註冊中心。
本系列文章重點在於分析設計和架構,即利用多篇文章,從多個角度反推總結 DataServer 或者 SOFARegistry 的實現機制和架構思路,讓大家藉以學習阿里如何設計。
本文為第十七篇,介紹SOFARegistry的延遲操作。
## 0x01 業務領域
### 1.1 業務緣由
為什麼要有AfterWorkingProcess?
AfterWorkingProcess 的作用是延遲操作。猜測大致是因為某些情況下,無法執行業務,只能在後續時機進行彌補。
在官方部落格有類似論述也支援我們的判斷 :
> 在資料未同步完成之前,所有對新節點的讀資料操作,將轉發到擁有該資料分片的資料節點。
>
> 在資料未同步完成之前,禁止對新節點的寫資料操作,防止在資料同步過程中出現新的資料不一致情況。
### 1.2 學習方向
可以看到類似這種業務上延遲操作應該如何實現。
## 0x02 實現
### 2.1 定義
介面定義如下:
```java
public interface AfterWorkingProcess {
void afterWorkingProcess();
int getOrder();
}
```
### 2.2 配置
這個 afterWorkProcessors 會作為 AfterWorkingProcessHandler 的成員變數進行處理。用於處理一些業務邏輯結束後的處理動作。
```java
@Bean(name = "afterWorkProcessors")
pub