APIRouter : 路由分發服務
API Router 是一個 HTTP 反向代理和負載均衡器,部署在公有云中作為 HTTP API 流量的入口,它能識別
出流量的歸屬 shard ,并根據 shard 將流量轉發到對應的 ezone 。 API Router 支持多種路由鍵,可以
是地理位置,也可以是商戶 ID ,訂單 ID 等等,最終由 API Router 映射為統一的 Sharding ID 。
Global Zone Service :全局狀態協調器
GZS 維護著整個多活的路由表,其他所有的服務都從 GZS 訂閱路由信息。切換機房的操作也在 GZS 控
制臺中完成。路由表包括:地理圍欄信息, shard 到 ezone 的歸屬信息,商鋪 ID /訂單 ID 等路由邏輯
層到 shard id 的映射關系等。 GZS 通過在 SDK 端建立 Cache ,來保證 shard 邏輯能夠最快速度執行,
基本不需要和 GZS 交互,同時也有實時推送機制,確保在數據變更后能夠快速通知到其他的服務。
SOA Proxy :內部網關
SOA Proxy 實現了對 SOA 調用的路由,執行和 API Router 相似的邏輯,但只用在機房之間進行通信的
場景。業務使用 SOA Proxy 需要對代碼做一些修改,把路由信息加入到調用的上下文中。
Data Replication Center :數據復制
DRC 負責 Mysql 數據的實時雙向復制,保證跨機房延時在 1s 以內。提供了基于時間的沖突解決方案,
確保各個機房的數據一致。 DRC 除了復制數據,還對外提供了數據變更的通知,讓業務能夠感知到其他
機房的數據變化,做相應的處理,例如清除 Cache 等。
除了 DRC ,我們還有 ZK 復制工具, RMQ 復制工具, Redis 復制工具,基本每個數據層次,都有對應的
復制方案。
Data Access Layer :數據訪問
數據訪問層支撐了 Globa Zone 的邏輯,還提供了最后一道保護,拒絕路由錯誤的數據寫入,是多活最 底層的支撐。
Mysql 數據復制工具 DRC:
Mysql 的數據量最大,每個機房產生的數據,都通過 DRC 復制到其他 ezone ,每個 ezone 的主鍵取值 空間是ezoneid + 固定步長,所以產生的 id 各不相同,數據復制到一起后不會發生主鍵沖突。按照分區 規則,正常情況下,每個 ezone 只會寫入自己的數據,但萬一出現異常, 2 個 ezone 同時更新了同一筆 數據,就會產生沖突。DRC 支持基于時間戳的沖突解決方案,當一筆數據在兩個機房同時被修改時,最 后修改的數據會被保留,老的數據會被覆蓋。
整體結構

推薦閱讀
設計:異地多活的實現思路和方法