前言
隨著大量SaaS公司進入市場,我們看到顛覆性的軟件服務(wù)以各種方式進入企業(yè)流程-從營銷工具到支付系統(tǒng)。隨著SaaS幫助優(yōu)化業(yè)務(wù)流程,實現(xiàn)更流暢和自動化的運營,風(fēng)險投資公司首先潛入池中尋找最優(yōu)秀和最聰明的企業(yè)。
從Zoom(一家提供結(jié)合了視頻會議,在線會議,聊天和移動協(xié)作的通信軟件)上市,阿里收購Teambition,SaaS正成為風(fēng)險投資公司和創(chuàng)業(yè)極其有利可圖的途徑。為了了解SaaS,PaaS,下面將對其進行簡單的概述。
如果您正在考慮將您的業(yè)務(wù)遷移到云端,有三個詞將縈繞在你耳邊:
IaaS(技術(shù)設(shè)施即服務(wù))
解釋
IaaS企業(yè)提供諸如即時即付存儲,網(wǎng)絡(luò)和虛擬化等服務(wù)。
IaaS為用戶提供了基于云的內(nèi)部基礎(chǔ)架構(gòu)替代方案,因此企業(yè)可以避免投資昂貴的現(xiàn)場資源。
優(yōu)勢
維護內(nèi)部部署的IT基礎(chǔ)架構(gòu)既昂貴又耗費人力。
它通常需要在物理硬件上進行大量的初始投資,然后您可能需要聘請外部IT承包商來維護硬件并保持一切正常運行和最新。通過IaaS,您可以根據(jù)需要購買所需的產(chǎn)品,并隨著業(yè)務(wù)的增長購買更多產(chǎn)品。
特點
IaaS平臺是:
- 高度靈活,高度可擴展。
- 可供多個用戶訪問。
- 性價比高。
示例
IaaS示例: 阿里云服務(wù)器ECS, AWS EC2Google Compute Engine(GCE)。
PaaS(平臺即服務(wù))
解釋
PaaS供應(yīng)商通過互聯(lián)網(wǎng)提供硬件和軟件工具,人們使用這些工具開發(fā)應(yīng)用程序。PaaS用戶往往是開發(fā)人員。
優(yōu)勢
PaaS主要由正在構(gòu)建軟件或應(yīng)用程序的開發(fā)人員使用。PaaS解決方案為開發(fā)人員提供了創(chuàng)建獨特,可定制軟件的平臺。
這意味著開發(fā)人員在創(chuàng)建應(yīng)用程序時無需從頭開始,在編寫大量代碼時節(jié)省了大量時間(和金錢)。PaaS是那些想要創(chuàng)造獨特應(yīng)用程序而又不花錢或承擔(dān)全部責(zé)任的企業(yè)的熱門選擇。
特點
PaaS平臺是:
- 可供多個用戶訪問。
- 可擴展 - 您可以從各種級別的資源中進行選擇,以適應(yīng)您的業(yè)務(wù)規(guī)模。
- 基于虛擬化技術(shù)。
- 無需廣泛的系統(tǒng)管理知識即可輕松運行。
示例
PaaS示例: AWS Elastic Beanstalk,Heroku,Windows Azure(主要用作PaaS)。
SaaS(軟件施即服務(wù))
解釋
SaaS平臺通過互聯(lián)網(wǎng)向用戶提供軟件,通常每月訂閱費用。
優(yōu)勢
使用SaaS,您無需在計算機(或任何計算機)上安裝和運行軟件應(yīng)用程序。當(dāng)您在線登錄帳戶時,一切都可通過互聯(lián)網(wǎng)獲得。您通??梢噪S時從任何設(shè)備訪問該軟件(只要有互聯(lián)網(wǎng)連接)。使用該軟件的其他人也是如此。您的所有員工都將擁有適合其訪問級別的個性化登錄。
另一個關(guān)鍵優(yōu)勢是支付結(jié)構(gòu):
大多數(shù)SaaS提供商都使用固定的包含性月度帳戶費用來運營訂閱模式。您確切地知道軟件的成本是多少,并且可以相應(yīng)地進行預(yù)算,而不必擔(dān)心隱藏的意外。
大多數(shù)訂閱包括維護,合規(guī)性和安全性服務(wù),這在使用內(nèi)部部署軟件時可能既耗時又昂貴。SaaS提供商還提供易于設(shè)置的開箱即用解決方案(如果您需要基本軟件包),并為大型組織提供更復(fù)雜的解決方案。您可以在幾小時內(nèi)啟動并運行基本軟件 - 并且您可以在此過程中獲得客戶服務(wù)和支持。
特點
SaaS平臺是:
- 可通過互聯(lián)網(wǎng)獲得。
- 由第三方提供商托管在遠程服務(wù)器上。
- 可擴展,具有適用于小型,中型和企業(yè)級業(yè)務(wù)的不同層。
- 包容性,提供安全性,合規(guī)性和維護作為成本的一部分
示例
SaaS示例: BigCommerce,Google Apps,Salesforce,Dropbox,MailChimp,ZenDesk,DocuSign,Slack,Hubspot。
多租戶
什么是多租戶
聊到PaaS,SaaS,就不得不談到多租戶。
多租戶指一套系統(tǒng)能夠支撐多個租戶。一個租戶通常是具有相似訪問模式和權(quán)限的一組用戶,典型的租戶是同一個組織或者公司的若干用戶。
要實現(xiàn)多租戶,首先需要考慮的是數(shù)據(jù)層面的多租戶。數(shù)據(jù)層的多租戶模型對上層服務(wù)和應(yīng)用的多租戶實現(xiàn)有突出影響。本文重點介紹數(shù)據(jù)層多租戶對各種多租戶模型的支持。
權(quán)衡不同的多租戶實現(xiàn)方式時,需要考慮如下因素:
- 擴展性:租戶數(shù)量級別,以及未來發(fā)展趨勢
- 安全性:租戶之間數(shù)據(jù)隔離級別要求
- 資源共享:多租戶通常有某種形式的資源共享,需要避免某個租戶的糟糕SQL吃掉系統(tǒng)資源,影響其他租戶的響應(yīng)時間
- 靈活性:不同租戶可能有不同的需求,對特定租戶需求的擴展能力
- 跨租戶分析和優(yōu)化:對全部租戶或者多個租戶的數(shù)據(jù)和行為進行分析的能力
- 運維和管理:運維管理的復(fù)雜度和便宜性,包括監(jiān)控、修改數(shù)據(jù)庫模式、創(chuàng)建索引、收集統(tǒng)計數(shù)據(jù)、數(shù)據(jù)加載等
- 成本:總體擁有成本,包括方案實現(xiàn)成本、運維成本等
多租戶模型
多租戶模型描述了租戶和該租戶的數(shù)據(jù)之間的映射關(guān)系。不同的多租戶模型會影響數(shù)據(jù)庫和應(yīng)用程序的設(shè)計、管理和維護。
一租戶一數(shù)據(jù)庫
最簡單的多租戶實現(xiàn)方式是為每一個租戶創(chuàng)建一個數(shù)據(jù)庫,如下圖所示。應(yīng)用程序為每個租戶分配一個租戶id,并為每個租戶配置相應(yīng)的數(shù)據(jù)庫連接信息(包括數(shù)據(jù)庫ip、端口等)。應(yīng)用程序根據(jù)租戶id連接到為其分配的數(shù)據(jù)庫。

這種模型中不同租戶的數(shù)據(jù)物理隔離,安全級別高。如果每個租戶的數(shù)據(jù)庫使用不同的硬件和數(shù)據(jù)庫類型,則他們之間的資源使用也是物理隔離的;如果租戶的數(shù)據(jù)庫共用同一套硬件,則需要對資源進行合理分配和管理,避免相互影響。由于不同租戶使用獨立的數(shù)據(jù)庫,靈活性好,容易滿足不同租戶的特定需求(譬如需要額外的字段)。出現(xiàn)故障時影響面小。缺點是數(shù)據(jù)庫數(shù)量大,維護復(fù)雜,擁有成本高。適合租戶數(shù)目比較少的場景。
一租戶一名字空間(Schema/Namespace)
多個租戶共享同一個數(shù)據(jù)庫,每個租戶擁有獨立的名字空間(或模式)。應(yīng)用程序為每個租戶分配一個id,并把每個租戶的所有操作限制在為其分配的名字空間/模式之中。如下圖所示。

這種多租戶模型下,不同租戶的數(shù)據(jù)邏輯上相互隔離,安全控制相對簡單。不同租戶有不同的模式,可以簡便的滿足不同租戶的特定需求,靈活性高。對資源管理能力要求高,以避免不同租戶競爭資源??梢园巡煌鈶舻臄?shù)據(jù)存儲在不同的磁盤上,降低了對磁盤IO的競爭。運維和管理較復(fù)雜,不易實現(xiàn)大量租戶的跨租戶分析。適合租戶數(shù)目適中的場景。
全共享方式
不同租戶共享同一個數(shù)據(jù)庫、同一個名字空間。不同租戶的數(shù)據(jù)在同一組表中共存,通過租戶id標(biāo)記和訪問不同租戶的數(shù)據(jù)(應(yīng)用需要調(diào)整訪問數(shù)據(jù)的SQL以包含租戶id)。如下圖所示。

這種多租戶模型中,不同租戶的數(shù)據(jù)物理存儲在一起,對系統(tǒng)的資源隔離和安全隔離要求很高。運維相對簡單。擴展能力好,可以支持較多數(shù)量租戶。由于租戶數(shù)據(jù)存儲在一起,跨租戶數(shù)據(jù)分析和優(yōu)化非常簡單。成本低,可以較低的代價支持更多的租戶。
全共享模型中,很多數(shù)據(jù)庫采用添加大量自定義字段的方式滿足不同租戶的特定需求,以提高靈活性。這種方式有諸多局限性,譬如字段數(shù)目不能太多、管理復(fù)雜等。支持更多半結(jié)構(gòu)化數(shù)據(jù),包括JSON 等,通過這種半結(jié)構(gòu)化數(shù)據(jù),可以更靈活、高效、便捷的滿足不同租戶的特定需求。
案例剖析
下面我通過用一個簡單的全共享數(shù)據(jù)庫的多租戶模式的案例,來對PaaS平臺型軟件進行演示。
系統(tǒng)賬戶層級如下圖所示:

在上圖這個系統(tǒng)用戶的層級關(guān)系中,我們需要四張表:
ga_user:此表用于存儲PaaS平臺T1內(nèi)所有的賬戶相關(guān)信息,如laowang@test.com,zhangshan@test.com,jingwa@test.com等賬戶和密碼。此表用于登錄平臺時,系統(tǒng)認(rèn)證和權(quán)限控制時所用。
tenant:用于存儲所有的租戶信息,如SaaS A, SaaS B,SaaS C。
customer:用于存儲所有的客戶信息,如消費客戶/組織S1,消費客戶/組織S2。
device:用于存儲平臺內(nèi)所有客戶,租戶的設(shè)備相關(guān)信息。
具體流程,可以概括為:
我們用PaaS平臺系統(tǒng)管理員帳號laowang@test.com登錄系統(tǒng)。
在系統(tǒng)中,新建SaaS A, SaaS B,SaaS C三個組織或者客戶,并為這三個租戶分配各種租戶的租戶管理員賬戶,分別為zhangsan@test.com, lisi@test.com,wangwu@test.com。當(dāng)我們用這三個賬戶登錄系統(tǒng)時,系統(tǒng)根據(jù)租戶id和相應(yīng)的權(quán)限顯示對應(yīng)的框架內(nèi)容和組織信息。
這三個組織利用PaaS平臺上的服務(wù)框架和應(yīng)用為需要的客戶和組織提供一站式解決方案,有點類似我們采用阿里云平臺上的服務(wù)框架來解決自己的企業(yè)需求。
當(dāng)SaaS B具體到實施項目時,為消費客戶/組織S1或消費客戶/組織S2分配帳號進行公有云訂閱服務(wù),進行項目迭代交付或者本地化實施。
UML實體圖如下:

開源代碼下載:https://gitee.com/dgiiot/dgiot
有問反饋給我們 https://gitee.com/dgiiot/dgiot/issues
商務(wù)合作vx:dgiotcs