一種多租戶系統架構

2021-08-27 22:12:37 字數 1827 閱讀 8034

背景:

去年的時候,因為某些特殊原因,有幸帶了乙個組,參與了

b2b平台的開發。說是

b2b平台,因為這套程式開發完了後,可以拿給多個客戶使用。客戶可以搭建一套具有京東**風格,那樣的**。然後允許商家在**上註冊,開店,或者賣東西,買東西,**的使用者定位為商家。

在需求分析完後,分為了三個組。

第乙個組是**組,主要負責:商家註冊,登入,前端**主站搭建,商品詳情頁,搜尋頁,購物車,下單頁,商品評價,仲裁等功能

第二個組是商家組:主要負責商家基本資訊維護,商品維護,

sku的庫存,上下架,訂單管理,發貨位址管理,會員管理,店鋪裝修,店鋪主站等

第三個組是平台管理,主要負責:類目,品牌管理,商家資訊申請審核,店鋪審批,商品發布審核,訂單結算,商品**管理,以及主站首頁輪播圖,樓層等管理。還有就是給我們自己運營人員用的一些功能:比如網域名稱和平台

id等功能的管理。

執行時架構圖:

:主要做多網域名稱對映,根據網域名稱對映到不同的

web server

,比如接受到網域名稱

a請求,則路由到

web server1

,接受到網域名稱

b請求,則路由到

web server2

web server

:主要是放網頁或者

web相關的,比如使用者登入業務等,客戶多變的需求都放到這層實現,比如有些客戶在要求自己的**註冊的商家,必須上傳運業執照,有些不需要等可變的需求

basic server

:後台服務,這層的服務都是共有的,對於每個使用者都不變的基礎服務都放這層,並且這層做資料庫路由,每個網域名稱乙個資料庫(每個客戶乙個資料庫,做資料隔離,當時個人還不同意,從事後來看,這種架構確實好處比較多,特別是客戶以前就有乙個**,然後在往新庫里導資料,然後又刪新庫里的資料時,不擔心會把其它客戶的資料刪掉)。

db :每個客戶乙個資料庫,做到資料上的邏輯隔離和物理隔離(當時設想每個外部客戶

1個網域名稱,然後在資料庫的每個表裡加平台

id以區分是那個外部客戶的資料,後來架構師力排眾議,每個客戶

1個資料庫,做到資料隔離,

basic server

做資料庫路由)

如何做資料庫路由?

web server

根據請求的

url,拿到網域名稱,然後查出平台id。

basic server

中的每個介面,都需要帶平台

id欄位。

web server

呼叫basic server

介面時,傳入平台

id。然後在

basic server

的service

層,做aop

,根據引數裡的平台

id,找到配置好的平台

id和資料庫連線資訊,把連線資訊放入

threadlocal

,包裝自己的

datasource

,在datasource

裡獲得資料庫連線時,用

threadlocal

裡的資料庫連線資訊,獲得資料庫連線,方法執行完,清楚資料庫連線(這裡曾出現過小問題,

service

巢狀套用的時候,裡面

service

方法退出清楚資料庫連線,導致外面

service

在運算元據庫時,拿不到連線資訊而報錯,後來增加了乙個呼叫層次計數)

多租戶mysql架構 關於多租戶架構

多租戶架構能使oracle資料庫可用作多租戶容器資料庫 cdb 乙個多租戶容器資料庫 cdb 包含0個或多個自定義的可插拔資料庫 pdbs pdb是乙個包含schemas,schema objects,nonschema objects的集合。在12c之前,所有的oracle資料庫都是非cdb。1....

Salesforce多租戶架構

多租戶架構 multitenancy 已成為軟體行業的乙個口號。你只要詢問某家公司它對這個主題有什麼看法,就能判斷該公司從事什麼業務。對於靠該架構起家的公司 salesforce。com和谷歌 而言,多租戶架構必不可少。對於傳統的老牌開發商 微軟 sap和甲骨文 而言,多租戶架構分別被認為是一種威脅...

MyBatis Plus 多租戶架構

1.多租戶概念 多租戶是一種軟體架構技術 單例項架構 是實現如何在多使用者 面向企業使用者 環境下公用相同的系統或程式元件,並且確保各使用者間資料的隔離性。核心就是在同一套程式下實現多使用者資料的隔離性。2.資料隔離方案 以mysql為例 a.獨立資料庫,相同的表 即乙個租戶乙個資料庫,該方案的使用...