摘 要: 針對中小企業(yè)資金缺乏,、IT人才較少等問題,,本文對傳統(tǒng)軟件向SaaS軟件轉型關鍵技術進行研究,提出了SaaS軟件關鍵技術的解決方案以及七層架構模型,。
關鍵詞: 傳統(tǒng)軟件,; SaaS; 架構模型
隨著互聯(lián)網技術的高速發(fā)展和應用軟件的日漸成熟,,軟件即服務SaaS(Software-as-a-Service)模式已經成為一種新型的軟件運營模式,。在國外,SaaS正在滲透到軟件應用的各個方面,,甚至開始成為主流,。全球SaaS模式的創(chuàng)始者和領導者Salesforce就是以SaaS模式的CRM取得巨大成功的。而在國內還是以傳統(tǒng)按需求定制軟件的方式為主,,SaaS還處于起步階段,。在傳統(tǒng)軟件的基礎上向SaaS軟件轉型已經成為當前勢不可擋的潮流。SaaS作為一種新的軟件服務模式,,技術架構與傳統(tǒng)軟件相比有很大差別,,在技術上還有很多新的挑戰(zhàn)。因此本文對傳統(tǒng)軟件向SaaS軟件轉型的關鍵技術進行研究并提出一些可行方案,。
1 SaaS模式及相關概念
1.1 SaaS模式概述
SaaS模式是一種通過互聯(lián)網提供軟件服務的模式,,與傳統(tǒng)軟件相比,SaaS軟件不再是用戶向軟件開發(fā)商定制軟件或進行二次開發(fā),而是軟件提供商將應用軟件部署在自己的服務器上并通過互聯(lián)網提供在線軟件服務,。軟件提供商負責搭建一切網絡設備,、軟硬件運作平臺等基礎設施,并進行后期維護,。企業(yè)用戶根據(jù)實際需要通過Internet向軟件提供商訂購所需要的應用軟件服務,,按照訂購服務的多少和時間長短給提供商支付費用。SaaS模式下通過租用服務的方式,,用戶不需再定制軟件,、購買硬件、建設機房,、招聘IT維護人員就可以按需使用軟件,,也不需要用戶關心軟件后期的維護,只要連上網就可以享受軟件商提供的軟件服務,。用戶不需要一次性支付很大一筆軟件定制費,,只需支付很少一點租用費用就可以使用軟件,風險非常低,,發(fā)現(xiàn)軟件不滿足要求或不適合本公司管理模式可以停止續(xù)租[1],。
這種基于SaaS模式的軟件服務方式大大減輕了對于資金缺乏、IT人才匱乏的中小企業(yè)的壓力,。同時,,對軟件商也不用在推廣和銷售軟件產品時投入巨大營銷成本和后期的維護成本,不需維護多個用戶的多套軟件產品出現(xiàn)的奇怪問題,,減輕了軟件維護人員的負擔,。SaaS模式的4個基本要素是:互聯(lián)網平臺、網絡存儲,、按需付費,、多租戶。
1.2 多租戶概念
多租戶是指多個企業(yè)用戶(在SaaS模式下習慣用租戶)共同使用部署在軟件供應商服務器上的一個應用實例,,供應商提供一套軟硬件資源,,網絡設備進行運營管理和資源維護,通過對租戶的規(guī)模效應來大大降低了軟件運營的成本,。多租戶(Multi-tenant)是SaaS最重要的核心概念和關鍵技術之一,。
1.3 成熟度模型
根據(jù)SaaS應用是否具有可配置性、高性能,、可伸縮性等特點,,把SaaS成熟度模型分為四級[1]。
第一級:定制開發(fā),,是最初級的SaaS應用成熟度,。每個租戶對應一個單獨開發(fā)的軟件實例。與傳統(tǒng)模式幾乎沒有差別,最大不同就在于商業(yè)模式,,即軟硬件以及相應維護均由SaaS供應商負責,。
第二級:可配置,是在第一級的基礎上改進的,。每個租戶仍然對應一個單獨的軟件實例,,但是供應商只提供了一套代碼,通過不同的配置來靈活地滿足各個租戶,。
第三級:高性能的多租戶架構,提出了多租戶的概念,,多個租戶共享同一個運行實例。這種多租戶單實例的架構更接近于真正意義上的SaaS應用架構,。降低了硬件及維護成本,,發(fā)揮了SaaS應用的規(guī)模效應。
第四級:可伸縮性的多租戶架構,,添加了中間調度層將多個租戶分配到多個運行實例上,,通過多個運行實例來分擔大規(guī)模租戶訪問。這一級成熟度硬件和租戶數(shù)量可以無限制地增加,,因此是最為理想的SaaS架構。
2 SaaS軟件的關鍵技術
2.1 多租戶模式下的數(shù)據(jù)存儲
SaaS軟件與傳統(tǒng)軟件相比,,最大不同就是多租戶模式,,多個租戶共享同一個軟件實例,租戶的數(shù)據(jù)既有隔離又有共享,。根據(jù)多租戶模式的特點,,在數(shù)據(jù)存儲上有3種被選的解決方案。
方案1: 獨立數(shù)據(jù)庫,。這種數(shù)據(jù)存儲方案將每個租戶的數(shù)據(jù)信息單獨存儲在獨立的數(shù)據(jù)庫中,,是實現(xiàn)SaaS數(shù)據(jù)隔離最便捷的方式,而且對一個租戶數(shù)據(jù)模型的更改不會影響其他租戶的數(shù)據(jù),,安全性好,。但是這種方案大大增加了數(shù)據(jù)庫的安裝費用,有多少個租戶就需要搭建多少個數(shù)據(jù)庫,。這種數(shù)據(jù)存儲方案適用于像銀行,、醫(yī)院等安全性要求較高的企業(yè),但明顯不適合資金缺乏的中小企業(yè)的使用,。
方案2:共享數(shù)據(jù)庫,。獨立架構,每個租戶共享同一個數(shù)據(jù)庫,,但是對于每個租戶都有一個獨立的數(shù)據(jù)庫架構與之對應,,這意味著各個租戶都有一套不同的數(shù)據(jù)表結構。當創(chuàng)建一個新租戶時,系統(tǒng)會相應地創(chuàng)建一套默認的表結構,,同時與一個獨立的數(shù)據(jù)庫架構建立關聯(lián)關系,。可在一個數(shù)據(jù)庫中存儲多個租戶的數(shù)據(jù),,與獨立數(shù)據(jù)庫相比,,雖然數(shù)據(jù)庫的搭建費用降低了,還有一定的數(shù)據(jù)隔離,,但是存在故障時恢復數(shù)據(jù)困難和數(shù)據(jù)統(tǒng)計難度,。
方案3:共享數(shù)據(jù)庫。共享架構,,即所有的租戶共享一個數(shù)據(jù)庫,,共用同一套數(shù)據(jù)表結構。一個數(shù)據(jù)表存儲了所有租戶的數(shù)據(jù)信息,,通過一個TenantID字段來區(qū)分各個租戶的數(shù)據(jù),。這種方案是共享程度最高,隔離級別最低的數(shù)據(jù)存儲方式,。這種方案又是硬件維護和購買成本最低的,,每臺數(shù)據(jù)庫服務器支持的租戶最多。這種方式非常適用于大規(guī)模的中小企業(yè)的租戶,。因此下面將詳細研究這種方案下的關鍵技術,。
2.2 共享數(shù)據(jù)庫共享架構的多租戶模式
(1) 多租戶技術
多租戶技術是SaaS服務模式區(qū)別于傳統(tǒng)模式最本質的區(qū)別,達到SaaS模式的成熟度模型的必要條件是解決數(shù)據(jù)的隔離性,,實現(xiàn)多租戶模式,。在SaaS模式下建立多租戶,必須在業(yè)務表增加一個TenantID字段用來區(qū)別每個不同的租戶,,保證每個租戶數(shù)據(jù)的安全,。如表1所示。
通過TenantID字段來獲得對應租戶的業(yè)務數(shù)據(jù),。當系統(tǒng)用到租戶的業(yè)務數(shù)據(jù)時,,需要在每條SQL語句中增加‘TenantID = ?’ 條件進行業(yè)務數(shù)據(jù)操作,。
(2) 數(shù)據(jù)擴展技術[2]
為了滿足不同租戶的不同需求,,SaaS軟件必須能夠保證對數(shù)據(jù)可擴展。多租戶模式滿足大規(guī)模租戶對數(shù)據(jù)的個性化需要,,最常見的解決方案就是實現(xiàn)擴展數(shù)據(jù)的可配置,。實現(xiàn)數(shù)據(jù)的可配置有以下3種常見方案。
方案1:定制字段,,就是根據(jù)租戶的需要在各租戶共有的數(shù)據(jù)表上添加相應的定制字段來保存擴展數(shù)據(jù),。這種方案數(shù)據(jù)擴展非常簡單但是其擴展性非常有限,,當租戶量達到一定數(shù)量,表中添加的字段就會非常多,,而且每個租戶添加的字段對另外租戶是沒有任何意義的,,嚴重破壞了表的結構,有些擴展字段可能為空,,浪費了表空間,。
方案2:預分配字段,該方法在表格中提供一定數(shù)量的預設字段,,當租戶要擴展數(shù)據(jù)時,,從表中選取適當?shù)念A設字段進行擴展,但是不同租戶選取同一個預設字段的含義可能也不一樣,。如表2中TenantID字段區(qū)分每個租戶,,除了一些固定的字段外,還提供了一些預分配字段,,Ext1,、Ext2、Ext3就是預分配的字段,,預分配字段的使用由租戶自己預定,,一般初始為字符串類型,其真實類型可以采用元數(shù)據(jù)表來進行跟蹤,。
這種方案雖然能滿足可配置,、可擴展的需求,但是預留過多浪費空間,,預設過少,又不能滿足租戶的需求,。
方案3: 名稱值對,,本方案采用一個單獨的表來存儲擴展數(shù)據(jù)。擴展表將數(shù)據(jù)表的橫向擴展列轉換成縱向的擴展數(shù)據(jù)集,,為每一條原數(shù)據(jù)記錄設一個擴展字段,,保存為擴展表中的一條記錄。將數(shù)據(jù)表中的數(shù)據(jù)記錄與元數(shù)據(jù)表中的配置記錄相關聯(lián),,構成擴展數(shù)據(jù)記錄,。如圖1所示。
雖然這種方案很好地達到了多租戶數(shù)據(jù)擴展的靈活性要求,,但增加了查詢,、更新記錄等數(shù)據(jù)庫操作的復雜度,每次操作都涉及到多個表間的關聯(lián),,因此該方案也有待優(yōu)化,。
方案4:XML[3]共享模型的數(shù)據(jù)擴展,,這種方案在數(shù)據(jù)表中采用一種XML數(shù)據(jù)類型字段來存儲租戶間的數(shù)據(jù)。當今主流的關系數(shù)據(jù)系統(tǒng)都支持XML數(shù)據(jù)的存儲和管理,,并提供了很多函數(shù)來直接對XML文檔節(jié)點進行管理,。下面以Oracle數(shù)據(jù)庫系統(tǒng)為例。
表結構:TableName(TenantID,Col1,Col2,,XMLDataField),其中TenantID,、Col1,、Col2字段是所有租戶共用的字段;XMLDataField字段存儲租戶特有的異構數(shù)據(jù),,其格式完全遵循XML的格式,。設計XMLDataField字段的格式如下:
<UserExtendCols>
<UserExtendCol1 colName=' ' colType=' '>value1
</UserExtendCol1>
<UserExtendCol2 colName=' ' colType=' '>value2
</UserExtendCol2>
<UserExtendCol3 colName=' ' colType=' '>value3
</UserExtendCol3>
……
</UserExtendCols>
XML文檔中每個子節(jié)點代表租戶的一個擴展列,包括列名,、列的數(shù)據(jù)類型,、列所對應的值等信息。每增加一個擴展列就在相應的XML文檔中添加一個子節(jié)點,,滿足租戶對數(shù)據(jù)擴展的個性化需要,。
使用XML字段作為數(shù)據(jù)擴展方案,對擴展數(shù)據(jù)的操作簡單,,不需頻繁地多表連接,,可以靈活地滿足多租戶模式下的異構數(shù)據(jù)的定制,提高了性能,。該方案的使用需要在系統(tǒng)的架構模式中添加一層對XML數(shù)據(jù)進行解析再呈現(xiàn)給客戶以及對客戶數(shù)據(jù)封裝成XML數(shù)據(jù)再保存到數(shù)據(jù)庫中,。
2.3 多租戶模式下的功能可配置
SaaS軟件所強調的是“按需使用,按需付費”,。在SaaS模式下,,租戶根據(jù)自己不同的需求來使用同一軟件,則需達到可配置性要求[4],。實現(xiàn)功能的可配置,,可采用如圖2所示的四級表結構。
每個租戶對應一個預設的功能模式,,預設了租戶的基本功能,。功能模式由多個原子功能構成。租戶表存儲租戶的相關信息,,TenantID:租戶的唯一標識;UserName:租戶的登錄賬號,;Password:租戶的登錄密碼;PatternNo:租戶使用系統(tǒng)包括的功能模式。功能表存儲了系統(tǒng)所有的原子功能相關信息,,MENU_No:原子功能唯一標識;MENU_NAME:原子功能的名稱,。模式表存儲了功能模式信息。PatternNo:系統(tǒng)中包括的所有模式標識,。MENU_No:功能模式包括的原子功能,。模式表可以作為租戶選擇功能的向導,。租戶模式功能表存儲了租戶所擁有的功能的相關信息。租戶模式功能表定義了該租戶所有的功能信息,,該表可以作為租戶所擁有的所有功能的查詢,。
3 SaaS模式下的體系架構設計
軟件系統(tǒng)架構決定了系統(tǒng)的靈魂,好的體系架構可以保證系統(tǒng)的穩(wěn)定性,、健壯性,、可擴展性、兼容性和可用性,,而傳統(tǒng)軟件通常需要采用分層的設計思想,,一般大致分為5層,包括客戶層,、表現(xiàn)層,、控制層、業(yè)務邏輯層,、數(shù)據(jù)庫層,。這種傳統(tǒng)軟件的體系架構分層不能很好地滿足SaaS軟件的可擴展性和可配置性,難以滿足SaaS模式下多租戶的個性化需要,。因此在討論了SaaS軟件關鍵技術之后,,本文提出SaaS模式下的體系架構。在傳統(tǒng)軟件體系架構的基礎上增加配置管理層和數(shù)據(jù)模式選擇層,。根據(jù)多租戶的不同需要配置管理層可以對系統(tǒng)的功能進行配置管理,,選擇滿足自身業(yè)務需要的功能。數(shù)據(jù)模式選擇層是軟件供應商為了考慮各種租戶對系統(tǒng)的不同需求而對數(shù)據(jù)存儲模式進行選擇,。如果數(shù)據(jù)擴展方案采用的是XML數(shù)據(jù)字段,,則需要在此基礎上添加一層XML數(shù)據(jù)處理層,完成對XML數(shù)據(jù)的解析,、封裝處理,。這樣的體系架構可以極大地滿足大規(guī)模的各種行業(yè)的租戶,具有極大的可擴展性,。SaaS系統(tǒng)體系架構如圖3所示。
本文就傳統(tǒng)軟件向SaaS軟件轉型的一些關鍵技術進行了研究,,并給出了一些技術可行的解決方案,。在此基礎上對傳統(tǒng)軟件體系架構進行修改,總結出了SaaS軟件的體系架構模型,可以很好地滿足SaaS軟件的可擴展性和可配置性要求。本文對SaaS軟件的安全性研究涉及較少,,安全性[5]是決定租戶對SaaS軟件信任的關鍵要素,,只有很好的安全保障才能讓租戶放心地使用SaaS軟件。因此,,后期將會對安全性問題進行詳細的研究,。
參考文獻
[1] 葉偉.互聯(lián)網時代的軟件革命SaaS架構設計[M]. 北京:電子工業(yè)出版社,,2008
[2] 查俊,溫浩宇. SaaS數(shù)據(jù)層方案比較研究[J].情報雜志, 2010,29(B06):176-177.
[3] 周健,,孫麗燕.面向對象XML的存儲模式的研究[J]. 計算機技術與發(fā)展,,2009,19(3):114-117,119.
[4] 姜世超,基于SaaS模式Multi-Tenant應用的可配置性研究[D].大連:大連海事大學,, 2009.
[5] 琚潔慧,,吳吉義,章劍林,等.SaaS應用中的多租戶與安全技術研究[J].電信科學,,2010,26(10):41-46.