何謂多租戶模式? - IT閱讀
文章推薦指數: 80 %
原文:何謂多租戶模式? ... 多租戶模式的定義:單個產品實例為多個用戶提供服務,同時用戶可按需購買使用產品資源,用戶數據相互隔離。
定義裏的用戶即租戶 ...
何謂多租戶模式?
首頁
最新
HTML
CSS
JavaScript
jQuery
Python3
Python2
Java
C
C++
Go
SQL
首頁
最新
Search
何謂多租戶模式?
2019-02-20254
cti租戶ref不同的過程行數問題第三章我們原文:何謂多租戶模式?一、什麽是多租戶模式
多租戶模式的定義:單個產品實例為多個用戶提供服務,同時用戶可按需購買使用產品資源,用戶數據相互隔離。
定義裏的用戶即租戶,租戶狹義上理解就是使用系統的人。
廣義上來說還應該包括創建的系統、數據等一切與當前租戶有關的系統資源。
二、舉個栗子
2.1傳統模式
假設我們有一個學生管理系統,有課程查詢、成績查詢兩個功能,每個學生都有賬號可以登陸,使用系統中的這兩個功能。
然後我們把這個系統賣給很多個學校去使用,這時候需要給每個學校去部署一套系統。
2.2多租戶模式
還是上面的系統,結合第一章節的定義,我們看多租戶模式下的系統架構,這時候我們只有一個學生管理系統實例,每個學校使用的時候首先以學校為單位進行租戶創建,然後可以按需購買系統功能,比如只需要成績查詢,這裏的每個學校就是一個租戶。
三、幾種數據隔離模式
3.1共享數據表,租戶ID隔離
這種模式也是我們平日裏系統隔離用戶使用的模式,既在表中加一個用戶ID字段,多租戶這裏就是在表中多加一個租戶ID字段進行數據區分,登陸哪個租戶就通過ID查詢到對應租戶的數據。
拿成績表的查詢SQL舉例就是:
select*fromt_scorewheretenantid=‘租戶的ID‘
3.2共享數據庫,Schema隔離
該模式就是共享一個數據庫實例,然後根據租戶建立多個Schema,以Mysql數據庫為例,就是建立多個Mysql用戶,每個Mysql用戶下都有完整的系統表。
這裏在系統開發時就需要根據租戶動態進行數據源切換,獲取對應租戶的Schema。
3.3獨立數據庫
該模式就是完全獨立數據庫實例,還以Mysql數據庫為例,就是裝有很多個Mysql服務,每個租戶對應一個實例,每個實例下具有相同的Schema和表。
這裏也需要在系統開發時根據租戶動態進行數據源切換,獲取對應租戶的數據庫實例。
四、實現多租戶系統的幾個關鍵點
將一個傳統模式的系統,改成多租戶架構,大的方面來說,只需要做好這兩點即可實現,也是最關鍵的兩點。
4.1租戶管理
上面3.1給了一個SQL,這個SQL在實際開發時,會發現是不可用的,滿足不了需求,為什麽呢?回到上面的學生管理系統,想想看,學校管理員購買了一個租戶系統,而具體使用系統的人是學生,是學生在查成績,先想一個問題,學生的數據從哪來?
(1)學校管理員添加
也就是學校管理員創建了租戶系統後,在後臺通過學生添加功能進行學生信息錄入,這不就有了學生信息了,也容易關聯上租戶ID,看著好像沒有問題,我們來捋一下執行過程。
學生訪問系統->輸入賬號密碼,點登陸後->3.1模式因為數據源是一個,所以直接連上查t_student表->對比用戶名、密碼->找到且密碼正確即認為登陸成功。
例外情況1:假如學生張三由學校A轉到了學校B,這時候學校A的租戶和學校B的租戶都有了張三的信息,這時候有兩條數據,怎麽比對?這時候就不對了,租戶ID還無法確定。
這時候就需要下面的兩種方案。
例外情況2:假如使用的是3.2或3.3的數據隔離模式,相當於有多個數據源,這時候登陸時連接哪一個數據源查?這時候也就不對了。
租戶ID還無法確定。
這時候同樣需要下面的兩種方案。
(2)學生註冊為租戶
方式一:學校想添加學生A,可以輸入學生A的郵箱地址,發送邀請,學生A收到郵件邀請,登陸平臺註冊為租戶(不創建系統),註冊後自動進入發送邀請學校的學生庫。
方式二:學生A直接登陸平臺註冊為租戶,學生A將註冊信息提供給學校管理員,學校管理員添加到學生庫。
存儲租戶的租戶表本身是共享的。
然後需要「租戶學生表」(創建系統的租戶ID,學生租戶ID)
這時候登陸並查詢成績流程就是:學生輸入用戶名、密碼->查詢租戶表->登陸成功->查詢租戶學生表->選擇對應的租戶學校->進入租戶系統首頁->查詢成績
(3)特定登陸地址
即給每個租戶購買系統後,生成特定獨有的登陸地址,帶有學校的租戶ID,然後將登陸地址共享給學生即可。
這也可以解決租戶ID無法確定的問題。
而且無需學生註冊為租戶。
4.2數據路由
數據路由是數據隔離後的關鍵點,3.1模式下即實現SQL的包裝,做一層AOP,查詢的時候在原來的SQL上附加
wheretenantid=‘‘andstudentid=‘‘
3.2、3.3則需要根據租戶ID動態切換數據源,代碼層面即獲取不同的Connection,實現細節限於篇幅,此處不展開了。
五、總結
其實如果拋開商業模式來說,淘寶、京東包括我們常見的系統從技術架構上看都可以算是一種多租戶系統,為什麽?
因為首先是單實例可以支持多用戶的,其次數據是可以根據用戶ID隔離的(同第三章節「共享數據表,租戶ID隔離」模式)。
從整體架構上看又不是,為什麽?首先不滿足的是系統功能不是按需付費,像淘寶每個會員進去功能都是一樣的,不能按需挑選功能,你說我不要訂單功能,可能嗎?顯然不可能,你要不要訂單功能就在那。
另外功能免費。
還有就是商業模式的問題,不是將軟件本身作為服務銷售,還拿淘寶來說,它售賣的是淘寶上的商品,而不是淘寶軟件本身的功能。
所以模式上不是SAAS,嚴格上就不算多租戶系統。
最後給大家一個公式,完整的多租戶模式=多租戶商業模式+多租戶技術架構。
PS:可關註「風象南講全棧」公眾號,有機會成為作者微信私人好友何謂多租戶模式?
相關文章
何謂多租戶模式?
SaaS架構設計之如何轉化成SaaS多租戶模式
利用多租戶模式演化成分庫分表和讀寫分離
工作日誌,多租戶模式下的資料備份和遷移
SaaS多租戶模式資料儲存方案
近乎產品MVC架構介紹-多租戶模式
Linux7個運行級別(0:關機,停機模式、1:單用戶模式、2:多用戶模式、3:完整的多用戶文本模式、4:系統未使用,保留一般不用、5:圖形化模式、6:重啟模式)、重置root密碼方法
EEPlatPaaS中的多租戶數據隔離模式
如何自行實現一個多租戶系統
EF多租戶例項:如何快速實現和同時支援多個DbContext
web應用程式轉化為多租戶SaaS技術探討及解決方案
OracleDBCA高階玩法:從模板選擇、指令碼呼叫到多租戶
如何在多Kubernetes叢集和多租戶環境中使用Prometheus監控
如何使用策略模式處理多種請求
SaaS“可配置”和“多租戶”架構的幾種技術實現方式
分類導航
HTML/CSS
HTML教程
HTML5教程
CSS教程
CSS3教程
JavaScript
JavaScript教程
jQuery教程
Node.js教程
服務端
Python教程
Python3教程
Linux教程
Docker教程
Ruby教程
Java教程
JSP教程
C教程
C++教程
Perl教程
Go教程
PHP教程
正則表達式
資料庫
SQL教程
MySQL教程
PostgreSQL教程
SQLite教程
MongoDB教程
Redis教程
Memcached教程
行動端
IOS教程
Swift教程
Advertisement
三度辭典
Copyright©2016-2021IT閱讀
Itread01.comAllRightsReserved.
0.001291036605835
延伸文章資訊
- 1雲端服務單租戶與多租戶模式分析 - iT 邦幫忙
[雲端信箱多租戶模式(Multi-Tenancy) ]. https://ithelp.ithome.com.tw/upload/images/. 以網域(Domain) 為單位,從 ...
- 2SaaS的多租戶模式(Multi-tenancy)實踐:.NET Core + Entity ...
Net Core + Entity Framework Core 來實現一個多租戶模式的例子。這個例子要符合三個要求:. 根據不同請求域名(Request Host Name),返回對應的客戶資...
- 3多租戶技術- 维基百科,自由的百科全书
多租戶技術(英語:multi-tenancy technology)或称多重租赁技术,是一種軟體架構技術,它是在探討與實作如何於多用戶的環境下共用相同的系統或程式元件,並且仍可確保 ...
- 4什麼是多租戶模式?這種模式有何優缺點? - 壹讀
多租戶就是說多個租戶共用一個實例,租戶的數據既有隔離又有共享,從而解決數據存儲的問題。從架構層面來分析,SaaS區別於傳統技術的重要差別就是Multi- ...
- 548.有關雲端運算的多租戶模式(Multi-tenant model),下列敘述..
有關雲端運算的多租戶模式(Multi-tenant model),下列敘述何者正確? (A)是一種商業計價模式,將雲伺服器的計算資源同時分租給多個用戶 (B)是一種軟體技術架構,由一個 ...