何謂多租戶模式? - IT閱讀

文章推薦指數: 80 %
投票人數:10人

原文:何謂多租戶模式? ... 多租戶模式的定義:單個產品實例為多個用戶提供服務,同時用戶可按需購買使用產品資源,用戶數據相互隔離。

定義裏的用戶即租戶 ... 何謂多租戶模式? 首頁 最新 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



請為這篇文章評分?