0 引言
軟件即服務(wù)(Software as a Service,SaaS)是隨著互聯(lián)網(wǎng)技術(shù)而蓬勃發(fā)展的一種新的軟件應(yīng)用模式,其正深刻改變著企業(yè)信息系統(tǒng)的開發(fā)和運(yùn)行方式。目前,企業(yè)內(nèi)部大數(shù)據(jù)的形成使得傳統(tǒng)的報(bào)表系統(tǒng)越來越難以滿足需求,而SaaS系統(tǒng)能夠?qū)⒏呖捎眯耘c大數(shù)據(jù)量相結(jié)合,滿足苛刻的要求;此外,SaaS模式也可提升報(bào)表系統(tǒng)的應(yīng)用范圍,這符合新一代企業(yè)級(jí)報(bào)表系統(tǒng)的發(fā)展趨勢(shì)。但目前為止,國(guó)內(nèi)外的SaaS系統(tǒng)主要集中在CRM等較易SaaS化的業(yè)務(wù)系統(tǒng)上,對(duì)于通用的企業(yè)基礎(chǔ)軟件如報(bào)表等尚未有較多涉及,缺乏系統(tǒng)性的研究,市面上也無一套真正實(shí)用的私有云SaaS報(bào)表系統(tǒng),這成為一個(gè)研究的空白。本文論述基于SaaS的報(bào)表系統(tǒng)的整體架構(gòu)和關(guān)鍵技術(shù)。
1 傳統(tǒng)報(bào)表系統(tǒng)
目前傳統(tǒng)的報(bào)表系統(tǒng)通常為基于服務(wù)器的報(bào)表平臺(tái),可用于創(chuàng)建來自關(guān)系數(shù)據(jù)源和多維數(shù)據(jù)源數(shù)據(jù)的表格報(bào)表,通常這類報(bào)表系統(tǒng)采用三層B/S架構(gòu),分別為表示層、設(shè)計(jì)層和數(shù)據(jù)層。
(1)表示層(Presentation Tier)。
表示層將模板通過解析引擎結(jié)合數(shù)據(jù)展示成頁面,也可以輸出為HTML 頁面和Excel、PDF、Word等第三方文件格式。
(2)設(shè)計(jì)層(Designer Tier)。
其主要任務(wù)是建立報(bào)表、修改報(bào)表、發(fā)布報(bào)表、生成模板等。這涉及報(bào)表的數(shù)據(jù)來源、報(bào)表的格式和報(bào)表輸出,是連接表示層和數(shù)據(jù)層的橋梁。
(3)數(shù)據(jù)層(Data Tier)。
主要是和用戶有關(guān)。報(bào)表系統(tǒng)可以與幾種常用的數(shù)據(jù)庫系統(tǒng)交互,可以輸入多種數(shù)據(jù),如SQL查詢、參數(shù)、常量等,數(shù)據(jù)層主要存儲(chǔ)并管理這些數(shù)據(jù)。傳統(tǒng)的報(bào)表解析流程如圖1所示。
圖1 報(bào)表解析流程
傳統(tǒng)的報(bào)表系統(tǒng)主要集中于報(bào)表的設(shè)計(jì)、展示、輸出等方面,對(duì)于報(bào)表系統(tǒng)整體的架構(gòu)設(shè)計(jì)、可擴(kuò)展性、計(jì)算能力的可伸縮性考慮得較少,報(bào)表服務(wù)器幾乎集中了全部功能,其系統(tǒng)架構(gòu)不能很好地適應(yīng)SaaS所需的高并發(fā)性、高可用性和高擴(kuò)展性特點(diǎn),為了適應(yīng)SaaS必須進(jìn)行重新設(shè)計(jì)。
2 SaaS報(bào)表特性
SaaS報(bào)表系統(tǒng)是一個(gè)相對(duì)較新的概念,目前系統(tǒng)性的研究還較少,沒有成熟的產(chǎn)品可以借鑒。在進(jìn)行SaaS報(bào)表系統(tǒng)設(shè)計(jì)之前,適當(dāng)提煉SaaS報(bào)表的關(guān)鍵特性很有必要,經(jīng)過多方調(diào)研,總結(jié)出SaaS報(bào)表系統(tǒng)應(yīng)當(dāng)具備的關(guān)鍵特性如下:
(1)報(bào)表多租戶特性。多租戶是SaaS的核心技術(shù),其實(shí)質(zhì)上是所有的用戶和應(yīng)用可以共享同一個(gè)基礎(chǔ)架構(gòu)和代碼實(shí)現(xiàn)。由于此技術(shù)較通用,在此不作詳述,下文關(guān)鍵技術(shù)將重點(diǎn)論述如何將報(bào)表數(shù)據(jù)與多租戶結(jié)合起來。
(2)報(bào)表數(shù)據(jù)高安全性。由于在SaaS報(bào)表系統(tǒng)上將承載多個(gè)數(shù)以萬計(jì)終端用戶,涉及很多敏感信息的展示,所以數(shù)據(jù)安全問題是SaaS報(bào)表系統(tǒng)發(fā)展和成長(zhǎng)的一個(gè)重要因素。
(3)報(bào)表界面和輸出可定制性。在SaaS應(yīng)用模式下,所有的報(bào)表應(yīng)用使用的都是同一套代碼、同一套硬件,但是實(shí)際應(yīng)用是千差萬別的,需求是個(gè)性化的。系統(tǒng)界面和輸出必須具備強(qiáng)大的可定制性,并且要確保配置系統(tǒng)是簡(jiǎn)單且易于為用戶所理解的,無需任何第三方的開發(fā)和維護(hù)。
(4)統(tǒng)一數(shù)據(jù)模型。由于SaaS報(bào)表系統(tǒng)為數(shù)據(jù)分析和展示類應(yīng)用,導(dǎo)致其上面運(yùn)行的應(yīng)用都是以數(shù)據(jù)的瀏覽和增刪改為核心,但SaaS報(bào)表系統(tǒng)面對(duì)的數(shù)據(jù)量更大、數(shù)據(jù)環(huán)境更復(fù)雜,SaaS報(bào)表系統(tǒng)需要一個(gè)統(tǒng)一的數(shù)據(jù)模型抽象多種異類數(shù)據(jù)。
3 系統(tǒng)設(shè)計(jì)
3.1 架構(gòu)設(shè)計(jì)
SaaS報(bào)表系統(tǒng)并不是簡(jiǎn)單地將一套傳統(tǒng)的報(bào)表系統(tǒng)放置到SaaS環(huán)境中。由于SaaS報(bào)表對(duì)于性能、伸縮性和高可用性的要求相比傳統(tǒng)報(bào)表都提高很多,其處理的數(shù)據(jù)量也不在一個(gè)級(jí)別,其架構(gòu)必須重新設(shè)計(jì)。一個(gè)典型的SaaS報(bào)表系統(tǒng)架構(gòu)如圖2所示。
圖2 SaaS報(bào)表系統(tǒng)架構(gòu)
(1)在最前面是SaaS報(bào)表系統(tǒng)網(wǎng)關(guān),網(wǎng)關(guān)接受所有對(duì)于報(bào)表系統(tǒng)的訪問,網(wǎng)關(guān)會(huì)根據(jù)請(qǐng)求按照一定的策略動(dòng)態(tài)地將所屬的租戶轉(zhuǎn)發(fā)給對(duì)應(yīng)的服務(wù)器集群。服務(wù)器集群上運(yùn)行同一套SaaS報(bào)表程序,每個(gè)集群都可支持成千上萬用戶,訪問被平衡地分配給每個(gè)集群,這樣做的好處是可以通過建立新的服務(wù)器集群來匹配新增加的用戶。
每個(gè)服務(wù)器集群中都有一個(gè)負(fù)載均衡,如果一個(gè)地方的服務(wù)中斷了,報(bào)表系統(tǒng)一旦檢測(cè)到數(shù)據(jù)中斷就會(huì)立即把負(fù)載均衡在下一個(gè)可用的設(shè)備上,使報(bào)表服務(wù)可以持續(xù)訪問。
(2)當(dāng)服務(wù)器集群收到請(qǐng)求之后,集群會(huì)先通過其內(nèi)置的負(fù)載均衡服務(wù)器來將請(qǐng)求轉(zhuǎn)發(fā)給負(fù)載輕的報(bào)表服務(wù)器。為了達(dá)到架構(gòu)簡(jiǎn)化和高伸縮性的目的,報(bào)表服務(wù)可設(shè)計(jì)成HTTP無狀態(tài),在一個(gè)服務(wù)器集群內(nèi)會(huì)有多個(gè)報(bào)表應(yīng)用服務(wù)器提供無差別的服務(wù)以應(yīng)對(duì)大規(guī)模的請(qǐng)求。
(3)考慮報(bào)表系統(tǒng)需要訪問外部獲取數(shù)據(jù),由于訪問速率的差別,服務(wù)器集群內(nèi)還內(nèi)置了獨(dú)立的數(shù)據(jù)訪問服務(wù)器。報(bào)表服務(wù)器通過數(shù)據(jù)訪問服務(wù)獲取數(shù)據(jù),并可將獲取的數(shù)據(jù)放置到數(shù)據(jù)處理服務(wù)器中進(jìn)行數(shù)據(jù)加工。
(4)當(dāng)報(bào)表服務(wù)在處理請(qǐng)求的時(shí)候,會(huì)將已經(jīng)解析過的報(bào)表頁面緩存到數(shù)據(jù)庫中。再次解析時(shí),如果發(fā)現(xiàn)已被緩存過,則會(huì)調(diào)用這個(gè)用戶所屬的共享數(shù)據(jù)庫直接取得相關(guān)數(shù)據(jù),加快報(bào)表解析的速度。共享數(shù)據(jù)庫通常采用成熟的關(guān)系數(shù)據(jù)庫產(chǎn)品,但需要考慮多租戶應(yīng)用。
SaaS報(bào)表系統(tǒng)架構(gòu)設(shè)計(jì)關(guān)鍵點(diǎn)小結(jié):
(1)使用獨(dú)立的報(bào)表系統(tǒng)網(wǎng)關(guān),根據(jù)負(fù)載量實(shí)現(xiàn)智能路由。
(2)報(bào)表服務(wù)器集群之間相互獨(dú)立,保證高可用性。
(3)服務(wù)器集群內(nèi)部有獨(dú)立的數(shù)據(jù)訪問和數(shù)據(jù)處理服務(wù)器。由于數(shù)據(jù)訪問和數(shù)據(jù)處理與報(bào)表解析速度上的差異,采用異步和消息響應(yīng)機(jī)制,最大程度提高報(bào)表實(shí)例服務(wù)器的負(fù)載率。
(4)報(bào)表服務(wù)必須采用HTTP無狀態(tài),應(yīng)用系統(tǒng)通過獨(dú)立的Session服務(wù)器解決身份認(rèn)證問題。
(5)采用報(bào)表中立格式緩存報(bào)表頁面,加速報(bào)表解析,提高報(bào)表輸出頁面的速度。
3.2 報(bào)表多租戶設(shè)計(jì)
SaaS系統(tǒng)通常需具備多租戶特性,SaaS報(bào)表也不例外。一個(gè)支持多租戶的報(bào)表需要在數(shù)據(jù)庫設(shè)計(jì)上能支持對(duì)數(shù)據(jù)和配置信息進(jìn)行虛擬分區(qū),從而使得每個(gè)使用報(bào)表的租戶能使用到一個(gè)單獨(dú)的虛擬報(bào)表實(shí)例,并且可以對(duì)這個(gè)虛擬實(shí)例進(jìn)行定制化。數(shù)據(jù)庫結(jié)構(gòu)如圖3所示。
圖3 數(shù)據(jù)庫結(jié)構(gòu)圖
共享數(shù)據(jù)庫主要有3種類型的數(shù)據(jù)庫表。
(1)元數(shù)據(jù)表。主要存放用戶定制的對(duì)象和對(duì)象所包含的字段的結(jié)構(gòu)信息。不保存具體的數(shù)據(jù),主要有兩大類:
①Object Metadata表。這個(gè)表主要存儲(chǔ)對(duì)象的信息,其中主要字段包括對(duì)象的ObjID、擁有這個(gè)對(duì)象的租戶的ID 和對(duì)象名稱。
②Column Metadata表。這個(gè)表主要存儲(chǔ)對(duì)象附帶字段的信息,其中主要字段包括字段的ID、擁有這個(gè)字段的租戶的ID、字段名稱以及是否需要被檢索。
(2)數(shù)據(jù)表。主要存儲(chǔ)那些用戶定制的對(duì)象和對(duì)象所包含的字段的數(shù)據(jù),包括兩大類:
①Data表。放置著上面那些對(duì)象和字段所對(duì)應(yīng)的數(shù)據(jù),核心字段有全局唯一的ID(GUID)、租戶ID、對(duì)象ObjID和對(duì)象名稱。
②Clob表。主要存放Clob二進(jìn)制數(shù)據(jù)。
(3)透視表。用來維護(hù)檢索、唯一性和關(guān)系等數(shù)據(jù)以優(yōu)化查詢效率。
①Index表。在運(yùn)行的時(shí)候會(huì)將需要索引的數(shù)據(jù)從Data表同步到Index表中相對(duì)應(yīng)的字段以供檢索。
②Relationships表。定義對(duì)象之間的關(guān)系,起到方便和加速關(guān)系表數(shù)據(jù)讀取的作用。
在物理層面,數(shù)據(jù)庫里面所有表格,包括底下的索引,根據(jù)每個(gè)租戶不同的租戶ID進(jìn)行分區(qū)。例如通過Oracle的Hash分區(qū)技術(shù)可將大規(guī)模的數(shù)據(jù)平均地分割成多個(gè)更小的和更容易管理的分塊,從而幫助大數(shù)據(jù)庫系統(tǒng)能夠在多租戶的環(huán)境下提升速度、伸縮性和可用性等。實(shí)際數(shù)據(jù)庫結(jié)構(gòu)如圖4所示。
圖4 數(shù)據(jù)庫物理結(jié)構(gòu)圖
3.3 統(tǒng)一數(shù)據(jù)集
SaaS模式下的報(bào)表系統(tǒng)面臨的數(shù)據(jù)源將比傳統(tǒng)的報(bào)表系統(tǒng)復(fù)雜很多,數(shù)據(jù)來源有多種,主要有關(guān)系數(shù)據(jù)庫、WebService、文件、數(shù)據(jù)立方體等,甚至有一些通過程序運(yùn)算得到的外部數(shù)據(jù)。這要求SaaS報(bào)表系統(tǒng)有很強(qiáng)的數(shù)據(jù)訪問和處理能力,并且從統(tǒng)一數(shù)據(jù)模型的角度,必須將這些異構(gòu)數(shù)據(jù)源轉(zhuǎn)換成一種統(tǒng)一的數(shù)據(jù)模型(UnifyDataSet)。二次開發(fā)用戶無需關(guān)心數(shù)據(jù)源底層細(xì)節(jié),只需關(guān)心統(tǒng)一數(shù)據(jù)集即可完成報(bào)表的制作。
統(tǒng)一數(shù)據(jù)集也是實(shí)現(xiàn)報(bào)表數(shù)據(jù)安全性的重要手段,其實(shí)現(xiàn)了對(duì)于具體數(shù)據(jù)庫的屏蔽,用戶無法直接操縱底層數(shù)據(jù)庫。統(tǒng)一數(shù)據(jù)集是一個(gè)抽象的概念,其實(shí)際是規(guī)定了一套接口,數(shù)據(jù)源只要實(shí)現(xiàn)了這套接口,SaaS報(bào)表引擎就能夠讀取作為報(bào)表數(shù)據(jù)源使用。統(tǒng)一數(shù)據(jù)集主要有5個(gè)方法,如下:
(1)public int getColumnCount ();//獲取Unify-DataSet的總列數(shù)。
(2)public String getColumnName(int columnIndex);//獲取UnifyDataSet中第columnIndex列的列名。
(3)public boolean hasRow (int rowIndex);//判斷是否存在第rowIndex行,這主要是用于處理超大數(shù)據(jù)時(shí),完全遍歷所有數(shù)據(jù)獲取總行數(shù)相當(dāng)困難,用這個(gè)方法來判斷第rowIndex行是否存在,存在則可讀取。
(4)public int getRowCount(); //獲取UnifyData-Set的總行數(shù)。
(5)public Object getValueAt (int rowIndex,int columnIndex);//獲取UnifyDataSet中第columnIndex列,第rowIndex行的數(shù)據(jù)。
隨著NoSQL數(shù)據(jù)庫的發(fā)展,SaaS報(bào)表系統(tǒng)也應(yīng)支持MongoDB、Neo4J等NoSQL數(shù)據(jù)庫。通過統(tǒng)一數(shù)據(jù)集的轉(zhuǎn)換,用戶應(yīng)當(dāng)無需關(guān)心底層的NoSQL數(shù)據(jù)庫實(shí)現(xiàn)細(xì)節(jié),只需關(guān)注上層的統(tǒng)一數(shù)據(jù)集模型。
3.4 報(bào)表輸出可定制性
SaaS報(bào)表面向眾多的二次開發(fā)系統(tǒng),其輸出必須具備靈活的可定制性。為達(dá)到此目的,報(bào)表輸出時(shí),并不是直接輸出,而是先在云端被解析,生成與輸出格式無關(guān)的報(bào)表實(shí)例,然后再渲染成各種格式,如HTML、Wap、Excel、PDF、Word等,原理如圖5所示。
圖5 基于中立格式報(bào)表實(shí)例報(bào)表輸出
報(bào)表實(shí)例只含有最簡(jiǎn)單的單元格和浮動(dòng)元素,里面是已經(jīng)計(jì)算好的文本,在最終解析時(shí),只需要進(jìn)行布局計(jì)算和輸出文本,速度非常快。
另一個(gè)采用中立報(bào)表實(shí)例的好處就是將來能夠以較小代價(jià)靈活支持其它輸出,例如WPS、Wap頁面等,無需為每種格式重新開發(fā)報(bào)表解析引擎。采用中立報(bào)表示例還為報(bào)表緩存提供條件,通常由于報(bào)表實(shí)例解析時(shí)間較長(zhǎng),服務(wù)可在云端緩存報(bào)表實(shí)例,這樣在面向最終用戶時(shí)可快速渲染出報(bào)表。
4 應(yīng)用實(shí)例
國(guó)家電網(wǎng)SaaS報(bào)表系統(tǒng)是基于國(guó)家電網(wǎng)統(tǒng)一應(yīng)用開發(fā)平臺(tái)構(gòu)建的新一代企業(yè)私有云報(bào)表系統(tǒng),其整體架構(gòu)完全按照上述概念進(jìn)行設(shè)計(jì)和構(gòu)建。在實(shí)際應(yīng)用中,國(guó)網(wǎng)電網(wǎng)SaaS報(bào)表系統(tǒng)被放置到由3個(gè)異地?cái)?shù)據(jù)中心組成的統(tǒng)一云資源池中,大概有1萬臺(tái)服務(wù)器,在云資源管理平臺(tái)基礎(chǔ)上,通過報(bào)表系統(tǒng)治理工具完成所有具體報(bào)表部署系統(tǒng)的部署、升級(jí)、配置等運(yùn)維工作。
系統(tǒng)從2013年3月份上線,迄今為止已經(jīng)服務(wù)于22個(gè)業(yè)務(wù)系統(tǒng),共計(jì)10萬多個(gè)終端用戶,有200多個(gè)二次開發(fā)人員在其之上開發(fā)業(yè)務(wù)專用報(bào)表,目前已擁有總計(jì)超過10萬張報(bào)表模板,新上線的業(yè)務(wù)應(yīng)用均無需單獨(dú)采購和部署報(bào)表系統(tǒng),節(jié)省了大量的軟件硬件購買開支,取得了良好的經(jīng)濟(jì)效益和社會(huì)效益。
5 結(jié)束語
本文在結(jié)合傳統(tǒng)報(bào)表系統(tǒng)和SaaS環(huán)境特性的基礎(chǔ)上提出了構(gòu)建基于SaaS模式的報(bào)表系統(tǒng)的基本要素,針對(duì)SaaS特點(diǎn)提出了SaaS報(bào)表系統(tǒng)的架構(gòu)和關(guān)鍵設(shè)計(jì),并且對(duì)其中的一些難點(diǎn)給出了具體的解決辦法,其架構(gòu)和思路可廣泛應(yīng)用于其它領(lǐng)域的企業(yè)級(jí)SaaS系統(tǒng)中。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的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)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://m.hanmeixuan.com/
本文標(biāo)題:基于SaaS模式的報(bào)表系統(tǒng)
本文網(wǎng)址:http://m.hanmeixuan.com/html/consultation/10820613808.html