1. 引言
隨著網(wǎng)絡(luò)經(jīng)濟(jì)時代的到來,廣大中小型企業(yè)為了實現(xiàn)低成本產(chǎn)品營銷,紛紛將目光集中在企業(yè)銷售管理系統(tǒng)的租用上。SaaS(Software as a Service)模式的提出正是滿足這種需求的可靠方案;赟aaS模式,所有企業(yè)不必自己設(shè)計開發(fā)銷售管理系統(tǒng),只需向服務(wù)提供商注冊租用即可。這種軟件租用模式為企業(yè)節(jié)省了大量的金錢和時間成本,租戶企業(yè)只需按月或按流量提交費用即可享受服務(wù)。在SaaS技術(shù)體系中,多租戶技術(shù)是整個架構(gòu)的基礎(chǔ)和關(guān)鍵,它是一種適合租用服務(wù)的軟件架構(gòu),其主要的思想是在多個租戶共用相同系統(tǒng)或程序組件時如何保持各個租戶之間的數(shù)據(jù)隔離性,因此,多租戶技術(shù)可以簡單理解為是多租戶的數(shù)據(jù)隔離機(jī)制的設(shè)計與架構(gòu),這對于租戶和服務(wù)提供商節(jié)約成本都具有重要意義。
2. 多租戶技術(shù)實現(xiàn)方案
當(dāng)前,實現(xiàn)多租戶技術(shù)的方案基本上可以分為三個類別。第一種方案是獨立設(shè)備實現(xiàn)多租戶數(shù)據(jù)隔離,服務(wù)供應(yīng)商為每一個租戶都提供一套服務(wù)器設(shè)備和應(yīng)用程序?qū)崿F(xiàn),這種方案服務(wù)提供商投入成本多,因此租戶承擔(dān)的服務(wù)費用比較高,但是租戶數(shù)據(jù)最為安全可靠,不涉及租戶之間數(shù)據(jù)隔離問題。第二種方案是虛擬技術(shù)實現(xiàn)多租戶數(shù)據(jù)隔離,服務(wù)供應(yīng)商為若干租戶共用一套服務(wù)器設(shè)備,使用虛擬技術(shù)將該設(shè)備虛擬成多個操作系統(tǒng),每一個虛擬的操作系統(tǒng)為租戶提供獨立的應(yīng)用軟件和數(shù)據(jù)庫實例,這種使用虛擬技術(shù)共享硬件設(shè)備的方案使服務(wù)提供商和租戶減少了投人成本,租戶數(shù)據(jù)安全程度降低,但也是易于實現(xiàn)數(shù)據(jù)隔離的方案。第三種方案是應(yīng)用級數(shù)據(jù)共享實現(xiàn)租戶數(shù)據(jù)隔離,所有租戶共用同一套服務(wù)器設(shè)備、軟件應(yīng)用程序和數(shù)據(jù)庫實例,數(shù)據(jù)隔離機(jī)制需要從軟件架構(gòu)上控制實現(xiàn),包括web session考慮和數(shù)據(jù)庫設(shè)計等內(nèi)容,該實現(xiàn)方案技術(shù)門檻較高,但租戶共享程度非常高,租戶和供應(yīng)商的投入成本將為最低,唯一可能的缺點就是數(shù)據(jù)安全和隔離機(jī)制需要擔(dān)心,所以這種方案非常適合資本不算充裕的中小型企業(yè)。
由于企業(yè)銷售管理系統(tǒng)主要為中小型企業(yè)提供銷售管理服務(wù),所以我們選擇第三種多租戶技術(shù)實現(xiàn)方案。
3. 企業(yè)銷售管理系統(tǒng)中的多租戶技術(shù)方案
多租戶共享技術(shù)是實現(xiàn)多個租戶企業(yè)在同一環(huán)境中共享同一軟件程序、中間件、服務(wù)器、數(shù)據(jù)庫實例和硬件設(shè)備的軟件架構(gòu)技術(shù),其主要職責(zé)是對多個租戶的數(shù)據(jù)進(jìn)行安全隔離,使各個租戶企業(yè)應(yīng)用互不干擾。要設(shè)計多租戶共享架構(gòu)方案,必須從以下三個方面進(jìn)行設(shè)計,只有滿足以下三個方面,才能達(dá)到租戶之間數(shù)據(jù)隔離的效果,真正實現(xiàn)多租戶共享方案。
3.1 數(shù)據(jù)表設(shè)計
要實現(xiàn)多租戶共享同一數(shù)據(jù)庫,數(shù)據(jù)表必須通過額外的TenantlD字段區(qū)分租戶數(shù)據(jù),這意味著將為每一個數(shù)據(jù)表添加一個TenantlD字段,以達(dá)到租戶之間的數(shù)據(jù)隔離的目的。
數(shù)據(jù)表與實體關(guān)聯(lián)緊密,數(shù)據(jù)表改變了模型,實體亦應(yīng)該隨之改變。因此我們很容易想到為每一個實體添加一個tenantld屬性與之對應(yīng),但感覺這樣設(shè)計過于簡單冗余,所以我們可以為所有的實體抽象出一個基類BaseEntity,將tenantld屬性加入ilBaseEntity,其它實體只需繼承該類即可。其代碼如下:
@MappedSuperclass
public class BaseEntity implements Serializable{
private String id;// ID
private String tenantld;//多租戶標(biāo)識
}
從上面代碼可以看出,基類BaseEntity不僅含有多租戶ID屬性,還包含id屬性,Id屬性是實體的唯一標(biāo)識,對應(yīng)于數(shù)據(jù)表的主鍵。
3.2 Web會話支持
數(shù)據(jù)庫模式的修改為多租戶數(shù)據(jù)分離提供了機(jī)制,為了配合這種分離,本系統(tǒng)的前端web應(yīng)用需要加入特定屬性的會話支持。
HTTP作為一種無狀態(tài)的協(xié)議,web服務(wù)器不能識別哪些請求是同一瀏覽器發(fā)出的,因此web Session機(jī)制才應(yīng)運而生,它立足于web服務(wù)器端,能夠唯一標(biāo)識每一個用戶的狀態(tài)。借助會話狀態(tài),web服務(wù)器能夠把屬于同一會話中的一系列請求和響應(yīng)過程關(guān)聯(lián)起來。
在此基礎(chǔ)上,將租戶ID信息一同存人會話中,使其作為該用戶的一個狀態(tài)屬性,這樣系統(tǒng)能夠根據(jù)會話屬性得知該用戶屬于哪個租戶范圍,也就能在進(jìn)一步的數(shù)據(jù)請求過程中加入租戶ID參數(shù),以完成數(shù)據(jù)隔離的目標(biāo)。
根據(jù)上圖,用戶首次請求會先進(jìn)行身份驗證,審核通過后系統(tǒng)為該用戶生成一個匹配的會話對象,會話對象除了存儲用戶信息外,還要存儲一個租戶ID屬性,這個屬性將成為系統(tǒng)為該用戶提供數(shù)據(jù)的約束條件,能夠有效避免其它租戶數(shù)據(jù)的暴露問題。
3.3 數(shù)據(jù)庫請求攔截
系統(tǒng)利用會話機(jī)制存儲了租戶ID屬性,接下來我們將其拼接成HQL條件發(fā)送給數(shù)據(jù)庫就能實現(xiàn)多租戶的數(shù)據(jù)隔離,舉例如下:
from PRODUCT P where P.TENANTID='402881862be164ae012be16ab6fd0004'
上面HQL查詢語句中,我們?yōu)槠涮砑恿薚ENANTID限制條件,這樣就有效過濾掉其他租戶的數(shù)據(jù),實現(xiàn)了產(chǎn)品實體的數(shù)據(jù)隔離。那么當(dāng)保存、修改和刪除數(shù)據(jù)時,我們也需要進(jìn)行隔離機(jī)制的控制。
由以上論述可知本系統(tǒng)已經(jīng)可以做到基于多租戶的數(shù)據(jù)隔離,但是我們不可能將所有的SQL語句都手動修改生以上模式:首先,將所有SQL都加上租戶ID信息,那么代碼過于僵化,一旦由于需求變動,代碼改動量大;其次,當(dāng)前架構(gòu)層次實現(xiàn)方案中一般很少直接使用JDB C,而是選擇用持久層實體關(guān)系映射框架實現(xiàn),但是修改那些持久層框架難度系數(shù)過高;再次,系統(tǒng)中每次修改、刪除都要進(jìn)行租戶ID 比對邏輯,這種冗余邏輯大量分散在系統(tǒng)各處,不利于系統(tǒng)維護(hù)和升級。
基于以上原因,我們采用A0P編程思想,對系統(tǒng)實體的保存、修改、刪除和加載等操作進(jìn)行攔截處理,將租戶ID對比等邏輯放在該攔截器中統(tǒng)一實現(xiàn),這樣既利于代碼維護(hù),又能快速實現(xiàn)多租戶之間數(shù)據(jù)互不干擾。
4. 結(jié)論
本文重點討論了多租戶技術(shù)的各種實現(xiàn)方案對比,并結(jié)合企業(yè)銷售管理系統(tǒng)給出了一個多租戶共享技術(shù)方案,其中討論了數(shù)據(jù)表設(shè)計、web會話支持和數(shù)據(jù)庫請求攔截這些具體設(shè)計細(xì)節(jié)。多租戶技術(shù)作為SaaS模式的關(guān)鍵性技術(shù),必會為廣大中小型企業(yè)節(jié)約成本和提供便利。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:多租戶技術(shù)在企業(yè)銷售管理系統(tǒng)中的設(shè)計與應(yīng)用
本文網(wǎng)址:http://www.ezxoed.cn/html/solutions/1401931976.html