倪時龍,彭巍,林振天,吳飛,許雙成
(1.福建億榕信息技術有限公司福建福州350003;2.國網上海市電力公司信息通信公司上海200436;3.國網福建省電力有限公司福建福州350003)
基于傳統(tǒng)群件Lotus Domlno的分布式解決方案
倪時龍1,彭巍2,林振天1,吳飛3,許雙成1
(1.福建億榕信息技術有限公司福建福州350003;2.國網上海市電力公司信息通信公司上海200436;3.國網福建省電力有限公司福建福州350003)
Lotus Domino是優(yōu)秀的辦公電子協(xié)作平臺,具有獨特的安全特性和快速開發(fā)等特征。被廣泛運用于政府和企業(yè)
的辦公自動化和郵件系統(tǒng)。但由于使用的是文檔型數據庫,隨著數據量增長,性能會急劇下降;且它的數據庫、Web服
務器、應用服務器均耦合集成,不易擴展,在大型系統(tǒng)的應用上有很大的局限。隨著信息化的發(fā)展,政府企業(yè)都開始
集約化方向發(fā)展,希望建立集中式的數據中心。Lotus Domino在大型應用系統(tǒng)上的發(fā)展遭遇瓶頸。通過運用分布式的思想對Lotus Domino進行包裝改造,建設可擴展的副本和分片機制,建設統(tǒng)一的數據索引中心與調度中,將數據與負載動態(tài)平攤于多個Domino服務器節(jié)點間。通過國家電網協(xié)同辦公一級部署系統(tǒng)的運行實踐表明,創(chuàng)新的分布式架構讓Domino平臺充分發(fā)揮其優(yōu)勢情況下又規(guī)避了它在負載能力上的不足。
分布式系統(tǒng);群件;協(xié)同辦公;Lotus Domino
分布式軟件系統(tǒng)(Distributed Software Systems)是支持分布式處理的軟件系統(tǒng),是在由通信網絡互聯(lián)的多處理機體系結構上執(zhí)行任務的系統(tǒng)。在一個分布式系統(tǒng)中,一組獨立的計算機展現給用戶的是一個統(tǒng)一的整體,類似一個系統(tǒng)[1]。系統(tǒng)擁有多種通用的邏輯資源,可以動態(tài)的分配任務,分散的物理和邏輯資源通過計算機網絡實現信息交換[2]。
Lotus Domino是集成Web服務器、系統(tǒng)設計、目錄、權限管理、數據庫為一體的群件平臺。數據采用文檔型數據庫,以NSF數據庫為數據存儲載體,數據庫本身不帶有鎖和事務機制,在做分布式改造上有較大的優(yōu)勢[3]。但數據、設計與服務耦合度太高,需要先進行適當拆解,方可實現分布式的改造[4]。分布式數據存儲需要有統(tǒng)一的數據訪問方式對集中的數據進行統(tǒng)一的訪問[5_6]。分布式計算需要任務的合理調度分配服務,保障多個節(jié)點溝通流暢,協(xié)同工作。
整體分布式架構分為:數據/計算節(jié)點群、配置中心、數據索引中心和調度轉向中心,如圖1所示。
數據/計算節(jié)點群是分布式存儲和分布式計算的基本構成,由Domino節(jié)點改造后構成,總體采用副本+分片的結構,負責存儲數據和做業(yè)務邏輯功能計算,同時承擔橫向的調度轉向;配置中心是為實現配置的統(tǒng)一,將系統(tǒng)中的配置進行集中管理和集中訪問,由Domino節(jié)點集群構成;數據索引中心是分散數據的統(tǒng)一訪問的關鍵,保存了所有數據的元數據索引,基于Lucene框架開發(fā),借助了搜索引擎的倒排索引技術,確保大數據量的快速檢索,分散的數據節(jié)點中數據發(fā)生改變時實時發(fā)起同步,將元數據同步到數據索引中心;調度轉向,采用反向代理技術負責對分散的節(jié)點提供系統(tǒng)統(tǒng)一的訪問入口,整個分布式節(jié)點的調度由兩方面構成:縱向的副本節(jié)點調度由反向代理負責j橫向的分片節(jié)點調度創(chuàng)建過程由計算幾點內的調度模塊負責,其余讀寫調度過程由數據中心指引。
通過調度、索引中心和配置中心的分工配合,實現對數據計算節(jié)點群的統(tǒng)一訪問和統(tǒng)一管理。系統(tǒng)的數據計算節(jié)點可根據實際需要動態(tài)擴展,系統(tǒng)各組成部分均進行了高可用建設,消除了系統(tǒng)的單點故障。系統(tǒng)中的數據存儲和業(yè)務邏輯計算的主體仍存在于Domino節(jié)點內,可以保持原系統(tǒng)的數據存儲結構與業(yè)務計算邏輯,所以這種分布式的方案是可延續(xù)的方案,保護了歷史積累和投資。
圖1 日志系統(tǒng)核心框架圖
傳統(tǒng)Domino平臺提供的使用方式,是高度耦合了Web服務器、業(yè)務數據、配置數據、非結構化數據和代碼邏輯的服務器平臺。為實現分布式的拆分,需對Domino進行梳理和拆分改造。在整個方案中,Domino承擔了兩種角色,一是數據計算節(jié)點(Domino應用服務器),另一是配置中心節(jié)點(Domino配置服務器)。本節(jié)具體闡述應用服務器,配置服務器在數據中心一節(jié)詳細說明。
Domino應用服務器是整個系統(tǒng)中主要的數據存儲節(jié)點和邏輯計算的節(jié)點群。負責業(yè)務數據、海量數據存放;核心業(yè)務功能的實現;數據的創(chuàng)建、更新和刪除;與數據索引中心同步數據。Domino采用副本+分片的結構,副本與分片可以根據業(yè)務的需要動態(tài)擴展。副本間采用Domino自帶的復制技術,數據分片策略可根據實際需要通過配置實現規(guī)劃或者采用Hash算法進行分配,本方案采用隨機數的Hash算法進行分配。在將Domino承擔應用服務器前還需要對Domino進行設計分離、配置分離、自動分庫和內部調度等改造。最后根據改造后的設計規(guī)劃系統(tǒng)的構成。
2.1設計分離
傳統(tǒng)Domino的協(xié)同辦公系統(tǒng)采用設計及數據集中存放在統(tǒng)一的NSF數據庫中。分布式需要對數據拆分,但耦合的設計和數據,導致拆分后設計也隨之分散,不僅不便于管理而且容易出現不同步的情況。需要對設計和數據進行分離。Domino 的Http訪問文檔,由內部的轉換機制完成對文檔和表單到Http頁面的轉換,內部轉換過程包裝在平臺內不可能改變,需要使用創(chuàng)新的技巧繞過傳統(tǒng)的設計。
Domino的數據訪問載體為Domino表單,但Domino表單由于平臺限制只能訪問本數據庫的數據,Domino表單的機制是數據與設計耦合的關鍵。利用Domino代理的方式實現保存、提交的操作,取代Domino自帶的表單保存、提交功能。Domino代理的操作需要使用指定數據路徑的跨庫數據訪問替代本庫數據訪問的方式。數據庫設計與數據分離的核心是解決分離后文檔打開、文檔保存和文檔業(yè)務操作。
改造后的文檔打開過程,執(zhí)行主表單打開(OpenForm)替代傳統(tǒng)的文檔打開方式(OpenDocument),改造本庫訪問數據的方式,業(yè)務處理邏輯轉為由主表單打開代理進行計算,計算過程的數據訪問通過數據路徑進行跨庫的訪問,過程如圖2所示。
圖2 數據打開過程
文檔保存過程通過文檔提交前,在提交前通過腳本修改網頁表單提交的Action路徑,改變指向主表單的提交請求為指向保存代理。將業(yè)務邏輯轉移到主表單保存代理中進行處理,如圖3所示。
2.2自動分庫
Domino服務器不適應單個數據庫的數據量過大,但單臺服務器上的數據庫數量卻沒有明顯的限制。所以數據庫增長到一定程度,應進行靜態(tài)處理,新增新的數據庫進行替代,防止數據不間斷的增長。這個過程的自動完成,稱為自動分庫。Domino平臺單個文檔數據庫數據量太大,會導致查詢效率降低,協(xié)同辦公業(yè)務模塊物理文檔可以通過系統(tǒng)動態(tài)分庫技術實現文檔數據庫大小處于合理水平,從而提高系統(tǒng)性能。
圖3 數據保存過程
圖4 自動分庫原理
可按文檔數量或數據庫大小控制Domino數據庫的分庫。為了控制每個數據庫的大小,當數據庫到達閾值時數據庫中不再新增文檔。會繼續(xù)增加文檔的數據庫稱為動態(tài)庫,不再增加文檔的數據庫稱為靜態(tài)庫。為了分散單個數據庫的承載壓力,可以配置多個動態(tài)庫及靜態(tài)庫。新建文檔時隨機在多個動態(tài)庫選擇一個創(chuàng)建文檔,如果大量并發(fā)對一個數據庫進行寫操作,系統(tǒng)性能會受單個數據庫性能的瓶頸影響,且易造成數據庫損壞,通過多個動態(tài)庫來分攤這種壓力,可有效避免類似問題。靜態(tài)庫不再新增文檔,只用于查詢歷史的數據。自動分庫通過數據分散存儲和請求的分攤成功解決了系統(tǒng)性能問題。
2.3多庫調度
整體分布式的機制,是希望在多臺服務器間進行分布,但為了充分利用資源,在單臺服務器內部也需要進行多個數據庫的改造,實現在多個數據庫內的合理分布和動態(tài)擴展。首先對一些概念進行定義:
活動庫:會繼續(xù)新增新公文的數據庫稱為活動庫。自動分庫就是創(chuàng)建一個新庫替換舊的活動庫作為活動庫。
多庫分攤:一個模塊同時啟用多個活動庫,新建公文時應用從多個活動庫中隨機選擇一個在其中創(chuàng)建公文。(如果大量并發(fā)的訪問一個數據庫,系統(tǒng)性能會單個數據庫性能的瓶頸影響,且易造成數據庫損壞。)
自動分庫+多庫分攤:維護一個活動庫的列表,當其中某個數據庫達到設定的大?。ɑ蛭臋n數量)時,自動創(chuàng)建一個數據庫替換該庫,同時更新活動庫列表。
多庫負載內部調度:
1)在數據新增請求時,在維護的數據庫活動庫列表中隨機(或者按某種策略)在其中一個數據庫中新增文檔。
2)在數據處理請求時,根據數據中記錄的所在庫和UNID定位找到相應的數據庫和數據文檔進行處理。
3)在數據訪問請求時,通數據處理請求相似,根據數據庫索引中維護的數據所在庫與UNID定位到相應的數據后再進行訪問。
圖5 多庫調度原理
2.4總體目錄結構
通過改造將傳統(tǒng)的偶爾結構轉成獨立結構。為分布式改造打下基礎。
圖6 Domino總體改造
Domino應用服務器除了外層目錄(names.nsf庫)外,內層共包含5個目錄,服務器內部目錄結構如圖7所示。
總目錄coa:所有系統(tǒng)相關數據庫和目錄存放在coa目錄下。
設計數據庫目錄src:存放設計的數據庫目錄,不存放數據。Src目錄下還存在一個core的二級目錄,用于存放核心封裝代碼的數據庫。設計僅運行,也不直接更新。設計由配置服務器統(tǒng)一管理,再推送過來。Domino應用服務器僅接受更新即可。
文檔數據庫目錄doc:存放各模塊文檔數據,每個模塊各自存放。支持按策略自動分庫和多庫負載。分散在多個數據庫的數據集中到Orac1e統(tǒng)一視圖中進行管理。
海量數據庫目錄mss:存放正文附件等非結構數據的海量數據庫,與文檔數據庫相同機制,支持自動分庫。
配置數據庫目錄cfg:存放配置的數據庫目錄,配置只讀不提供更新。配置的更新由統(tǒng)一服務器管理,再推送過來。與設計的管理模式類似。
臨時數據庫目錄tmp:存放臨時數據的數據庫,數據庫的歷史數據直接清除,數據量穩(wěn)定。
圖7 總體目錄結構
分散的Domino數據計算節(jié)點,分攤了數據存儲壓力和業(yè)務計算壓力,但同時也帶來了分散數據在訪問上的困難。為了解決數據的統(tǒng)一訪問問題設計了數據索引中心。通過集中所有數據的元數據與權限數據信息,提供了數據的統(tǒng)一訪問能力。在數據索引中心的設計上,為了保障大數據量的快速數據檢索訪問,引進了開源的索引管理框架Lucene,借鑒了搜索引擎的倒排索引技術。數據的同步由Domino數據節(jié)點發(fā)起,數據索引中心負責管理,并提高統(tǒng)一的數據訪問服務。
3.1Lucene的應用
Lucene是一套索引管理和檢索的開源程式庫,是當前以及最近幾年最受歡迎的免費Java信息檢索程序庫,通常用于全文檢索,但在數據管理功能上適合于作為本系統(tǒng)的數據索引中心。Lucene為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現檢索的功能,或者是以此為基礎建立起完整的檢索引擎。
本方案中通過設計Search服務,對Lucene進行封裝,設計了系統(tǒng)內自定義的XML和JOSN格式。實現了數據索引管理和搜索服務功能。
3.2倒排序索引
倒排索引(inverted index),也常被稱為反向索引、植入檔案或反向檔案,是一種索引方法,被用來存儲在在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統(tǒng)中最常用的數據結構。倒排索引源于實際應用中需要根據屬性的值來查找記錄。這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引。帶有倒排索引的文件我們稱為倒排索引文件,簡稱倒排文件(inverted fi1e)。
引入這種索引技術是由于,系統(tǒng)中數據量大且?guī)в写罅康臋嘞扌畔?,采用傳統(tǒng)的關系型數據庫需要進行多張大表的關聯(lián)查詢,性能無法保證。
圖8 Lucene結構
從用戶角度分布式的系統(tǒng)是一個完整的整體。分布式的Domino數據和計算節(jié)點,需要自動的調度和分配策略,進行統(tǒng)一管理。數據域計算節(jié)點的數量,數據存儲的具體位置和邏輯計算具體執(zhí)行的節(jié)點對于用戶均是透明的。為了實現統(tǒng)一的訪問,系統(tǒng)引入了Nginx反向代理,反向代理同事承擔了縱向的調度,故障的切換等。另一部分的調度服務分散與Domino的數據計算節(jié)點內,在調度計算完成后,根據計算結果進行節(jié)點跳轉。
4.1反向代理
由于Domino本身是Web服務器,分布式的Domino服務器將Web服務器在HTTP訪問級別就進行了分散,為了實現分散后的統(tǒng)一訪問,引進了反向代理的技術。同時前置的反向代理也可以提供縱向的調度管理作用。
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
反向代理的選擇上,本方案選用了開源的Nginx服務器,Nginx是一個高性能的HTTP和反向代理服務器。其特點是占有內存少,并發(fā)能力強,事實上nginx的并發(fā)能力確實在同類型的網頁服務器中表現較好。
通過對URL中的PATH的首段進行改造,加入數據庫組標識進行對后端服務器的區(qū)分。例如使用反向代理前的URL地址為:http://HOST/PATH?Query
若不進行改造,則需要使用不同的HOST進行區(qū)分不同的服務器。改造后的URL格式為:
http://HOST/PROXYPATH/PATH?Query
通過不同的PROXYPATH標識不同的服務器,達到統(tǒng)一HOST域名的目的。PROXYPATH目前取值共有以下幾種:Ser*:*為數字,表示節(jié)點群內第幾對Domino服務器。(例如:Ser1表示第一對)
App:表示節(jié)點群內所有服務器內隨機。
Ser**:第一個*為數字,第二個星為字母,表示節(jié)點群的第幾臺服務器。(例如:Ser1a表示第一對內的第一臺)
Cfg:表示訪問配置中心服務器。
4.2服務調度
由于Domino的分布式結構有副本和分片兩種情況,所以在調度上也存在橫向調度和縱向調度兩種。縱向調度對應副本,由于數據和設計完全一致,縱向的調度只需要做隨機分發(fā)即可,但需要考慮服務器的失效轉移問題。但副本中有節(jié)點發(fā)生故障時,就僅將請求分發(fā)到副本集中正常的節(jié)點上,單節(jié)點故障對于用戶透明。橫向調度對應分片,是將請求和任務進行分布式處理的關鍵。為了避免橫向調度的負載過高和單點故障,將橫向調度邏輯放置在數據和計算節(jié)點群內,首先由反向代理隨機選取一對節(jié)點進行調度計算,調度計算后轉向制定的服務器。本方案的調度算法采用最簡單的隨機算法來進行任務分發(fā)。
分布式的軟件系統(tǒng),分散的配置信息會導致管理困難和配置的不同步等問題。通常需要對配置進行集中,建立統(tǒng)一的配置中心。系統(tǒng)配置的新增和修改均有配置中心完成。由于Domino服務器的特殊性,跨服務器的訪問存在安全隱患,所以由配置中心進行配置的推送。
5.1配置信息組織
根據配置的特征分類,總體分為:
1)適用所有的全局的配置;2)針對個人個性的個人配置;3)針對單位的,單位級配置;4)針對服務器的,需要為每個服務器分別配置的配置分類。
開發(fā)過程梳理逐步梳理所有的配置,將配置填充到上圖的配置樹中的相應位置。上圖的配置樹中存在四項總配置,可以在確定需求后提取低級別的總配置到高級別的總體配置中。
5.2推送機制
統(tǒng)一配置服務器包括所有單位各個數據庫的配置信息。例如:業(yè)務配置庫,傳統(tǒng)Domino應用方式每個單位都有各自的配置庫,分布式改造后,所有業(yè)務的配置信息集中在一個配置庫中,通過單位代碼和模塊ID進行區(qū)分。系統(tǒng)管理庫改造后拆分成業(yè)務配置庫、用戶定制庫、組織配置庫和流程配置庫等。各個Domino應用服務器的names庫、配置數據通過Domino服務器自帶的復制機制實現與統(tǒng)一配置庫的單向同步。
圖9 Domino服務器
國家電網協(xié)同辦公一級部署系統(tǒng),將原先全國二十幾個省和三十幾個直屬單位共2412家單位分散的協(xié)同辦公系統(tǒng)進行集中的建設,用戶量達五十幾萬,最高在線用戶在十五萬以上。系統(tǒng)的負載和并發(fā)增長了數十倍。由于歷史的技術積累和投資保護的原因,不應拋棄Domino平臺的使用,故對Domino采用了分布式的改造和包裝。目前已投入生產使用,分布式節(jié)點已超過700(采用虛擬機),系統(tǒng)運行穩(wěn)定,性能優(yōu)異。
本文針對技術積累和歷史使用悠久的傳統(tǒng)Lotus Domino平臺在高并發(fā)高負載和大數據量下出現的瓶頸,進行系統(tǒng)特征的分析。通過集成基于倒排序索引的Lucene和反向代理Nginx實現了創(chuàng)新的分布式改造和包裝。設計了具有群件特殊的分布式協(xié)同辦公系統(tǒng)。并在國家電網協(xié)同辦公一級部署系統(tǒng)的實踐中得到良好的應用,證明了方案的可行性和優(yōu)越性。
[1]劉立騏,田華,許維勝,等.CSCW研究理論及應用[J].信息與控制,1998,27(3):190_196.
[2]倪悅,范玉順.基于Web的知識管理系統(tǒng)應用研究[C]//2005亞洲國際過程自動化技術與裝備展覽會論文集,2005.
[3]周曉慶.知識管理系統(tǒng)和CIMS系統(tǒng)的構建與設計[J].計算機應用,2005,25(9):2054_2056.
[4]劉益劍.基于Web的辦公自動化系統(tǒng)軟件開發(fā)[J].南京師范大學學報:工程技術版,2005(2):11.
[5]范玉順,吳澄.基于工作流的CIMS應用集成支持系統(tǒng)研究[J].計算機工程與應用,2000,36(2):6_11.
[6]黃蘭,余陽,李長森,等.XForm在工作流管理系統(tǒng)中的應用研究[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—),男,福建平潭人,碩士研究生。研究方向:信息管理與信息系統(tǒng)。