軟件設計師的庫
內容
- 介紹
- 單租戶vs多租戶
- 數據庫和多租戶
- 真實示例
- 優點
- 缺點
- 用例
- 概要
1.簡介
在多租戶環境中,多個客戶(租戶)共享相同的應用程序,它們在相同的操作系統上,相同的硬件上以相同的數據存儲機制運行。客戶之間的區別是在應用程序設計期間實現的。客戶不會共享或看到彼此的數據。與每個用戶都有自己專用環境的專用系統相比,這樣做的主要動機是降低每位用戶的成本。
> In a multi-tenant Application, most of the software stacks — up until the application itself, — are shared by the different tenants.
軟件即服務(SaaS)應用程序經常使用多租戶。SaaS的本質歸結為以下事實:供應商開發軟件,將其放置在服務器上,維持其性能,安全性,客戶可用性(通常為復數形式),支付服務器費用和其他費用。對于客戶而言,這種方法更便宜,而對于賣方而言則是值得的(因為它解決了許可和盜版問題,而且最重要的是,可以為多個客戶提供一項服務)。
2.單租戶vs多租戶
2.1單租戶
該軟件和支持基礎結構的單個實例為單個客戶提供服務。通過單一租賃,每個客戶都有自己的獨立數據庫和軟件實例。本質上,此選項不會發生共享。
2.2多租戶
多租戶意味著該軟件及其支持基礎結構的單個實例為多個客戶提供服務。每個客戶共享該軟件應用程序,還共享一個數據庫。每個租戶的數據都是孤立的,其他租戶看不到。
> Single-Tenant and Multi-Tenant architectures comparison
3.數據庫和多租戶
3.1一個通用數據庫,一個通用模式
一切都存儲在一個數據庫和公用表中。要實現此選項,先決條件是引入一個附加的字段TenantID(或您喜歡的CustomerID)以分隔客戶之間的信息。
好處:
- 當我們將所有信息存儲在一組表中時,更易于開發,更新和維護
- 添加客戶就像在客戶表中創建新記錄一樣簡單
缺點:
- 沒有靈活性,所有客戶端都使用同一組表和列。出現了非典型客戶會導致問題和打補丁。
- 浪費人力和精力開發自己的權限分離系統:(
- 備份和恢復問題。一個表不能簡單地刪除和創建,因為它包含其他客戶端的數據。您必須查找所需的行并將其覆蓋,這很麻煩。
解析度:
如果您有很多客戶并且缺乏資金/服務器,并且所有硬盤驅動器不會同時消失,那么這是個不錯的選擇。
3.2一個通用的數據庫,不同的模式
來自不同客戶端的信息存儲在不同的表中。模式是包含某些資源(例如表)的“命名空間”,可以在其上授予某些權限。
好處:
- 由于有了這些架構,訪問共享發生在DBMS級別,因此不需要我們進行其他開發(我們節省了工時)
- 更少的數據庫-更少的硬件資源,再次保存
- 可擴展性不錯-在添加客戶端時,我們會基于標準架構創建一個新架構,配置訪問權限,然后完成。盡管所有架構都基于標準架構,但由于保留了隔離性,因此它們可能會發生一些更改,因此可以編輯列,表等。
缺點:
- 由于表在邏輯上而不是物理上分開,因此不同客戶的數據存儲在一起。
- 備份和恢復存在問題。因為只有一個數據庫,所以如果來自一個客戶端的表已折疊,則數據庫的簡單回滾將把所有客戶端的數據返回到過去,這是不可接受的。在這里,您將需要選擇性地回滾以及合并新舊數據。該過程比僅回滾整個數據庫要復雜一些。
解析度:
如果客戶準備好生活在共享環境中,則選擇均衡的方案。
3.3分開的數據庫
代碼在客戶端之間共享(使用通用的UI和業務邏輯),數據在邏輯上(可能物理上)在客戶端之間共享。
好處:
- 簡單的可擴展性(添加客戶端足以創建和配置新數據庫)
- 輕松擴展-您可以在不同的服務器上分發不同客戶端的數據庫
- 個性化-您可以為某些客戶端進行個別設置(甚至將數據庫放置在另一個DBMS上)
- 簡單備份-如果某個客戶端在數據庫回滾期間發生故障,則其他客戶端不會受到任何影響;
缺點:
- 昂貴。一臺服務器支持的數據庫數量有限,這意味著這種解決方案將需要更多的硬件(而不是將所有內容存儲在一個數據庫中的方法),更多的硬件-更多的管理員,服務器機房空間和電費
- 再次昂貴。當一臺服務器上有多個數據庫,其總容量大于RAM大小時,數據將被轉儲到交換文件中,因此訪問硬盤非常慢。出路是購買更多服務器
解析度:
對于主要目標是安全性且愿意付款的客戶(例如銀行),這是最佳解決方案。
4.實際例子
> Serverless single database multi-tenant architecture on google Cloud
5.優勢
- 節省成本:共享環境成本,這些節省(來自供應商)通常轉移到軟件成本中。
- 數據聚合:不是從可能具有不同數據庫模式的多個數據源收集數據,而是將所有客戶的所有數據存儲在單個數據庫模式中。因此,在客戶之間運行查詢,挖掘數據并尋找趨勢要簡單得多。
- 簡化版本管理:該軟件包僅需要安裝在單個服務器上。相同的軟件版本對所有客戶可用。
- 供應商利用的維護和更新:客戶無需支付昂貴的維護費用即可保持軟件最新。供應商推出新功能和更新。
6.缺點
- 開發的復雜性增加:由于額外的自定義(自定義品牌,工作流程中的差異,數據模型的擴展,訪問控制),以及維護每個租戶元數據的需求,因此多租戶應用程序需要進行更大的開發工作。
- 增加的新發行版風險:由于只有一個軟件實例為多個租戶服務,因此即使請求更新并且僅對一個租戶有用,對該實例的更新也可能導致所有租戶停機。此外,應用新版本導致的一些錯誤和問題可能會在其他租戶對應用程序的個性化視圖中體現。
- 有限的自定義:雖然您確實增加了集成優勢,但是對數據庫的自定義更改通常不是一個選項,因為它在多個用戶之間共享。
- 降低的安全性:由于在同一數據庫上允許多個用戶(與您的組織不相關),因此這種更廣泛的訪問降低了對安全性的控制。示例如下:一個租戶可以訪問鄰居的數據,數據被意外返回給錯誤的租戶,或者一個租戶在資源共享方面給另一個租戶帶來了負面影響。可以利用這些漏洞謀取個人利益。
- 糟糕的性能:您的共同租戶可能正在消耗共享資源并拖慢了速度。容量應該具有彈性并可以根據需要擴展,但并非總是如此。
- 更新:如果您依賴與其他SaaS產品的集成并且更新了其系統,則可能會導致這些連接的應用程序出現問題。
7.用例
- 軟件即服務(SaaS)/應用即服務(AaaS)
- 平臺即服務(PaaS)
- 基礎架構即服務(IaaS)[可用于服務的硬件和軟件]
- 通常,多個客戶使用相同的算法,數據,應用程序堆棧。核心功能可以相同或模塊化,并且可以基于每個客戶端進行自定義。
8.總結
- 多租戶=該軟件及其支持基礎結構的單個實例為多個客戶提供服務。每個客戶共享該軟件應用程序,還共享一個數據庫。每個租戶的數據都是孤立的,其他租戶看不到。
- 使用一個數據庫,一種通用模式可以節省金錢(使用更少的服務器),但代價是更大的安全性和備份風險以及更大的開發工作量。除非您知道分區是什么,否則;)使用一個數據庫和多個模式作為成本與開發工作/安全性和備份風險之間的平衡平衡。對于主要目標是安全性并準備為此付費的客戶,請使用單獨的數據庫。
- 好處包括簡化的數據聚合,發布,更新,維護管理;他們通常更具成本效益
- 缺點包括復雜的開發,發行和更新風險,有限的自定義,降低的安全性和較差的性能。
- 當多個客戶使用相同的算法,數據和應用程序堆棧時,可用于SaaS,PaaS,IaaS應用程序。核心功能可以相同或模塊化,并且可以基于每個客戶端進行自定義。
(本文由聞數起舞翻譯自Lokajit Tikayatray的文章《Multi-Tenant Architecture》,轉載請注明出處,
原文鏈接:https://levelup.gitconnected.com/multi-tenant-architecture-8c1f597e069c)