農林漁牧網

您現在的位置是:首頁 > 畜牧業

未名企鵝極客 | 基於容器化的多租戶設計實現

2022-02-03由 那些江湖事 發表于 畜牧業

驢企鵝的特點是什麼

說起多租戶就不能不提起SaaS,SaaS對比傳統軟體概念而言規模效應非常強大。

運維成本、部署成本、開發投入等成本因素在傳統的開發模式下都是陡峭的線性增長模型。

而SaaS模式下由於單一部署等特點,隨著租戶的數量的增加,規模效應逐漸明顯,單個租戶的成本明顯下降。

那麼多租戶的設計就在SaaS系統中明顯重要。在SaaS應用的成熟度模型中L1和L2只是過渡性的形態,真正的L3、L4才是SaaS的真正形態。由此可看出,真正的Saas一定是多租戶的,可擴容的,便於配置的。

由於傳統的設計實施方案中運維、開發成本都較高,基於這些問題,考慮使用容器化、虛擬化的手段來解決這些問題。

一、多租戶設計

多租戶設計需要考慮兩個層面,一個是資料層,另一個是應用層。

1

應用層面的設計

概念上,每個租戶都要有自己專用的邏輯執行空間,並且在這部分空間託管了為租戶單獨提供服務的能力,另外主機使用者還要有能力維護和管理租戶的執行空間。

實際上,SaaS中使用一個執行時環境來為多個租戶提供服務,不同租戶之間存在多種多樣的功能差異需要進行控制,同時也存在某些通用的功能。這些通用功能的開通、停用、配置等都要在環境中獨立管理,並且互相隔離。

2

資料層面的設計

在資料層面上的設計其實是資料共享和資料隔離的設計,重點是要在三種設計。

常見的有如下三種設計:

1。 獨立資料庫例項

2。 共享資料庫例項,獨立Schema

3。 共享資料庫例項、Schema和表,資料切片儲存

三種設計方向其實是在平衡資料的共享度、隔離度、複雜度和成本,借用一張圖來說明一下。

未名企鵝極客 | 基於容器化的多租戶設計實現

二、容器化實現多租戶設計

1

使用映象隔離租戶功能

多租戶的應用中的功能經常會出現的一個需求就是按租戶開通、或是租戶定製化功能,這是最常面臨的也是最頭疼的問題。

由於產品功能不斷的更新迭代,上線釋出,隨著程式碼量和功能的越來越多。維護成本也逐漸變大。一種使用容器化的思想來實現的方式如下:

1。 藉助各種語音的模組化能力,將功能模組化,程式碼層級上進行切割。

2。 建立構建指令碼,根據租戶能力構建功能模組。載入配置、環境變數等資訊之後,將編譯好的模組構建租戶級別特有的映象

3。 構建完成的映象按照租戶級別、使用者量、負載等資訊評估需要的資源,完成資源分配、建立容器、執行服務

4。 透過主機使用者的管理能力為容器分配負載均衡、域名等訪問配置

2

租戶容器的資料隔離

根據上面提到的集中常見的資料層面的設計可以考慮按照如下的設計完成租戶資料儲存隔離和通用資料的共享。

1。 通用的資料,由於模型統一,維度一致,讀取邏輯可以使用通用的讀取模組在編譯組合階段直接放入映象,同時對其他模組提供統一的程式碼級別的讀取支援。

2。 隔離的資料,可以透過定製化租戶特定的倉儲實現和單獨的資料配置,在編譯打包階段直接隔離掉不同租戶的資料。即保障資料安全,也減少了各種租戶級別的判斷。

未名企鵝極客 | 基於容器化的多租戶設計實現

三、優缺點

容器化實現多租戶的方案由於依託虛擬化,天生自帶沙盒特性,雖然由於資料層面上的設計依然存在資料的耦合、隔離等問題,但是隨著資料特性的要求不一樣只要選擇合適的資料方案也可以規避。

優點

· 硬體資源獨立分配,CPU、記憶體都可以按照租戶具體負載進行獨立分配。

· 對定製化開發友好,功能可以更快速、更獨立的開發,並且釋出不會影響不相關租戶。

· 開發的過程中更關注功能,由於映象的構建過程物理隔離了功能,開發同學可以更集中在功能的開發上。

· 部署運維成本降低,只需要分配固定的執行時資源即可

· 更利於遷移和獨立部署,滿足不同部署場景下的租戶需求

缺點

· 不太適合微服務的場景,微服務越多,租戶映象向外依賴越大,獨立程度越低

· 由於單個容器中存在系統基礎設施佔用,所以會損耗部分硬體資源