徹底理解微商城多租戶Saas架構設計

来源:https://www.cnblogs.com/qingmiaokeji/archive/2020/07/28/13389428.html
-Advertisement-
Play Games

徹底理解微商城多租戶Saas架構設計 原文鏈接:https://blog.csdn.net/haponchang/article/details/104246317,感謝作者提供這麼好的總結! 1.具體的SaaS架構必須 1.先仔細選擇最適合應用程式需求的租戶模型, 2.需要根據租戶模型來選定最終的 ...


徹底理解微商城多租戶Saas架構設計

原文鏈接:https://blog.csdn.net/haponchang/article/details/104246317,感謝作者提供這麼好的總結!

1.具體的SaaS架構必須

1.先仔細選擇最適合應用程式需求的租戶模型,

2.需要根據租戶模型來選定最終的架構,即應用程式設計和管理、每個租戶的數據如何映射到存儲等等。

避免因租戶模型的切換而付出昂貴的代價。

租戶模型  --》 應用程式設計 + 數據設計方案

2.影響租戶模型的相關因素包括:

2.1可擴展性(Scalability)

  • 租戶的數量級
  • 每個租戶的存儲級別
  • 整體存儲
  • 工作負載

2.2租戶隔離性(Tenant isolation)

  • 數據隔離和性能(是否一個租戶的負載會影響到其他租戶)

2.3單租戶成本(Per-tenant cost)

  • 資料庫成本

2.4 開發複雜度(Development complexity)

  • 數據結構的變化
  • 查詢語句的變化

2.5運維複雜度(Operational complexity)

  • 性能監控
  • 數據結構schema管理
  • 租戶數據恢復
  • 災備

2.4可定製化程度(Customizability)

根據租戶的需求自定義架構的容易程度
這個租戶的討論集中在數據層。但考慮一下應用層。應用程式層被視為一個整體實體。如果將應用程式劃分為許多小型組件,您的租戶模型選擇可能會發生變化。對於租戶和存儲技術或使用的平臺,您可以對其他組件進行不同的處理。

3 常見的架構模式有以下幾種:

3.1獨立服務+獨立資料庫

這個模型中,應用層和數據層都是隔離的。

應用程式的每個實例都是獨立實例。

租戶擁有自己獨立的資料庫,每個應用程式實例只需要一個資料庫。

對租戶的管理獨立於系統之外,對於每一個租戶,整個應用程式需要重覆安裝一次。供應商都可以為租戶管理軟體。每個應用程式實例都配置為連接到其相應的資料庫。

優點:為不同的租戶提供獨立的應用實例和資料庫,有助於簡化數據模型和業務模型的擴展設計,滿足不同租戶的獨特需求;如果出現故障,恢復系統或數據均比較簡單,系統間也不會相互影響。

問題:資料庫層面,每個租戶資料庫都作為獨立資料庫進行部署。該模型提供了最大的資料庫隔離。但隔離需要為每個資料庫分配足夠的資源來處理其高峰負載。這裡重要的是, 彈性池不能用於部署在不同資源組或不同訂閱中的資料庫。這種限制使得這種獨立的單租戶應用程式模型成為從整體資料庫成本角度來看最昂貴的解決方案;應用層面,每個租戶若存在個性化定製,則需要對項目進行橫向擴展,擴展時務必需要保證與主幹版本的相容性問題。運維層面,應用和資料庫的安裝數量會隨租戶的數量線性遞增,隨之帶來維護成本和購置成本的增加。

3.2一套服務+獨立資料庫

這個模型中,應用層是共用的,數據層都是隔離的

應用程式僅部署一套,所有租戶實例共用。

租戶仍擁有自己獨立的資料庫,應用程式需對接多個租戶的資料庫。

對租戶的管理由配置中心(Config Server)管理,配置中心提供了配置,監視和管理共用所需的功能,供應商使用這些工具為租戶管理軟體。對於每一個租戶,整個應用程式僅需要安裝一次,應用程式實際請求結合配置中心請求相應的資料庫。

優點:為不同的租戶提供獨立資料庫,有助於簡化數據模型擴展設計,滿足不同租戶的獨特需求;如果出現故障,數據恢復均比較簡單,也可以自動將單個租戶恢復到較早的時間點。因為恢復只需要恢復存儲租戶的一個單租戶資料庫。這種恢復對其他租戶沒有影響,這證實了管理運營處於每個租戶的細粒度級別。應用層面的維護成本和購置成本有所減少。

問題:資料庫層面,同模型一;應用層面,每個租戶若存在個性化定製,則需要對項目進行橫向擴展,擴展時務必需要保證與主幹版本的相容性問題。運維層面,資料庫的運維問題同模式一,應用層面的運維在版本控制的問題上難度有所增加。

3.3 一套服務+一套資料庫(不同schema)

這個模型中,應用層是共用的,資料庫共用,但數據是隔離的。

應用程式和資料庫僅部署一套,所有租戶共用。

多個或所有租戶共用Database,也就是說共同使用一個資料庫,但是每個租戶一個Schema(也可叫做一個user),使用表進行數據隔離資料庫。底層庫比如是:DB2、ORACLE等,一個資料庫下可以有多個SCHEMA。

應用程式需對接多個租戶的資料庫。

對租戶的管理由配置中心(Config Server)管理,同模式二。

優點:為安全性要求較高的租戶提供了一定程度的邏輯數據隔離,並不是完全隔離;每個資料庫可支持更多的租戶數量。

問題:資料庫層面,如果出現故障,數據恢複比較困難,因為恢複數據庫將牽涉到其他租戶的數據;應用層面,配置中心需要對租戶信息進行完整且合理的分配和維護。

3.4 一套服務+一套資料庫(相同schema)

模型與模型三的差別在於共用資料庫,共用 Schema,共用數據表。也就是說共同使用一個資料庫一個表使用欄位進行數據隔離。如表中增加TenantID多租戶的數據欄位。這是共用程度最高、隔離級別最低的模式。

簡單來講,即每插入一條數據時都需要有一個客戶的標識。這樣才能在同一張表中區分出不同客戶的數據,這也是我們系統目前用到的(tenant_id)。

優點:方案的維護和購置成本低,允許每個資料庫支持的租戶數量最多。

缺點:隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;數據備份和恢復最困難,需要逐表逐條備份和還原。

3.5網關+前臺+中台+數據存儲

模式五與之前的模式的最大區別是,在原有的web Service進行細化拆分,優化成 網關+前臺+中台+數據存儲的模式。

網關用於接收租戶的請求,併發送給前臺。

前臺的數量與租戶一致,每一個租戶對應一個前臺服務,方便針對租戶進行個性化定製。

中台負責提供處理所有的業務請求,中台不關心租戶是誰,將重心關註在業務的處理上。配置中心用於配置租戶的介面許可權、流程定製等相關配置信息。結合業務邏輯返回給前臺特定租戶的相關信息。

資料庫模式參考模式四。

優點:有利於定製不同租戶的個性化需求。例如:交互界面不同、工作流不同等等。

服務只需要根據用戶需求在前臺做相應的橫向擴展即可;

不同租戶間服務相互獨立,互不影響。

缺點:模塊劃分需要做好劃分,重點註重業務之間的低耦合;

調用鏈路變長,需要做一定的優化處理;

模塊縱向拆分後,後期研發和運維難度均會有所增加;

好文收集不易,請轉發或在看,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MVC 與 Vue 本文寫於 2020 年 7 月 27 日 首先有個問題:Vue 是 MVC 還是 MVVM 框架? 維基百科告訴我們:MVVM 是 PM 的變種,而 PM 又是 MVC 的變種。 所以一定程度上來說,三者的思想方向是一樣的。所以不管 Vue 是 MVC 還是 MVVM 或者都不是 ...
  • 如果父組件監聽到子組件掛載mounted做一些邏輯處理 1、使用on和emit 子組件emit觸發一個事件,父組件emit觸發一個事件,父組件on監聽相應事件。 // Parent.vue <Child @mounted="doSomething"/> // Child.vue mounted() ...
  • 動態規劃整體思路是用遞歸問題求解,然後對遞歸過程中存在的大量重疊子問題進行優化, 自頂向下的求解的思路為記憶化搜索,自底向上的解決問題的思想就是動態規劃,自頂向下的求解通常更好理解,我們理解後在改成自底向上的動態規劃求解; 劍指 Offer 10- I. 斐波那契數列寫一個函數,輸入 n ,求斐波那 ...
  • 實現在父組件中促發子組件裡面的方法 子組件: <template> <div> 我是子組件 </div> </template> <script> export default { name: "child", methods: { parentHandleclick(e) { console.lo ...
  • 在實現客服系統的過程中,需要有新消息的時候標題欄閃爍提示 因為聊天框是被iframe框進去的頁面,所以在聊天框中收到websocket消息以後要把消息發送給父集頁面,在父頁面中閃爍標題 測試頁面地址: https://gofly.sopans.com/ 子頁面發送到父頁面的實現是,在父頁面增加消息監 ...
  • 本教程案例線上演示 有路網PC端 有路網移動端 免費配套視頻教程 免費配套視頻教程 教程配套源碼資源 教程配套源碼資源 字體樣式 屬性名 含義 舉例 font-family 設置字體類型 font-family:"隸書"; font-size 設置字體大小 font-size:12px; font- ...
  • 一、Nacos 介紹 Nacos 是 Alibaba 公司推出的開源工具,用於實現分散式系統的服務發現與配置管理。英文全稱 Dynamic Naming and Configuration Service,Na 為 Naming/NameServer 即註冊中心,co 為 Configuration ...
  • 特別註意:本代碼為 Springboot 工作流 前後分離 + 跨域 版本 (許可權控制到菜單和按鈕) 後臺框架:springboot2.3.0+ Flowable6.5.0+ mybaits+maven+介面 前端頁面:html +vue.js 形式 jquery ajax 非同步跨域 json 格式 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...