倪時龍,彭巍,林振天,吳飛,許雙成
(1.福建億榕信息技術有限公司福建福州350003;2.國網上海市電力公司信息通信公司上海200436;3.國網福建省電力有限公司福建福州350003)
基于傳統群件Lotus Domlno的分布式解決方案
倪時龍1,彭巍2,林振天1,吳飛3,許雙成1
(1.福建億榕信息技術有限公司福建福州350003;2.國網上海市電力公司信息通信公司上海200436;3.國網福建省電力有限公司福建福州350003)
Lotus Domino是優秀的辦公電子協作平臺,具有獨特的安全特性和快速開發等特征。被廣泛運用于政府和企業
的辦公自動化和郵件系統。但由于使用的是文檔型數據庫,隨著數據量增長,性能會急劇下降;且它的數據庫、Web服
務器、應用服務器均耦合集成,不易擴展,在大型系統的應用上有很大的局限。隨著信息化的發展,政府企業都開始
集約化方向發展,希望建立集中式的數據中心。Lotus Domino在大型應用系統上的發展遭遇瓶頸。通過運用分布式的思想對Lotus Domino進行包裝改造,建設可擴展的副本和分片機制,建設統一的數據索引中心與調度中,將數據與負載動態平攤于多個Domino服務器節點間。通過國家電網協同辦公一級部署系統的運行實踐表明,創新的分布式架構讓Domino平臺充分發揮其優勢情況下又規避了它在負載能力上的不足。
分布式系統;群件;協同辦公;Lotus Domino
分布式軟件系統(Distributed Software Systems)是支持分布式處理的軟件系統,是在由通信網絡互聯的多處理機體系結構上執行任務的系統。在一個分布式系統中,一組獨立的計算機展現給用戶的是一個統一的整體,類似一個系統[1]。系統擁有多種通用的邏輯資源,可以動態的分配任務,分散的物理和邏輯資源通過計算機網絡實現信息交換[2]。
Lotus Domino是集成Web服務器、系統設計、目錄、權限管理、數據庫為一體的群件平臺。數據采用文檔型數據庫,以NSF數據庫為數據存儲載體,數據庫本身不帶有鎖和事務機制,在做分布式改造上有較大的優勢[3]。但數據、設計與服務耦合度太高,需要先進行適當拆解,方可實現分布式的改造[4]。分布式數據存儲需要有統一的數據訪問方式對集中的數據進行統一的訪問[5_6]。分布式計算需要任務的合理調度分配服務,保障多個節點溝通流暢,協同工作。
整體分布式架構分為:數據/計算節點群、配置中心、數據索引中心和調度轉向中心,如圖1所示。
數據/計算節點群是分布式存儲和分布式計算的基本構成,由Domino節點改造后構成,總體采用副本+分片的結構,負責存儲數據和做業務邏輯功能計算,同時承擔橫向的調度轉向;配置中心是為實現配置的統一,將系統中的配置進行集中管理和集中訪問,由Domino節點集群構成;數據索引中心是分散數據的統一訪問的關鍵,保存了所有數據的元數據索引,基于Lucene框架開發,借助了搜索引擎的倒排索引技術,確保大數據量的快速檢索,分散的數據節點中數據發生改變時實時發起同步,將元數據同步到數據索引中心;調度轉向,采用反向代理技術負責對分散的節點提供系統統一的訪問入口,整個分布式節點的調度由兩方面構成:縱向的副本節點調度由反向代理負責j橫向的分片節點調度創建過程由計算幾點內的調度模塊負責,其余讀寫調度過程由數據中心指引。
通過調度、索引中心和配置中心的分工配合,實現對數據計算節點群的統一訪問和統一管理。系統的數據計算節點可根據實際需要動態擴展,系統各組成部分均進行了高可用建設,消除了系統的單點故障。系統中的數據存儲和業務邏輯計算的主體仍存在于Domino節點內,可以保持原系統的數據存儲結構與業務計算邏輯,所以這種分布式的方案是可延續的方案,保護了歷史積累和投資。

圖1 日志系統核心框架圖
傳統Domino平臺提供的使用方式,是高度耦合了Web服務器、業務數據、配置數據、非結構化數據和代碼邏輯的服務器平臺。為實現分布式的拆分,需對Domino進行梳理和拆分改造。在整個方案中,Domino承擔了兩種角色,一是數據計算節點(Domino應用服務器),另一是配置中心節點(Domino配置服務器)。本節具體闡述應用服務器,配置服務器在數據中心一節詳細說明。
Domino應用服務器是整個系統中主要的數據存儲節點和邏輯計算的節點群。負責業務數據、海量數據存放;核心業務功能的實現;數據的創建、更新和刪除;與數據索引中心同步數據。Domino采用副本+分片的結構,副本與分片可以根據業務的需要動態擴展。副本間采用Domino自帶的復制技術,數據分片策略可根據實際需要通過配置實現規劃或者采用Hash算法進行分配,本方案采用隨機數的Hash算法進行分配。在將Domino承擔應用服務器前還需要對Domino進行設計分離、配置分離、自動分庫和內部調度等改造。最后根據改造后的設計規劃系統的構成。
2.1設計分離
傳統Domino的協同辦公系統采用設計及數據集中存放在統一的NSF數據庫中。分布式需要對數據拆分,但耦合的設計和數據,導致拆分后設計也隨之分散,不僅不便于管理而且容易出現不同步的情況。需要對設計和數據進行分離。Domino 的Http訪問文檔,由內部的轉換機制完成對文檔和表單到Http頁面的轉換,內部轉換過程包裝在平臺內不可能改變,需要使用創新的技巧繞過傳統的設計。
Domino的數據訪問載體為Domino表單,但Domino表單由于平臺限制只能訪問本數據庫的數據,Domino表單的機制是數據與設計耦合的關鍵。利用Domino代理的方式實現保存、提交的操作,取代Domino自帶的表單保存、提交功能。Domino代理的操作需要使用指定數據路徑的跨庫數據訪問替代本庫數據訪問的方式。數據庫設計與數據分離的核心是解決分離后文檔打開、文檔保存和文檔業務操作。
改造后的文檔打開過程,執行主表單打開(OpenForm)替代傳統的文檔打開方式(OpenDocument),改造本庫訪問數據的方式,業務處理邏輯轉為由主表單打開代理進行計算,計算過程的數據訪問通過數據路徑進行跨庫的訪問,過程如圖2所示。

圖2 數據打開過程
文檔保存過程通過文檔提交前,在提交前通過腳本修改網頁表單提交的Action路徑,改變指向主表單的提交請求為指向保存代理。將業務邏輯轉移到主表單保存代理中進行處理,如圖3所示。
2.2自動分庫
Domino服務器不適應單個數據庫的數據量過大,但單臺服務器上的數據庫數量卻沒有明顯的限制。所以數據庫增長到一定程度,應進行靜態處理,新增新的數據庫進行替代,防止數據不間斷的增長。這個過程的自動完成,稱為自動分庫。Domino平臺單個文檔數據庫數據量太大,會導致查詢效率降低,協同辦公業務模塊物理文檔可以通過系統動態分庫技術實現文檔數據庫大小處于合理水平,從而提高系統性能。

圖3 數據保存過程

圖4 自動分庫原理
可按文檔數量或數據庫大小控制Domino數據庫的分庫。為了控制每個數據庫的大小,當數據庫到達閾值時數據庫中不再新增文檔。會繼續增加文檔的數據庫稱為動態庫,不再增加文檔的數據庫稱為靜態庫。為了分散單個數據庫的承載壓力,可以配置多個動態庫及靜態庫。新建文檔時隨機在多個動態庫選擇一個創建文檔,如果大量并發對一個數據庫進行寫操作,系統性能會受單個數據庫性能的瓶頸影響,且易造成數據庫損壞,通過多個動態庫來分攤這種壓力,可有效避免類似問題。靜態庫不再新增文檔,只用于查詢歷史的數據。自動分庫通過數據分散存儲和請求的分攤成功解決了系統性能問題。
2.3多庫調度
整體分布式的機制,是希望在多臺服務器間進行分布,但為了充分利用資源,在單臺服務器內部也需要進行多個數據庫的改造,實現在多個數據庫內的合理分布和動態擴展。首先對一些概念進行定義:
活動庫:會繼續新增新公文的數據庫稱為活動庫。自動分庫就是創建一個新庫替換舊的活動庫作為活動庫。
多庫分攤:一個模塊同時啟用多個活動庫,新建公文時應用從多個活動庫中隨機選擇一個在其中創建公文。(如果大量并發的訪問一個數據庫,系統性能會單個數據庫性能的瓶頸影響,且易造成數據庫損壞。)
自動分庫+多庫分攤:維護一個活動庫的列表,當其中某個數據庫達到設定的大小(或文檔數量)時,自動創建一個數據庫替換該庫,同時更新活動庫列表。
多庫負載內部調度:
1)在數據新增請求時,在維護的數據庫活動庫列表中隨機(或者按某種策略)在其中一個數據庫中新增文檔。
2)在數據處理請求時,根據數據中記錄的所在庫和UNID定位找到相應的數據庫和數據文檔進行處理。
3)在數據訪問請求時,通數據處理請求相似,根據數據庫索引中維護的數據所在庫與UNID定位到相應的數據后再進行訪問。

圖5 多庫調度原理
2.4總體目錄結構
通過改造將傳統的偶爾結構轉成獨立結構。為分布式改造打下基礎。

圖6 Domino總體改造
Domino應用服務器除了外層目錄(names.nsf庫)外,內層共包含5個目錄,服務器內部目錄結構如圖7所示。
總目錄coa:所有系統相關數據庫和目錄存放在coa目錄下。
設計數據庫目錄src:存放設計的數據庫目錄,不存放數據。Src目錄下還存在一個core的二級目錄,用于存放核心封裝代碼的數據庫。設計僅運行,也不直接更新。設計由配置服務器統一管理,再推送過來。Domino應用服務器僅接受更新即可。
文檔數據庫目錄doc:存放各模塊文檔數據,每個模塊各自存放。支持按策略自動分庫和多庫負載。分散在多個數據庫的數據集中到Orac1e統一視圖中進行管理。
海量數據庫目錄mss:存放正文附件等非結構數據的海量數據庫,與文檔數據庫相同機制,支持自動分庫。
配置數據庫目錄cfg:存放配置的數據庫目錄,配置只讀不提供更新。配置的更新由統一服務器管理,再推送過來。與設計的管理模式類似。
臨時數據庫目錄tmp:存放臨時數據的數據庫,數據庫的歷史數據直接清除,數據量穩定。

圖7 總體目錄結構
分散的Domino數據計算節點,分攤了數據存儲壓力和業務計算壓力,但同時也帶來了分散數據在訪問上的困難。為了解決數據的統一訪問問題設計了數據索引中心。通過集中所有數據的元數據與權限數據信息,提供了數據的統一訪問能力。在數據索引中心的設計上,為了保障大數據量的快速數據檢索訪問,引進了開源的索引管理框架Lucene,借鑒了搜索引擎的倒排索引技術。數據的同步由Domino數據節點發起,數據索引中心負責管理,并提高統一的數據訪問服務。
3.1Lucene的應用
Lucene是一套索引管理和檢索的開源程式庫,是當前以及最近幾年最受歡迎的免費Java信息檢索程序庫,通常用于全文檢索,但在數據管理功能上適合于作為本系統的數據索引中心。Lucene為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現檢索的功能,或者是以此為基礎建立起完整的檢索引擎。
本方案中通過設計Search服務,對Lucene進行封裝,設計了系統內自定義的XML和JOSN格式。實現了數據索引管理和搜索服務功能。
3.2倒排序索引
倒排索引(inverted index),也常被稱為反向索引、植入檔案或反向檔案,是一種索引方法,被用來存儲在在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統中最常用的數據結構。倒排索引源于實際應用中需要根據屬性的值來查找記錄。這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引。帶有倒排索引的文件我們稱為倒排索引文件,簡稱倒排文件(inverted fi1e)。
引入這種索引技術是由于,系統中數據量大且帶有大量的權限信息,采用傳統的關系型數據庫需要進行多張大表的關聯查詢,性能無法保證。

圖8 Lucene結構
從用戶角度分布式的系統是一個完整的整體。分布式的Domino數據和計算節點,需要自動的調度和分配策略,進行統一管理。數據域計算節點的數量,數據存儲的具體位置和邏輯計算具體執行的節點對于用戶均是透明的。為了實現統一的訪問,系統引入了Nginx反向代理,反向代理同事承擔了縱向的調度,故障的切換等。另一部分的調度服務分散與Domino的數據計算節點內,在調度計算完成后,根據計算結果進行節點跳轉。
4.1反向代理
由于Domino本身是Web服務器,分布式的Domino服務器將Web服務器在HTTP訪問級別就進行了分散,為了實現分散后的統一訪問,引進了反向代理的技術。同時前置的反向代理也可以提供縱向的調度管理作用。
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
反向代理的選擇上,本方案選用了開源的Nginx服務器,Nginx是一個高性能的HTTP和反向代理服務器。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好。
通過對URL中的PATH的首段進行改造,加入數據庫組標識進行對后端服務器的區分。例如使用反向代理前的URL地址為:http://HOST/PATH?Query
若不進行改造,則需要使用不同的HOST進行區分不同的服務器。改造后的URL格式為:
http://HOST/PROXYPATH/PATH?Query
通過不同的PROXYPATH標識不同的服務器,達到統一HOST域名的目的。PROXYPATH目前取值共有以下幾種:Ser*:*為數字,表示節點群內第幾對Domino服務器。(例如:Ser1表示第一對)
App:表示節點群內所有服務器內隨機。
Ser**:第一個*為數字,第二個星為字母,表示節點群的第幾臺服務器。(例如:Ser1a表示第一對內的第一臺)
Cfg:表示訪問配置中心服務器。
4.2服務調度
由于Domino的分布式結構有副本和分片兩種情況,所以在調度上也存在橫向調度和縱向調度兩種。縱向調度對應副本,由于數據和設計完全一致,縱向的調度只需要做隨機分發即可,但需要考慮服務器的失效轉移問題。但副本中有節點發生故障時,就僅將請求分發到副本集中正常的節點上,單節點故障對于用戶透明。橫向調度對應分片,是將請求和任務進行分布式處理的關鍵。為了避免橫向調度的負載過高和單點故障,將橫向調度邏輯放置在數據和計算節點群內,首先由反向代理隨機選取一對節點進行調度計算,調度計算后轉向制定的服務器。本方案的調度算法采用最簡單的隨機算法來進行任務分發。
分布式的軟件系統,分散的配置信息會導致管理困難和配置的不同步等問題。通常需要對配置進行集中,建立統一的配置中心。系統配置的新增和修改均有配置中心完成。由于Domino服務器的特殊性,跨服務器的訪問存在安全隱患,所以由配置中心進行配置的推送。
5.1配置信息組織
根據配置的特征分類,總體分為:
1)適用所有的全局的配置;2)針對個人個性的個人配置;3)針對單位的,單位級配置;4)針對服務器的,需要為每個服務器分別配置的配置分類。
開發過程梳理逐步梳理所有的配置,將配置填充到上圖的配置樹中的相應位置。上圖的配置樹中存在四項總配置,可以在確定需求后提取低級別的總配置到高級別的總體配置中。
5.2推送機制
統一配置服務器包括所有單位各個數據庫的配置信息。例如:業務配置庫,傳統Domino應用方式每個單位都有各自的配置庫,分布式改造后,所有業務的配置信息集中在一個配置庫中,通過單位代碼和模塊ID進行區分。系統管理庫改造后拆分成業務配置庫、用戶定制庫、組織配置庫和流程配置庫等。各個Domino應用服務器的names庫、配置數據通過Domino服務器自帶的復制機制實現與統一配置庫的單向同步。

圖9 Domino服務器
國家電網協同辦公一級部署系統,將原先全國二十幾個省和三十幾個直屬單位共2412家單位分散的協同辦公系統進行集中的建設,用戶量達五十幾萬,最高在線用戶在十五萬以上。系統的負載和并發增長了數十倍。由于歷史的技術積累和投資保護的原因,不應拋棄Domino平臺的使用,故對Domino采用了分布式的改造和包裝。目前已投入生產使用,分布式節點已超過700(采用虛擬機),系統運行穩定,性能優異。
本文針對技術積累和歷史使用悠久的傳統Lotus Domino平臺在高并發高負載和大數據量下出現的瓶頸,進行系統特征的分析。通過集成基于倒排序索引的Lucene和反向代理Nginx實現了創新的分布式改造和包裝。設計了具有群件特殊的分布式協同辦公系統。并在國家電網協同辦公一級部署系統的實踐中得到良好的應用,證明了方案的可行性和優越性。
[1]劉立騏,田華,許維勝,等.CSCW研究理論及應用[J].信息與控制,1998,27(3):190_196.
[2]倪悅,范玉順.基于Web的知識管理系統應用研究[C]//2005亞洲國際過程自動化技術與裝備展覽會論文集,2005.
[3]周曉慶.知識管理系統和CIMS系統的構建與設計[J].計算機應用,2005,25(9):2054_2056.
[4]劉益劍.基于Web的辦公自動化系統軟件開發[J].南京師范大學學報:工程技術版,2005(2):11.
[5]范玉順,吳澄.基于工作流的CIMS應用集成支持系統研究[J].計算機工程與應用,2000,36(2):6_11.
[6]黃蘭,余陽,李長森,等.XForm在工作流管理系統中的應用研究[J].計算機工程與應用,2007,43(6):81_84.
To solVe the tradltlonal dlstrlbuted grouPWare Lotus scheme based on Domlno
NI Shi_1ong1,PENG Wei2,LIN Zhen_tian1,WU Fei3,XU Shuang_cheng1
(1.Fujian Yirong Information Technology Co.Ltd.,Fuzhou 350003,China;2.Shanghai Power Company Information Communications Company,Shanghai 200436,China;3.State Grid Fujian Electric Power Company,Fuzhou 350003,China)
Domino Lotus is a good office e1ectronic co11aboration p1atform,with unique security features and rapid deve1opment and other characteristics.Wide1y used in government and enterprise office automation and mai1 system.But due to the use of document database,with the increase of the amount of data performance wi11 be a sharp dec1inej and its database,web server,app1ication server are coup1ed integration,not easy to expand,in the app1ication of 1arge system have great 1imitations.With the deve1opment of information techno1ogy,government enterprises are beginning to deve1op intensive,hoping to estab1ish centra1-ized data center..The deve1opment of Domino Lotus in the 1arge sca1e app1ication system has encountered the bott1eneck.By using the idea of distributed packaging transformation of Lotus Domino,the construction of sca1ab1e copy and distribution mechanism,construction of a unified data index center and schedu1ing,data and dynamic 1oad equa11y in mu1tip1e Domino server nodes.Through the nationa1 grid co11aborative office 1eve1 dep1oyment system operation practice shows that,innovative distributed architecture for domino p1atform give fu11 p1ay to its advantages and avoid the it in the 1oad capacity prob1ems.
distributed systemj groupwarej co11aborative officej Lotus Domino
TN319
A
1674_6236(2016)10_0100_05
2015_06_02稿件編號:201506026
倪時龍(1977—),男,福建平潭人,碩士研究生。研究方向:信息管理與信息系統。