資料接入層設計的2 3法則 應對分布式與多元化儲存

2022-04-08 01:37:56 字數 1960 閱讀 4629

如今移動網際網路行業呈爆發式發展,隨著業務使用者規模和業務邏輯趨向複雜,後端系統的開發和維護變得越來越困難,目前業界湧現出各種各樣的技術文章介紹分布式快取設計、分布式資料庫設計、負載均衡、ha策略等等,這些都是支撐分布式資料訪問層的基石,不過,本文將從另乙個角度**分布式資料訪問層 (data access layer)的框架設計。

1)從水平與垂直維度正交分析業務系統設計;

2)定義3條必須遵守的設計原則,最重要的是dal層從水平維度抽象資料訪問策略模型,即個3原則中的第3條。

本文最後一節,對分布式資料訪問框架做了**,提出了兩種實現思路。

在分布式系統中,每一台伺服器都需要訪問本地快取、分布式mc快取、分布式後台資料庫,對於同乙個業務模組,隨著業務變複雜,需要定義越來越多的資料model,按照一定的規則儲存在本地快取、分布式快取以及後台資料庫中。

目前,業界的資料訪問層定位於應用程式與持久化資料庫之間,比如**的tddl、ibatis sharding等,主要完成資料的分庫分表、讀寫分離等,本文的資料儲存涵蓋快取、資料庫、檔案系統,現有的資料庫dal中介軟體、redis客戶端、mc客戶端將作為本文的水平維度的adaptor,主要解決的問題:

資料訪問在水平資料儲存維度的一致性問題。

快速增加資料model的能力。

優雅、清晰、模組化的資料訪問層**。

對於上節的問題,下面列舉了水平和垂直維度抽象思考的例子。

假設水平維度:

部分熱資料儲存在本地快取,本文使用ehcache。

部分熱資料儲存在前端快取,本文使用mc。

全量資料儲存在資料庫快取,本文使用mysql。

假設垂直維度:

按照上面的分析,我們畫出系統兩個維度正交設計圖,如下:

我們可以想到垂直維度定義n = 3個資料模型介面,水平維度定義n = 3個分層介面,但是水平維度和垂直維度是什麼關係呢?

在本文的設計中,對問題做了進一步思考,水平維度的介面全部由垂直維度的資料模型介面組合(composition)而成,完成所有業務只需要定義n + m + 1個介面,而不是n * m + 1個介面,多餘的那個是dal介面,完成資料訪問層封裝工作,第一節例子中的介面定義見下圖:

上節主要介紹了介面設計,這裡說一下實現,資料模型類非常簡單,只要mc client、tddl、ehcache在不同層完成相應介面實現,最重要的是dal實現類,需要完成水平各個維度的策略儲存,比如對乙個model,順序寫入mc和mysql,根據業務實踐經驗,總結出3條設計原則:

每乙個資料模型都有crud方法,即資料操作的增刪改查,對於mc或者localcache來說,增加操作和修改操作可能是一致的,這種情況也必須嚴格定義crud方法。

dal層封裝所有的資料訪問,保證資料的一致性儲存和可靠性,dal層的實現呼叫ilocalcacheservice、imcservice、idaoservice,根據不同資料模型的儲存策略,分別去呼叫快取和資料庫服務,資料模型如果僅存在mysql或者mc,也需要在dal層做封裝,這樣雖然對開發效率有一定影響,但是整體開發和維護成本降低很多。

dal實現抽象出乙個dalcontext和乙個executor,對於不同的資料模型,配置出不同的dalcontext,比如順序儲存在mc和mysql或者同步寫入mc非同步寫入mysql,dal也需要負責出錯處理、水平維度的容災切換等。

對於網際網路後端應用來說,最主要的功能就是處理資料,對dal層的探索與優化是非常有價值的,基於本文提出的2-3法則,感興趣的讀者可以構建乙個dal開源專案,有兩種思路。

第一種思路是:

定義資料模型以及儲存配置策略規範,可以使用類似protobuf的規範。

根據業務定義的資料模型和儲存配置策略,生成業務**。

開發者在此基礎上擴充完善業務**。

第二種思路是:

定義資料模型以及儲存配置策略規範,可以使用類似protobuf的規範。

開發dal中介軟體(容器),根據業務定義的資料模型和儲存配置策略,執行時完成所有的資料訪問操作**。

第一種相對容易,第二種比較複雜,讀者可以自己選擇其中一種。

原文:

App架構設計經驗談 資料層的設計

資料層,是三層架構中的最底層,負責資料的管理。它主要的任務就是 呼叫網路api,獲取資料 將資料快取到本地 將資料交付給上一層。根據這三個任務,資料層可以再拆分為三層 網路層 本地資料層 交付層。網路層主要就是對網路api的封裝。關於api的設計,該系列的第一篇文章介面的設計已經講過一些。關於如何封...

App架構設計經驗談 資料層的設計

寫於2016 01 07 使用者用密碼登入成功後,伺服器返回token給客戶端 客戶端將token儲存在本地,發起後續的相關請求時,將token發回給伺服器 伺服器檢查token的有效性,有效則返回資料,若無效,分兩種情況 然而,此種驗證方式存在乙個安全性問題 當登入介面被劫持時,黑客就獲取到了使用...

Winform開發框架之資料訪問層的設計

前面介紹過,該winform開發框架支援多種資料庫的訪問,只需要對配置進行修改即可切換,如下圖所示。其中我們可以看到,裡面有幾種資料訪問層的相關資料,大致知道是通過同一的idal資料訪問層介面派生出幾個對應不同資料庫的操作層,由業務邏輯層bll進行相應的呼叫,但是具體細節從上圖並不能了解到。其實他們...