徹底理解微商城多租戶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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...