服務(wù)讀寫分離(讀服務(wù),寫服務(wù)),是否可行?
系統(tǒng)分層架構(gòu)有一個(gè)迭代和演進(jìn)的過程,早期,系統(tǒng)分層架構(gòu)如下:
- 上游是需要數(shù)據(jù)的業(yè)務(wù)調(diào)用方
- 下游是存儲數(shù)據(jù)的數(shù)據(jù)庫
隨著架構(gòu)的演進(jìn),可能要抽取出服務(wù)層(詳見《互聯(lián)網(wǎng)架構(gòu)為什么要做服務(wù)化?》):
- 上游通過RPC調(diào)用服務(wù)獲取數(shù)據(jù)
- 中間服務(wù)層從數(shù)據(jù)庫獲取數(shù)據(jù)
- 下游是存儲數(shù)據(jù)的數(shù)據(jù)庫
大家都知道,數(shù)據(jù)庫可以讀寫分離,為了職責(zé)更清新,架構(gòu)設(shè)計(jì)上,服務(wù)能否讀寫分離呢?
如上圖,服務(wù)化讀寫分離之后:
- 業(yè)務(wù)方通過RPC分別調(diào)用讀服務(wù)和寫服務(wù)
- 服務(wù)層分為讀服務(wù)與寫服務(wù)
- 底層是高可用的數(shù)據(jù)庫集群
當(dāng)然,也有可能讀服務(wù)與寫服務(wù)讀寫的是不同的數(shù)據(jù)庫,如上圖:
- 寫服務(wù)訪問寫庫
- 讀服務(wù)訪問讀庫
寫庫與讀庫是一個(gè)主從同步的集群。
那么,問題來了:
- 你遇到過這種架構(gòu)設(shè)計(jì)么?
- 這種架構(gòu)設(shè)計(jì)好還是不好,為什么?
- 如果服務(wù)讀寫分離設(shè)計(jì)好,上面兩種方案哪種好?
【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】