自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)庫租戶能力大調(diào)研

原創(chuàng) 精選
數(shù)據(jù)庫
多租戶(Multi Tenancy/Tenant)是一種軟件架構(gòu),是實(shí)現(xiàn)如何在多用戶環(huán)境下共用相同的系統(tǒng)或程序組件,并且可確保各用戶間數(shù)據(jù)的隔離性。與之相對應(yīng)的就是單租戶SaaS架構(gòu)(也被稱作多實(shí)例架構(gòu)(Multiple Instance))。

隨著SaaS軟件日益流行,如何為企業(yè)用戶提供即統(tǒng)一又相互獨(dú)立的服務(wù),成為很多基礎(chǔ)軟件商的課題,因而租戶能力正受到更多關(guān)注。另一方面,隨著分布式數(shù)據(jù)庫的流行,如何充分利用分布式環(huán)境的算力及存儲資源為不同業(yè)務(wù)服務(wù),也同樣對租戶能力提出的要求。本文針對常用的租戶實(shí)現(xiàn)方法、技術(shù)路線進(jìn)行說明,重點(diǎn)說明場景數(shù)據(jù)庫的租戶能力并加以對比。

1、多租戶能力概述

多租戶(Multi Tenancy/Tenant)是一種軟件架構(gòu),是實(shí)現(xiàn)如何在多用戶環(huán)境下共用相同的系統(tǒng)或程序組件,并且可確保各用戶間數(shù)據(jù)的隔離性。與之相對應(yīng)的就是單租戶SaaS架構(gòu)(也被稱作多實(shí)例架構(gòu)(Multiple Instance))。兩者的區(qū)別在于,單租戶是為每個(gè)客戶單獨(dú)創(chuàng)建各自的軟件應(yīng)用和支撐環(huán)境。后者通常被廣泛引用在客戶需要支持定制化的應(yīng)用場合。

(1)多租戶業(yè)務(wù)訴求

很多平臺類應(yīng)用或系統(tǒng)(如電商 CRM 平臺、倉庫訂單平臺等等),它們的服務(wù)模型是圍繞用戶維度(這里的用戶維度可以是一個(gè)賣家或品牌,可以是一個(gè)倉庫等)展開的。因此,這類型的平臺業(yè)務(wù),為了支持業(yè)務(wù)系統(tǒng)的水平擴(kuò)展性,業(yè)務(wù)的數(shù)據(jù)庫通常是按用戶維度進(jìn)行水平切分。當(dāng)平臺類應(yīng)用的一些用戶慢慢成長為大用戶(比如大品牌、大賣家、大倉庫等)后,這些大用戶由于其數(shù)據(jù)量或流量明顯要比其它用戶多得多,容易出現(xiàn)如業(yè)務(wù)熱點(diǎn)瓶頸、資源使用不均、服務(wù)品質(zhì)受損等問題。SaaS 多租戶模型作為一種應(yīng)用的架構(gòu),常用來解決業(yè)務(wù)的上述問題。在SaaS多租戶模型中,業(yè)務(wù)系統(tǒng)會需要服務(wù)多個(gè)用戶,每個(gè)用戶(或每批用戶)可以被視為一個(gè)租戶。SaaS 多租戶解決業(yè)務(wù)系統(tǒng)穩(wěn)定性問題以及租戶資源彈性定制的核心思路,就是租戶間的資源隔離及數(shù)據(jù)隔離。針對多租戶的問題,可以有多種解決思路。

(2)多租戶構(gòu)建模式

針對多租戶需求,常見有三種構(gòu)建模式:

  • 獨(dú)立數(shù)據(jù)庫:一個(gè)租戶獨(dú)享一個(gè)數(shù)據(jù)庫實(shí)例,提供最強(qiáng)的分離度,租戶數(shù)據(jù)彼此物理不可見,備份恢復(fù)都很靈活;
  • 共享數(shù)據(jù)庫、獨(dú)立 Schema:將每個(gè)租戶關(guān)聯(lián)到同一個(gè)數(shù)據(jù)庫的不同 Schema,租戶間數(shù)據(jù)彼此邏輯不可見,上層應(yīng)用程序的實(shí)現(xiàn)和獨(dú)立數(shù)據(jù)庫一樣簡單,但備份恢復(fù)稍顯復(fù)雜;
  • 共享數(shù)據(jù)庫、共享 Schema、共享數(shù)據(jù)表:租戶數(shù)據(jù)在數(shù)據(jù)表級別實(shí)現(xiàn)共享,提供最低成本,但引入了額外的編程復(fù)雜性,備份恢復(fù)也更復(fù)雜。

從上面多種構(gòu)建模式對比可見,各方案有著鮮明的優(yōu)缺點(diǎn)。在技術(shù)實(shí)現(xiàn)上,可分為兩種情況,一種是采用數(shù)據(jù)庫內(nèi)置能力來支持租戶,一種是在應(yīng)用側(cè)來解決。針對前者,后文將著重談?wù)劯鲾?shù)據(jù)庫的租戶能力;后者往往依賴于應(yīng)用研發(fā)能力。特別是共享庫、Schema、表的模式,具有成本低的明顯優(yōu)勢,通常在應(yīng)用研發(fā)側(cè)來解決,但這一模式面臨諸多難點(diǎn),在實(shí)際使用中常通過中間件策略增強(qiáng)這一模式能力,補(bǔ)齊短板。

(3)中間件策略解決難點(diǎn)

如上面所說,采用中間件策略可以解決第三種模式的短板,這其中需要著重解決以下問題:

  • 開發(fā)復(fù)雜問題。原模式中通常需要引入租戶ID的概念,在行級增加標(biāo)識來區(qū)分,這對于業(yè)務(wù)研發(fā)是不太友好的,需要在中間件層面最好屏蔽,讓業(yè)務(wù)研發(fā)回歸到租戶內(nèi),不用感知到租戶信息。
  • 跨機(jī)分布式事務(wù)。有時(shí)是需要提供跨租戶的數(shù)據(jù)訪問,這意味著業(yè)務(wù)需要做很多額外的應(yīng)用改造成本,才能盡量來避免跨機(jī)事務(wù)導(dǎo)致業(yè)務(wù)出現(xiàn)報(bào)錯(cuò)。可通過中間件層提供強(qiáng)一致分布式事務(wù)能力來解決這一問題。
  • 元數(shù)據(jù)一致性。當(dāng)使用跨Schema或共享數(shù)據(jù)表的模式,都面臨操作所有租戶對象同時(shí)生效問題。比如在 MySQL 的建刪表、加減列、加減索引等常見的DDL操作,需要中間件能力來保證平臺所有租戶的表能同時(shí)生效,一旦執(zhí)行中斷,可以自動回退,無需人工介入來訂正。
  • 租戶數(shù)據(jù)遷移。當(dāng)租戶發(fā)展壯大后會面臨資源不足需要遷移等情況,此時(shí)就需要針對租戶提供數(shù)據(jù)遷移能力,與底層資源層解耦,實(shí)現(xiàn)按需使用。這部分維護(hù)成本很高,中間件可提供此能力便于在租戶層面進(jìn)行遷移。

2、數(shù)據(jù)庫租戶能力調(diào)研

有很多數(shù)據(jù)庫已經(jīng)內(nèi)置了多租戶能力,用戶可很方便地基于此快速開發(fā) SaaS 類應(yīng)用。下面簡單對比下:

(1)Oracle 租戶能力

Oracle 多租戶功能允許在一個(gè)數(shù)據(jù)庫實(shí)例中同時(shí)運(yùn)行多個(gè)獨(dú)立的數(shù)據(jù)庫,這些數(shù)據(jù)庫被稱為插件數(shù)據(jù)庫(簡稱 PDB)。多租戶功能通過將不同的 PDB 分離在不同的存儲空間中,實(shí)現(xiàn)數(shù)據(jù)和應(yīng)用程序的隔離,從而提高數(shù)據(jù)庫的利用率和靈活性。以下是 Oracle 多租戶功能的主要特點(diǎn):

  • 獨(dú)立性:每個(gè) PDB 都是一個(gè)獨(dú)立的數(shù)據(jù)庫,具有自己的數(shù)據(jù)和配置。這使得您可以在同一個(gè)數(shù)據(jù)庫實(shí)例中運(yùn)行多個(gè)獨(dú)立的應(yīng)用程序,而不會相互干擾。
  • 共享資源:多個(gè) PDB 可以共享一些資源,如數(shù)據(jù)庫服務(wù)器、CPU 和內(nèi)存。這有助于提高資源利用率,并降低硬件成本。
  • 數(shù)據(jù)隔離:每個(gè) PDB 都有自己獨(dú)立的數(shù)據(jù)存儲,確保數(shù)據(jù)安全性。此外,Oracle 多租戶還支持跨 PDB 數(shù)據(jù)復(fù)制和同步,便于數(shù)據(jù)在不同 PDB 之間共享和一致性。
  • 權(quán)限管理:Oracle 多租戶功能允許您為每個(gè) PDB 獨(dú)立設(shè)置用戶和權(quán)限。這有助于實(shí)現(xiàn)精細(xì)化的權(quán)限控制,提高數(shù)據(jù)安全性。
  • 簡化管理:通過 Oracle 多租戶功能,您可以集中管理多個(gè) PDB,從而簡化數(shù)據(jù)庫管理和維護(hù)工作。
  • 高可用性:Oracle 多租戶支持 PDB 的自動故障轉(zhuǎn)移、數(shù)據(jù)備份和恢復(fù),確保應(yīng)用程序的高可用性。

(2)PostgreSQL 租戶能力

PostgreSQL 數(shù)據(jù)庫本身并沒有類似 Oracle 數(shù)據(jù)提供完善的租戶能力,但是可以結(jié)合多種開源技術(shù)和框架,實(shí)現(xiàn)廣義軟件架構(gòu)上的多租戶模式。PostgreSQL 支持實(shí)例-庫-Schema三級,也支持行級安全策略,可通過上面技術(shù)能力,實(shí)現(xiàn)在庫、Schema和行級別的租戶能力。

(3)TiDB 租戶能力

TiDB 采用了雙層資源管控機(jī)制來實(shí)現(xiàn)更精確的管控?!傲髁靠刂啤蹦K控制資源限額,確保僅在限額內(nèi)的操作才能得以執(zhí)行;“調(diào)度控制”模塊則對隊(duì)列中的任務(wù)設(shè)置不同的優(yōu)先級,以確保在負(fù)載劇烈變化或超負(fù)荷運(yùn)行時(shí),高優(yōu)先級的任務(wù)能夠得到快速反饋。TiDB 資源管控特性提供了兩層資源管理能力,包括在 TiDB 層的流控能力和 TiKV 層的優(yōu)先級調(diào)度的能力。將用戶綁定到某個(gè)資源組后,TiDB 層會根據(jù)用戶所綁定資源組設(shè)定的配額對用戶的讀寫請求做流控,TiKV 層會根據(jù)配額映射的優(yōu)先級來對請求做調(diào)度。

  • 資源組,是資源管理的邏輯單元。任意一個(gè)會話屬于唯一的資源組,而同一資源組的所有會話共享同一組資源限額。TiDB 支持?jǐn)?shù)據(jù)庫用戶與資源組的映射關(guān)系,通過設(shè)置數(shù)據(jù)庫用戶的默認(rèn)資源組,用戶會話可以分屬于不同的資源組。未指定默認(rèn)資源組的用戶,與系統(tǒng)內(nèi)置的 default 資源組相關(guān)聯(lián)。
  • 資源限額,TiDB 首先支持為資源組配置用量 (RU)。RU (Request Unit) 是 TiDB 對 CPU、IO 等系統(tǒng)資源的統(tǒng)一抽象的單位,目前會考慮 CPU、IOPS 和 IO 帶寬三個(gè)指標(biāo),按照一定的比例統(tǒng)一到 RU 單位上。TiDB 支持設(shè)置資源組為 BURSTABLE 模式,BURSTABLE 模式允許資源組超額使用到集群的空閑資源。
  • 調(diào)度優(yōu)先級,默認(rèn)情況下所有資源組的優(yōu)先級 (PRIORITY)均為“中等(medium)”。當(dāng)資源組在同一優(yōu)先級下,調(diào)度優(yōu)先級按照資源配額的比例分配,這已經(jīng)能夠滿足絕大多數(shù)場景的需要。用戶仍舊可以顯式地指定資源組優(yōu)先級為“高(high)”或者“低(low)”,從而完成更復(fù)雜的設(shè)定。

(4)OceanBase 租戶能力

OceanBase 數(shù)據(jù)庫采用了多租戶架構(gòu)。多租戶架構(gòu)適用于資源整合、SaaS 服務(wù)等場景,同時(shí)也降低了運(yùn)維復(fù)雜度。集群偏向于部署層面的物理概念,是 Zone 和節(jié)點(diǎn)的集合,Zone 和節(jié)點(diǎn)具有部署地域(稱為 Region)等屬性;而租戶則偏向于資源層面的邏輯概念,是在物理節(jié)點(diǎn)上劃分的資源單元,可以指定其資源規(guī)格,包括 CPU、內(nèi)存、日志盤空間、IOPS 等。租戶類似于傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)庫實(shí)例,租戶通過資源池與資源關(guān)聯(lián),從而獨(dú)占一定的資源配額,可以動態(tài)調(diào)整資源配額。在租戶下可以創(chuàng)建 Database、表、用戶等數(shù)據(jù)庫對象。


  • 資源規(guī)格,定義常見物理資源項(xiàng)的大小,包括 CPU、內(nèi)存、磁盤空間、IOPS 等。創(chuàng)建資源池時(shí)指定其資源規(guī)格,從而根據(jù)定義創(chuàng)建資源單元。
  • 資源單元(Unit),Unit 是租戶管理中非常重要的概念。OceanBase 按照 Unit 來管理物理資源,是 CPU、內(nèi)存、存儲空間、IOPS 等物理資源的集合。Unit 也是資源調(diào)度的基本單位,其具有節(jié)點(diǎn)、Zone、Region 等位置屬性,節(jié)點(diǎn)是服務(wù)器的抽象,Zone 是機(jī)房的抽象,Region 是地域的抽象,通過調(diào)整 Unit 的位置屬性從而調(diào)整租戶的部署方式。
  • 資源池,每個(gè) Unit 都?xì)w屬于一個(gè)資源池,每個(gè)資源池由若干個(gè) Unit 組成,資源池是資源分配的基本單位,同一個(gè)資源池內(nèi)的各個(gè) Unit 具有相同的資源規(guī)格,即該資源池內(nèi) Unit 的物理資源大小都相同。

通過 Unit 的概念,我們將 OceanBase 數(shù)據(jù)庫的物理概念和邏輯概念進(jìn)行了關(guān)聯(lián)。每個(gè)租戶有若干 Unit ,分布于若干 Zone 的若干節(jié)點(diǎn)上。而每個(gè)節(jié)點(diǎn)上分布有若干個(gè) Unit ,這些 Unit 歸屬于不同租戶。概括的講:集群由節(jié)點(diǎn)組成,節(jié)點(diǎn)是 Unit 的容器。租戶由 Unit 組成,Unit 是數(shù)據(jù)庫對象的容器。

(5)PolarDB-X 租戶能力

PolarDB-X 是阿里云旗下一款分布式數(shù)據(jù)庫產(chǎn)品。它通過結(jié)合非模板化二級分區(qū)與Locality兩項(xiàng)能力,來解決租戶場景問題。

  • 非模塊化二級分區(qū),是指 PolarDB-X 支持使用二級分區(qū)創(chuàng)建分區(qū)表??稍诟鱾€(gè)一級分區(qū)之下的二級分的分區(qū)數(shù)目及其邊界值定義允許不一致。通過這種方式可以將大小租戶的數(shù)據(jù)進(jìn)行不同的數(shù)據(jù)存儲策略,例如大租戶可以將數(shù)據(jù)路由到一組數(shù)據(jù)分區(qū)中,小租戶可以按哈希算法自動均衡到不同分區(qū),從而避免訪問熱點(diǎn)。
  • Locality,PolarDB-X 通過這個(gè)關(guān)鍵字來指定數(shù)據(jù)庫分區(qū)的實(shí)際存儲資源位置(PolarDB分布式版中存儲資源由多個(gè)數(shù)據(jù)節(jié)點(diǎn)(DN節(jié)點(diǎn))組成,可以通過DN的ID進(jìn)行位置分配),以實(shí)現(xiàn)數(shù)據(jù)隔離或數(shù)據(jù)的均勻分布。

3、數(shù)據(jù)庫租戶操作示例

(1)TiDB 操作示例

(2)OceanBase 操作示例

責(zé)任編輯:姜華 來源: 韓鋒頻道
相關(guān)推薦

2024-03-15 07:33:02

分布式數(shù)據(jù)庫索引數(shù)據(jù)結(jié)構(gòu)

2017-04-07 15:30:48

數(shù)據(jù)庫調(diào)查

2023-05-20 08:11:55

2017-12-01 05:04:32

數(shù)據(jù)庫中間件Atlas

2017-11-27 05:36:16

數(shù)據(jù)庫中間件TDDL

2017-11-27 05:06:42

數(shù)據(jù)庫中間件cobar

2023-12-14 12:26:16

SaaS數(shù)據(jù)庫方案

2023-04-07 07:30:30

數(shù)據(jù)庫調(diào)研數(shù)據(jù)

2025-03-28 07:33:09

數(shù)據(jù)庫AI助手設(shè)計(jì)

2012-07-09 15:28:53

CitusDB

2025-04-23 07:31:14

2023-09-15 07:33:25

數(shù)據(jù)庫選型評估

2021-12-30 18:15:56

數(shù)據(jù)庫TDSQL

2011-04-15 13:51:58

服務(wù)器操作系統(tǒng)X86

2022-07-27 08:24:44

數(shù)據(jù)庫RTOSQL

2019-08-07 06:34:32

2022-08-23 08:21:13

數(shù)據(jù)庫AIOPS工具

2019-11-12 08:11:40

數(shù)據(jù)庫安全漏洞網(wǎng)絡(luò)攻擊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號