對多租戶的理解

一、 多租戶定義

多租戶定義: 多租戶技術或稱多重租賃技術,簡稱SaaS,是一種軟件架構技術,是實現如何在多用戶環境下(此處的多用戶一般是面向企業用戶)共用相同的系統或程序組件,并且可確保各用戶間數據的隔離性。簡單講:在一臺服務器上運行單個應用實例,它為多個租戶(客戶)提供服務。
從定義中我們可以理解:多租戶是一種架構,目的是為了讓多用戶環境下使用同一套程序,且保證用戶間數據隔離。那么重點就很淺顯易懂了,多租戶的重點就是同一套程序下實現多用戶數據的隔離。對于實現方式,我們下面會討論到。

在了解詳細一點: 在一個多租戶的結構下,應用都是運行在同樣的或者是一組服務器下,這種結構被稱為“單實例”架構(Single Instance),單實例多租戶。多個租戶的數據是保存在相同位置,依靠對數據庫分區來實現隔離操作。既然用戶都在運行相同的應用實例,服務運行在服務供應商的服務器上,用戶無法去進行定制化的操作,所以這對于對該產品有特殊需要定制化的客戶就無法適用,所以多租戶適合通用類需求的客戶。那么缺點來了,多租戶下無法實現用戶的定制化操作。

在翻閱多租戶的資料時,還有一個名詞與之相對應,那就是單租戶SaaS架構(也被稱作多實例架構(Multiple Instance))。單租戶架構與多租戶的區別在于,單租戶是為每個客戶單獨創建各自的軟件應用和支撐環境。單租戶SaaS被廣泛引用在客戶需要支持定制化的應用場合,而這種定制或者是因為地域,抑或是他們需要更高的安全控制。通過單租戶的模式,每個客戶都有一份分別放在獨立的服務器上的數據庫和操作系統,或者使用強的安全措施進行隔離的虛擬網絡環境中。因為本篇主要是討論多租戶,所以單租戶的相關知識就簡單了解一下,不做過多的闡述了。

二、 多租戶數據隔離的三種方案

在當下云計算時代,多租戶技術在共用的數據中心以單一系統架構與服務提供多數客戶端相同甚至可定制化的服務,并且仍可以保障客戶的數據隔離。目前各種各樣的云計算服務就是這類技術范疇,例如阿里云數據庫服務(RDS)、阿里云服務器等等。
多租戶在數據存儲上存在三種主要的方案,分別是:

2.1 獨立數據庫

這是第一種方案,即一個租戶一個數據庫,這種方案的用戶數據隔離級別最高,安全性最好,但成本較高。
優點: 為不同的租戶提供獨立的數據庫,有助于簡化數據模型的擴展設計,滿足不同租戶的獨特需求;如果出現故障,恢復數據比較簡單。
缺點: 增多了數據庫的安裝數量,隨之帶來維護成本和購置成本的增加。

這種方案與傳統的一個客戶、一套數據、一套部署類似,差別只在于軟件統一部署在運營商那里。如果面對的是銀行、醫院等需要非常高數據隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商來說是無法承受的。

2.2 共享數據庫,獨立Schema

這是第二種方案,即多個或所有租戶共享Database,但是每個租戶一個Schema(也可叫做一個user)。底層庫比如是:DB2、ORACLE等,一個數據庫下可以有多個SCHEMA
優點: 為安全性要求較高的租戶提供了一定程度的邏輯數據隔離,并不是完全隔離;每個數據庫可支持更多的租戶數量。
缺點: 如果出現故障,數據恢復比較困難,因為恢復數據庫將牽涉到其他租戶的數據; 如果需要跨租戶統計數據,存在一定困難。

2.3 共享數據庫,共享 Schema,共享數據表

這是第三種方案,即租戶共享同一個Database、同一個Schema,但在表中增加TenantID多租戶的數據字段。這是共享程度最高、隔離級別最低的模式。
即每插入一條數據時都需要有一個客戶的標識。這樣才能在同一張表中區分出不同客戶的數據。
優點: 三種方案比較,第三種方案的維護和購置成本最低,允許每個數據庫支持的租戶數量最多。
缺點: 隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量; 數據備份和恢復最困難,需要逐表逐條備份和還原。如果希望以最少的服務器為最多的租戶提供服務,并且租戶接受犧牲隔離級別換取降低成本,這種方案最適合。

在SaaS實施過程中,有一個顯著的考量點,就是如何對應用數據進行設計,以支持多租戶,而這種設計的思路,是要在數據的共享、安全隔離和性能間取得平衡。

三、選擇合理的實現模式

衡量三種模式主要考慮的因素是隔離還是共享。
成本角度因素:
隔離性越好,設計和實現的難度和成本越高,初始成本越高。共享性越好,同一運營成本下支持的用戶越多,運營成本越低。
安全因素:
要考慮業務和客戶的安全方面的要求。安全性要求越高,越要傾向于隔離。
從租戶數量上考慮:
主要考慮下面一些因素:系統要支持多少租戶?上百?上千還是上萬?可能的租戶越多,越傾向于共享。平均每個租戶要存儲數據需要的空間大小。存貯的數據越多,越傾向于隔離。每個租戶的同時訪問系統的最終用戶數量。需要支持的越多,越傾向于隔離。是否想針對每一租戶提供附加的服務,例如數據的備份和恢復等。這方面的需求越多, 越傾向于隔離。
技術儲備:
共享性越高,對技術的要求越高。

四、 團隊開發框架實戰—多租戶支持

多租戶技術的實現重點,在于不同租戶間應用程序環境的隔離(application context isolation)以及數據的隔離(data isolation),以維持不同租戶間應用程序不會相互干擾,同時數據的保密性也夠強。
多租戶數據庫構架方式主要分為:獨立數據庫(私有表)、共享數據庫隔離數據框架(擴展表)、共享數據庫共享數據框架(通用表)。
以上架構模式中,數據隔離程度相對較差,數據共享程度越高,越能夠支持較多的租戶,同時設備成本越低,但同時數據維護難度越大。如敏感數據較多,則選擇共享數據庫隔離數據框架,否則可選擇共享數據庫共享數據框架的方式進行數據存儲構架。
本項目系統可能出現數量較多的租戶,同時設備有限,所以選取共享數據庫共享數據框架(通用表)的數據存儲結構。

數據表結構采用名稱值對的方式進行設計:將擴展數據的保存和原數據表分離,另外用一個統一的擴展數據表來保存。擴展數據表將數據表的橫向擴展列轉換為縱向的數據集,將每一條原始數據記錄的一個擴展字段,都保存成一條擴展數據行。將數據表中的數據記錄與配置元數據表中的配置記錄關聯,構成擴展數據記錄。可以提供無限數量的自定義擴展字段。但是其增加數據操作的復雜性,查詢時也要多次訪問數據庫才能得到完整的業務數據。

多通用表與鍵值對的數據存儲架構存儲工作過程,上層應用通過標準多租戶數據定義、存儲API 進行交互,通過標準的API 接口將多租戶數據存儲到數據空中;也可以通過查詢的方式來從統一存儲的數據庫中還原租戶的數據。

五、總結

所謂的多租戶就是指在一臺機器上運行單個應用實例,為多個不同的客戶服務,同時要保證不同用戶環境的數據隔離。多租戶應用運行在同一組服務器下,稱為單實例多租戶,多租戶通過數據庫分片實現數據隔離。多租戶數據隔離主要有:獨立數據庫(實際上是獨立數據庫機器)、共享數據庫,獨立Schema、共享數據庫,共享Schema。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450886.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450886.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

查看VMware上虛擬機的 ip 地址

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 開啟虛擬機: 2.輸入賬號密碼登陸到虛擬機中 3. 選擇 xxx Home 右鍵---- Open in Terinal 進入命令行頁面 ----- 輸入命令…

Hibernate之表間關系

ManyToOne 多對一,是最常見的表間關系,對應關系數據庫中的外鍵關系。通常用于建立子實體和其父實體的關聯關系 Entity(name "Person") public static class Person {IdGeneratedValueprivate Long id;//Getters and setters are omitted for …

Python大神告訴你,學習Python應該讀哪些書!

關注頭條號,私信回復資料會有意外驚喜呦………………最后一張照片有資料呦。在傳統的Web開發之外的領域,Python開發人員的就業機會越來越多,無論你是初學者還是大神,現在正是投入到Python學習的好時機。一個IBM的博客文章報道了如…

腳本語言

腳本語言(Script language,scripting language,scripting programming language)是為了縮短傳統的編寫-編譯-鏈接-運行(edit-compile-link-run)過程而創建的計算機編程語言。此命名起源于一個腳本“screenp…

Java Agent

一、什么是 Java Agent ? 籠統地來講,Java Agent 是一個統稱,該功能是 Java 虛擬機提供的一整套后門。通過這套后門可以對虛擬機方方面面進行監控與分析。甚至干預虛擬機的運行。 Java Agent 又叫做 Java 探針,Java Agent 是在 …

JDK 1.8 官網下載地址(linux / windows)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JDK 1.8 官網下載地址: JDK 1.8 官網下載地址(linuxwindows) 上面連接可以直接點擊,連接…

跟著太白老師學python day11 可迭代對象和迭代器

如果對象的屬性中有__iter__屬性就說明是可迭代的,容器類的數據類型都是可迭代對象 如果對象的屬性中既有__iter__屬性也有__next__屬性,就說明這個對象是迭代器 如何判斷一個函數是不是可迭代的,是不是迭代器 方法一 s 123 print(__iter__ …

攪局者奇虎360:特供機背后的周式隱憂

摘要:從未涉足制造,將來也“絕不參與制造”的360,卻聲稱要進軍智能手機。從未涉足制造,將來也“絕不參與制造”的360,卻聲稱要進軍智能手機。 5月4日晚間,“長達半年的思考”后,奇虎360董事長周…

數據結構基礎入門知識

數據結構基礎入門知識 ------ 數據結構:理解和練習《異類-不一樣的成功啟示錄》IP/26 192IP/25 128IP/24192.12864 3216 2 1 NTP:時間同步服務器高手都是最仔細的,嚴謹的 telnet 查看某個端口是否可用,是否是開啟狀態的要有探索冒險的精神 --…

Linux下安裝jdk8步驟詳述

見:https://www.cnblogs.com/shihaiming/p/5809553.html 0.下載jdk8 登錄網址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 選擇對應jdk版本下載。(可在Windows下下載完成后,通過文件夾…

用Kotlin擼一個圖片壓縮插件-實戰篇(三)

簡述: 由于個人原因,已經有很長一段時間沒有寫過文章,有句話是那么說的只要開始就不會太晚,所以我們開始《用Kotlin擼一個圖片壓縮插件》系列文章最后一篇實戰篇。實際上我已經把源碼發布到了GitHub,代碼很簡單。有了前兩篇文章的…

后端進階技術總結

1、SDK與API的區別? SDK是Software Development Kit的縮寫,即軟件開發工具包。可以把SDK想象成一個虛擬的程序包,在這個程序包中有一份做好的軟件功能,這份程序包幾乎是全封閉的,通過接口聯通外界,相應的接…

最簡容器化動手小實踐——再戰flappybird

《Flappy Bird》是一名越南開發者所開發的游戲,這款游戲的主要內容是幫助一只小鳥穿越水管的層層阻礙,玩家所需要的只是點擊屏幕從而調整小鳥的高度。而令這款游戲與眾不同的是,這款游戲的難度夸張的驚人,大多數玩家在初次上手之后…

為什么電影電視幀率不取整數?

英文名稱:time code時間碼概念時間碼(time code)是攝像機在記錄圖像信號的時候,針對每一幅圖像記錄的唯一的時間編碼。一種應用于流的數字信號。該信號為視頻中的每個幀都分配一個數字,用以表示小時、分鐘、秒鐘和幀數…

linux下用rpm 安裝jdk

1.下載jdk的rpm安裝包,這里以jdk-7u4-linux-i586.rpm為例進行說明 下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 將jdk-7u4-linux-i586.rpm 移動到合適的安裝目錄上,安裝軟件不要在/home路徑下&#xf…

FFT 入門

推薦博客 : https://oi.men.ci/fft-notes/ 卷積的理解 : https://www.zhihu.com/question/22298352?rf21686447 題目鏈接 :http://uoj.ac/problem/34 這是一道模板題。給你兩個多項式,請輸出乘起來后的多項式。輸入格式第一行兩個…

MPEG4視頻壓縮編碼技術詳解

MPEG全稱是Moving Pictures Experts Group,它是“動態圖象專家組”的英文縮寫,該專家組成立于1988年,致力于運動圖像及其伴音的壓縮編碼標準化工作,原先他們打算開發MPEG1、MPEG2、MPEG3和MPEG4四個版本,以適用于不同帶…

oracle orion hugepages_settings.sh(支持OEL 7,4.1內核)

orion需要首先配置hugepage,否則會出現下列錯誤。[rootyyxxdb01 ~]# /opt/app/11.2.0/grid_home/bin/orion -run oltp -testname mytestORION: ORacle IO Numbers -- Version 11.2.0.4.0************************ Large Pages Information *******************Param…

eclipse啟動出現“An Error has Occurred. See the log file”解決方法

見:http://blog.csdn.net/ww130929/article/details/52652222 這段時間開發java的項目,剛開始啟動Eclipse的時候經常遇到這個問題,寫這篇博客來記錄解決方法。 1.刪除工程目錄下的: “.metadata/.plugins/org.eclipse.core.resour…

初識NIO之Java小Demo

Java中的IO、NIO、AIO: BIO:在Java1.4之前,我們建立網絡連接均使用BIO,屬于同步阻塞IO。默認情況下,當有一條請求接入就有一條線程專門接待。所以,在客戶端向服務端請求時,會詢問是否有空閑線程…