掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
隨著SaaS軟件日益流行,如何為企業(yè)用戶提供即統(tǒng)一又相互獨(dú)立的服務(wù),成為很多基礎(chǔ)軟件商的課題,因而租戶能力正受到更多關(guān)注。另一方面,隨著分布式數(shù)據(jù)庫的流行,如何充分利用分布式環(huán)境的算力及存儲(chǔ)資源為不同業(yè)務(wù)服務(wù),也同樣對(duì)租戶能力提出的要求。本文針對(duì)常用的租戶實(shí)現(xiàn)方法、技術(shù)路線進(jìn)行說明,重點(diǎn)說明場景數(shù)據(jù)庫的租戶能力并加以對(duì)比。

創(chuàng)新互聯(lián)建站堅(jiān)實(shí)的技術(shù)研發(fā)基礎(chǔ)贏得了行業(yè)內(nèi)的良好口碑,公司成立10年來,為成百上千企業(yè)提供過網(wǎng)站建設(shè)、軟件開發(fā)、搜索引擎優(yōu)化技術(shù)、互聯(lián)網(wǎng)大數(shù)據(jù)整合營銷服務(wù),多年的技術(shù)服務(wù)成功經(jīng)驗(yàn)、眾多的客戶使我們能懂得更多,做得更好。"讓您的網(wǎng)站跑起來"是我們一直追求的目標(biāo)!
多租戶(Multi Tenancy/Tenant)是一種軟件架構(gòu),是實(shí)現(xiàn)如何在多用戶環(huán)境下共用相同的系統(tǒng)或程序組件,并且可確保各用戶間數(shù)據(jù)的隔離性。與之相對(duì)應(yīng)的就是單租戶SaaS架構(gòu)(也被稱作多實(shí)例架構(gòu)(Multiple Instance))。兩者的區(qū)別在于,單租戶是為每個(gè)客戶單獨(dú)創(chuàng)建各自的軟件應(yīng)用和支撐環(huán)境。后者通常被廣泛引用在客戶需要支持定制化的應(yīng)用場合。
很多平臺(tái)類應(yīng)用或系統(tǒng)(如電商 CRM 平臺(tái)、倉庫訂單平臺(tái)等等),它們的服務(wù)模型是圍繞用戶維度(這里的用戶維度可以是一個(gè)賣家或品牌,可以是一個(gè)倉庫等)展開的。因此,這類型的平臺(tái)業(yè)務(wù),為了支持業(yè)務(wù)系統(tǒng)的水平擴(kuò)展性,業(yè)務(wù)的數(shù)據(jù)庫通常是按用戶維度進(jìn)行水平切分。當(dāng)平臺(tái)類應(yīng)用的一些用戶慢慢成長為大用戶(比如大品牌、大賣家、大倉庫等)后,這些大用戶由于其數(shù)據(jù)量或流量明顯要比其它用戶多得多,容易出現(xiàn)如業(yè)務(wù)熱點(diǎn)瓶頸、資源使用不均、服務(wù)品質(zhì)受損等問題。SaaS 多租戶模型作為一種應(yīng)用的架構(gòu),常用來解決業(yè)務(wù)的上述問題。在SaaS多租戶模型中,業(yè)務(wù)系統(tǒng)會(huì)需要服務(wù)多個(gè)用戶,每個(gè)用戶(或每批用戶)可以被視為一個(gè)租戶。SaaS 多租戶解決業(yè)務(wù)系統(tǒng)穩(wěn)定性問題以及租戶資源彈性定制的核心思路,就是租戶間的資源隔離及數(shù)據(jù)隔離。針對(duì)多租戶的問題,可以有多種解決思路。
針對(duì)多租戶需求,常見有三種構(gòu)建模式:
從上面多種構(gòu)建模式對(duì)比可見,各方案有著鮮明的優(yōu)缺點(diǎn)。在技術(shù)實(shí)現(xiàn)上,可分為兩種情況,一種是采用數(shù)據(jù)庫內(nèi)置能力來支持租戶,一種是在應(yīng)用側(cè)來解決。針對(duì)前者,后文將著重談?wù)劯鲾?shù)據(jù)庫的租戶能力;后者往往依賴于應(yīng)用研發(fā)能力。特別是共享庫、Schema、表的模式,具有成本低的明顯優(yōu)勢(shì),通常在應(yīng)用研發(fā)側(cè)來解決,但這一模式面臨諸多難點(diǎn),在實(shí)際使用中常通過中間件策略增強(qiáng)這一模式能力,補(bǔ)齊短板。
如上面所說,采用中間件策略可以解決第三種模式的短板,這其中需要著重解決以下問題:
有很多數(shù)據(jù)庫已經(jīng)內(nèi)置了多租戶能力,用戶可很方便地基于此快速開發(fā) SaaS 類應(yīng)用。下面簡單對(duì)比下:
Oracle 多租戶功能允許在一個(gè)數(shù)據(jù)庫實(shí)例中同時(shí)運(yùn)行多個(gè)獨(dú)立的數(shù)據(jù)庫,這些數(shù)據(jù)庫被稱為插件數(shù)據(jù)庫(簡稱 PDB)。多租戶功能通過將不同的 PDB 分離在不同的存儲(chǔ)空間中,實(shí)現(xiàn)數(shù)據(jù)和應(yīng)用程序的隔離,從而提高數(shù)據(jù)庫的利用率和靈活性。以下是 Oracle 多租戶功能的主要特點(diǎn):
PostgreSQL 數(shù)據(jù)庫本身并沒有類似 Oracle 數(shù)據(jù)提供完善的租戶能力,但是可以結(jié)合多種開源技術(shù)和框架,實(shí)現(xiàn)廣義軟件架構(gòu)上的多租戶模式。PostgreSQL 支持實(shí)例-庫-Schema三級(jí),也支持行級(jí)安全策略,可通過上面技術(shù)能力,實(shí)現(xiàn)在庫、Schema和行級(jí)別的租戶能力。
TiDB 采用了雙層資源管控機(jī)制來實(shí)現(xiàn)更精確的管控?!傲髁靠刂啤蹦K控制資源限額,確保僅在限額內(nèi)的操作才能得以執(zhí)行;“調(diào)度控制”模塊則對(duì)隊(duì)列中的任務(wù)設(shè)置不同的優(yōu)先級(jí),以確保在負(fù)載劇烈變化或超負(fù)荷運(yùn)行時(shí),高優(yōu)先級(jí)的任務(wù)能夠得到快速反饋。TiDB 資源管控特性提供了兩層資源管理能力,包括在 TiDB 層的流控能力和 TiKV 層的優(yōu)先級(jí)調(diào)度的能力。將用戶綁定到某個(gè)資源組后,TiDB 層會(huì)根據(jù)用戶所綁定資源組設(shè)定的配額對(duì)用戶的讀寫請(qǐng)求做流控,TiKV 層會(huì)根據(jù)配額映射的優(yōu)先級(jí)來對(duì)請(qǐng)求做調(diào)度。
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ú)占一定的資源配額,可以動(dòng)態(tài)調(diào)整資源配額。在租戶下可以創(chuàng)建 Database、表、用戶等數(shù)據(jù)庫對(duì)象。
通過 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ù)庫對(duì)象的容器。
PolarDB-X 是阿里云旗下一款分布式數(shù)據(jù)庫產(chǎn)品。它通過結(jié)合非模板化二級(jí)分區(qū)與Locality兩項(xiàng)能力,來解決租戶場景問題。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流