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