1. 程式人生 > >大資料雲平臺 Greenplum:多租戶篇

大資料雲平臺 Greenplum:多租戶篇

什麼是多租戶

多租戶指一套系統能夠支撐多個租戶。一個租戶通常是具有相似訪問模式和許可權的一組使用者,典型的租戶是同一個組織或者公司的若干使用者。

要實現多租戶,首先需要考慮的是資料層面的多租戶。資料層的多租戶模型對上層服務和應用的多租戶實現有突出影響。本文重點介紹資料層多租戶及Greenplum資料庫對各種多租戶模型的支援。

權衡不同的多租戶實現方式時,需要考慮如下因素:

擴充套件性:租戶數量級別,以及未來發展趨勢
安全性:租戶之間資料隔離級別要求
資源共享:多租戶通常有某種形式的資源共享,需要避免某個租戶的糟糕SQL吃掉系統資源,影響其他租戶的響應時間
靈活性:不同租戶可能有不同的需求,對特定租戶需求的擴充套件能力
跨租戶分析和優化:對全部租戶或者多個租戶的資料和行為進行分析的能力
運維和管理:運維管理的複雜度和便宜性,包括監控、修改資料庫模式、建立索引、收集統計資料、資料載入等
成本:總體擁有成本,包括方案實現成本、運維成本等
多租戶模型

多租戶模型描述了租戶和該租戶的資料之間的對映關係。不同的多租戶模型會影響資料庫和應用程式的設計、管理和維護。

使用較多的多租戶模型有三種。 Greenplum 對這三種模型都有出色的支援。

一租戶一資料庫

最簡單的多租戶實現方式是為每一個租戶建立一個Greenplum叢集,如下圖所示。應用程式為每個租戶分配一個租戶id,併為每個租戶配置相應的資料庫連線資訊(包括資料庫ip、埠等)。應用程式根據租戶id連線到為其分配的資料庫。
在這裡插入圖片描述
這種模型中不同租戶的資料物理隔離,安全級別高。如果每個租戶的Greenplum叢集使用不同的硬體,則他們之間的資源使用也是物理隔離的;如果租戶的Greenplum叢集共用同一套硬體,則需要對資源進行合理分配和管理,避免相互影響。由於不同租戶使用獨立的資料庫,靈活性好,容易滿足不同租戶的特定需求(譬如需要額外的欄位)。出現故障時影響面小。缺點是資料庫數量大,維護複雜,擁有成本高。適合租戶數目比較少的場景。

一租戶一名字空間(Schema/Namespace)

多個租戶共享同一個資料庫,每個租戶擁有獨立的名字空間(或模式)。應用程式為每個租戶分配一個id,並把每個租戶的所有操作限制在為其分配的名字空間/模式之中。如下圖所示。
在這裡插入圖片描述
這種多租戶模型下,不同租戶的資料邏輯上相互隔離,安全控制相對簡單。不同租戶有不同的模式,可以簡便的滿足不同租戶的特定需求,靈活性高。對資源管理能力要求高,以避免不同租戶競爭資源。結合 Greenplum 的 filepace 和 tablespace 特性,可以把不同租戶的資料儲存在不同的磁碟上,降低了對磁碟IO的競爭。運維和管理較複雜,不易實現大量租戶的跨租戶分析。適合租戶數目適中的場景。

全共享方式

不同租戶共享同一個資料庫、同一個名字空間。不同租戶的資料在同一組表中共存,通過租戶id標記和訪問不同租戶的資料(應用需要調整訪問資料的SQL以包含租戶id)。如下圖所示。
在這裡插入圖片描述
這種多租戶模型中,不同租戶的資料物理儲存在一起,對系統的資源隔離和安全隔離要求很高。運維相對簡單。擴充套件能力好,可以支援較多數量租戶。由於租戶資料儲存在一起,跨租戶資料分析和優化非常簡單。成本低,可以較低的代價支援更多的租戶。

全共享模型中,很多資料庫採用新增大量自定義欄位的方式滿足不同租戶的特定需求,以提高靈活性。這種方式有諸多侷限性,譬如欄位數目不能太多、管理複雜等。Greenplum 自 5.0 開始支援更多半結構化資料,包括JSON、Hstore 等,通過這種半結構化資料,可以更靈活、高效、便捷的滿足不同租戶的特定需求。

混合模型

這種模型不是一個新的實現方式,而是混合前面介紹的三種模型以滿足不同使用者的服務級別需求。譬如對於最大的少數幾個租戶採用一租戶一資料庫的模型,其他租戶採用全共享方式。或者對資源隔離級別要求高、服務響應時間要求高的客戶採用一租戶一資料庫的模型,其他租戶採用一租戶一名字空間方式或者全共享方式。

對比

下表列出了不同模式的特點。混合模型兼具不同模型的優缺點,不再單獨列出。根據不同需求可以採用不同的實現方式。
在這裡插入圖片描述

Greenplum 資源管理

上面提到,不管使用何種多租戶模型(除非是不同的物理叢集),否則都涉及到資源管理的問題,以滿足不同租戶的不同資源使用需求,避免某個租戶過度使用資源,影響其他租戶。

Greenplum 5 設計實現了一個全新的基於資源組的資源管理器,相比之前的資源佇列,可以做到靈活高效的資源管理。

下表對資源組和資源佇列進行了對比:
在這裡插入圖片描述
Greenplum 可以實現細粒度的資源管理,在雲上多租戶場景下,非常適合實現租戶的資源隔離,避免某個租戶過度佔用資源,確保資源合理使用。

總結

多租戶是雲資料庫的基本要求,本文介紹了Greenplum的四種多租戶實現方式,並對之進行了對比。還介紹了 Greenplum 新的基於資源組的資源管理器,以實現多租戶的資源共享和隔離。