王寶會 高 遠(yuǎn)
(北京航空航天大學(xué)軟件學(xué)院,北京 100191)
面向BIM數(shù)據(jù)的分布式文件存儲系統(tǒng)設(shè)計與實施
王寶會 高 遠(yuǎn)
(北京航空航天大學(xué)軟件學(xué)院,北京 100191)
國內(nèi)的BIM相關(guān)技術(shù)在近幾年發(fā)展迅速,隨之高速增長的BIM數(shù)據(jù)對存儲系統(tǒng)的高可用性、負(fù)載均衡、橫向擴(kuò)容等功能也提出了更高的要求。本文就BIM行業(yè)內(nèi)某公司需求,設(shè)計并實施了以FastDFS為主HDFS為輔的分布式文件存儲系統(tǒng)。該公司主要存儲BIM數(shù)據(jù)中常見的.rfa文件和.rvt文件,其中,.rfa文件的大小在KB級,而部分.rvt文件則體量較大。主流分布式存儲系統(tǒng)HDFS適合存儲大文件,為節(jié)省研發(fā)HDFS針對小文件存儲算法方面的成本,本文引入了適合存儲中小型文件的輕量級分布式存儲系統(tǒng)FastDFS,以此為主要存儲系統(tǒng),并部署HDFS,存儲大文件,為公司之后優(yōu)化HDFS小文件存儲,遷移全部存儲平臺至HDFS,并在此之上建立分布式計算平臺打下技術(shù)基礎(chǔ)。本文在兩個存儲系統(tǒng)之上布置了配有Keepalived模塊的Nginx反向代理服務(wù)器,統(tǒng)一用戶存取入口,在保證系統(tǒng)負(fù)載均衡和高可用性能力的同時封裝了WebAPI,依據(jù)文件大小,將BIM數(shù)據(jù)分別存入FastDFS和HDFS。經(jīng)測試,新系統(tǒng)較原系統(tǒng)在存儲性能方面有較大提升,并增添了高可用性、負(fù)載均衡、橫向擴(kuò)容等功能。
BIM數(shù)據(jù);FastDFS;HDFS
【DOI】 10.16670/j.cnki.cn11-5823/tu.2016.05.08
BIM(Building Information Modeling)是“建筑信息建模”的簡稱。自上世紀(jì)70年代于美國提出至今,BIM以其在縮短工期、節(jié)約成本、提高生產(chǎn)效率等方面的先天優(yōu)勢,廣泛應(yīng)用于以美國為首的眾多國家。[1]BIM的不斷發(fā)展也對其相關(guān)數(shù)據(jù)的存儲提出了更高的要求。經(jīng)總結(jié),BIM數(shù)據(jù)有如下特點:
1.1 BIM數(shù)據(jù)的非結(jié)構(gòu)性
依據(jù)美國國家BIM標(biāo)準(zhǔn)對BIM的定義,該模型具有物理特性(PhysicalCharacteristic)和功能特性(FunctionalCharacteristic)。[2]其中,物理特性可以理解為其包含了建筑的幾何信息; 功能特性,是指其集成了工程項目中的各種相關(guān)信息。BIM各方信息相關(guān)性大、結(jié)構(gòu)復(fù)雜,非結(jié)構(gòu)性明顯,傳統(tǒng)關(guān)系數(shù)據(jù)庫難以滿足其存儲需求,應(yīng)選擇文件存儲系統(tǒng)存儲其相關(guān)數(shù)據(jù)。
1.2 BIM數(shù)據(jù)量的不斷增長
隨著工程項目的不斷開展,BIM數(shù)據(jù)的體量不斷增大,呈現(xiàn)大數(shù)據(jù)(Big Data)特性。由于BIM大數(shù)據(jù)是企業(yè)的寶貴財富,往往不會刪除,這就要求存儲系統(tǒng)具有優(yōu)秀的橫向擴(kuò)容能力,以適應(yīng)增長的數(shù)據(jù)量。
BIM數(shù)據(jù)的應(yīng)用貫穿建筑設(shè)施的全部生命周期(見圖1),存儲系統(tǒng)應(yīng)具有高可用性,以保證數(shù)據(jù)的長期存儲且,便于項目各階段的工作人員隨時調(diào)用信息。
海量的BIM數(shù)據(jù)還包含了多種格式,為提升系統(tǒng)處理BIM數(shù)據(jù)的效率,應(yīng)對于常用的幾種數(shù)據(jù)格式進(jìn)行更有針對性的存儲處理。

圖1 BIM數(shù)據(jù)應(yīng)用于建筑設(shè)施的全部生命周期

圖2 原存儲系統(tǒng)結(jié)構(gòu)
在性能方面,存儲系統(tǒng)應(yīng)具有負(fù)載均衡功能,以滿足大量數(shù)據(jù)的存儲、調(diào)用并行操作需求。
本文就BIM行業(yè)內(nèi)某公司需求,建立以FastDFS為主HDFS為輔的分布式存儲系統(tǒng),為該公司的長遠(yuǎn)發(fā)展打下BIM數(shù)據(jù)的存儲技術(shù)基礎(chǔ)。
該公司原存儲系統(tǒng)框架是基于SOA(Service-Oriented Architecture)的傳統(tǒng)文件存儲系統(tǒng),配置WCF(Windows Communication Foundation)中間件,連接客戶端和存儲服務(wù)器,提供文件處理和業(yè)務(wù)功能服務(wù),詳細(xì)系統(tǒng)結(jié)構(gòu)如圖2所示。
根據(jù)BIM數(shù)據(jù)在非結(jié)構(gòu)性和體量大方面的特點,總結(jié)出如下功能需求如圖3所示。

圖3 功能需求
BIM數(shù)據(jù)格式方面,該公司存儲的以Revit的.rfa文件和.rvt文件為主。其中,.rfa文件的大小在KB級,適合用FastDFS存儲,而部分.rvt文件體量過大,超出了FastDFS的適用范圍。出于對系統(tǒng)性能和成本的綜合考慮,本文以較輕量級的FastDFS為主,存儲中小文件,并引入HDFS,存儲較大的.rvt文件,為公司之后優(yōu)化HDFS小文件存儲,遷移全部存儲平臺至HDFS,并在此之上建立分布式計算平臺打下技術(shù)基礎(chǔ)。
為便于分配FastDFS和HDFS的存儲任務(wù),保持系統(tǒng)的高可用性和負(fù)載均衡能力,統(tǒng)一用戶使用接口,本文在FastDFS和HDFS之上布置了配有Keepalived模塊的Nginx反向代理服務(wù)器。
以上述需求為基礎(chǔ),本文設(shè)計并實施了以FastDFS為主HDFS為副的分布式文件存儲系統(tǒng)。新系統(tǒng)針對BIM數(shù)據(jù)的特點提供了上傳、下載、高可用性、負(fù)載均衡、橫向擴(kuò)容功能。
3.1 FastDFS
FastDFS(Fast Distributed File System)是一款類GFS(Google File System)的開源分布式文件存儲系統(tǒng),由淘寶網(wǎng)的資深架構(gòu)師余慶開發(fā)。FastDFS含有TrackerServer和StorageServer兩種角色,分別負(fù)責(zé)調(diào)度任務(wù)和文件數(shù)據(jù)的存儲。其存儲集群由一個或多個分組組成,每個分組下包含一臺或多臺Storage Server。同一組內(nèi)的Storage Server相互備份,所存文件完全一致,從而實現(xiàn)冗余備份功能; 存儲集群的存儲總?cè)萘繛樗薪M的容量線性和。這種設(shè)計簡化了系統(tǒng)的存儲和備份機(jī)制。FastDFS還取消了分塊存儲文件的功能,元數(shù)據(jù)保存在文件名中,適合存儲中小型文件。[3]綜上,F(xiàn)astDFS在保存基本功能的前提下,大大減小系統(tǒng)體量,打造了其“輕”、“快”的系統(tǒng)特點。

圖4 物理拓?fù)?/p>
3.2 HDFS
HDFS(Hadoop Distributed File System)作為云計算平臺Hadoop的分布式文件系統(tǒng),已成為當(dāng)前海量存儲集群上部署的主流文件系統(tǒng)。HDFS采用主從結(jié)構(gòu)(Master-Slave結(jié)構(gòu)),由一個NameNode和若干個DataNode組成[4],與FastDFS相似。由于元數(shù)據(jù)全部存于NameNode的內(nèi)存中,過多的小文件存儲會最終耗盡NameNode的尋址能力,又HDFS采用分塊方式存儲文件,故HDFS適合存儲大文件。
3.3 Nginx
Nginx(“Enginex”)是俄羅斯人Igor Sysoev編寫的一款高性能的HTTP和反向代理服務(wù)器,也是一款I(lǐng)MAP/POP3/SMTP代理服務(wù)器。Nginx已經(jīng)在俄羅斯最大的門戶網(wǎng)站——Rambler Media(www.rambler.ru)上運行多年,俄羅斯超過20%的虛擬主機(jī)平臺采用Nginx作為反向代理服務(wù)器。在國內(nèi),已經(jīng)有新浪博客、新浪播客、搜狐通行證、網(wǎng)易新聞、網(wǎng)易博客、金山逍遙網(wǎng)、金山愛詞霸等多家網(wǎng)站、頻道使用Nginx服務(wù)器[5]。
3.4 Keepalived
Keepalived是由C語言編寫的路由軟件,其所提供的高可用性是通過VRRP(Virtual Router Redundancy Protocol)協(xié)議實現(xiàn)的[6]。VRRP,即虛擬路由冗余協(xié)議,可使用戶通過虛擬IP多路訪問鏈路上的多臺路由器。
根據(jù)公司對存儲系統(tǒng)的實際需求,本文將以FastDFS為主HDFS為副的分布式文件存儲系統(tǒng)應(yīng)用于BIM信息平臺,其物理拓?fù)鋱D如圖4所示,詳細(xì)功能介紹如下:
4.1 上傳與下載
用戶通過Keepalived模塊建立的虛擬IP訪問Nginx服務(wù)器申請上傳或下載服務(wù)。對于上傳,Nginx根據(jù)文件大小和閾值(本文定為500MB)選擇調(diào)用FastDFS或HDFS的上傳文件API,并將文件名和文件大小存入數(shù)據(jù)庫; 下載時,用戶依文件名查詢數(shù)據(jù)庫的元數(shù)據(jù),經(jīng)Nginx服務(wù)器,從FastDFS或HDFS下載文件。
4.2 高可用性

圖5 HDFS的靜態(tài)負(fù)載均衡原理
高可用性要求系統(tǒng)在升級或出現(xiàn)故障時,運行在該系統(tǒng)上的數(shù)據(jù)不會丟失,而且可以在盡可能短的時間內(nèi)恢復(fù)系統(tǒng)的正常運行。
FastDFS采取對等結(jié)構(gòu),以保證高可用性,可存在多臺TrackerServer和StorageServer,且各自集群內(nèi)部關(guān)系平等。每臺StorageServer會向所有TrackerServer通信,當(dāng)客戶端需通過TrackerSrver訪問StorageServer時,以輪轉(zhuǎn)方式選擇TrackerServer。
HDFS采取主從結(jié)構(gòu),通過設(shè)置兩臺NameNode來保證高可用性。其中,一臺NameNode處于Active狀態(tài),接管全部調(diào)度任務(wù),另一臺處于Standby狀態(tài),保持與ActiveNameNode的元數(shù)據(jù)同步,在檢測到ActiveNameNode停止工作時,變?yōu)锳ctive狀態(tài)。DataNode會與兩臺NameNode通信,確保信息同步。
FastDFS和HDFS均采用冗余備份方式實現(xiàn)文件數(shù)據(jù)存儲的高可用性。FastDFS中同一分組內(nèi)StorageServer相互備份,備份份數(shù)等于組內(nèi)StorageServer的數(shù)量; HDFS的默認(rèn)備份三份,兩個副本分別存在一個機(jī)架的不同DataNode上,一個副本存在另一個機(jī)架上的DataNode。
反向代理服務(wù)器Nginx采用主從結(jié)構(gòu),通過Keepalived模塊實現(xiàn)高可用。Keepalived是VRRP協(xié)議的實現(xiàn)。對于多臺服務(wù)器,一臺為MASTER,其余為BACKUP,MASTER負(fù)責(zé)主要任務(wù),BACKUP處于監(jiān)聽狀態(tài)。當(dāng)MASTER停止工作時,其余BACKUP依據(jù)VRRP協(xié)議競選MASTER。
4.3 負(fù)載均衡
FastDFS由TrackerServer提供負(fù)載均衡功能。以存儲為例,其選擇StorageServer的默認(rèn)算法是:對于可用的多個分組,以現(xiàn)存儲空間使用率(剩余存儲空間/總存儲空間)為主要決定因素,每當(dāng)進(jìn)行存儲操作時更新評價值,選出評價值最高的兩個Group(優(yōu)先選擇最高評價值的分組,若不可用,則選擇次高),再以輪詢方式選擇所選分組內(nèi)的StorageServer。
HDFS通過Balancer程序?qū)崿F(xiàn)對文件數(shù)據(jù)的靜態(tài)負(fù)載均衡。思路為:先機(jī)架間平衡,后機(jī)架內(nèi)衡機(jī),且均以圖5所示策略均衡負(fù)載。更新機(jī)架間或機(jī)架內(nèi)個節(jié)點的平均存儲利用率(同F(xiàn)astDFS),結(jié)合閾值(由用戶設(shè)定),將各機(jī)架或機(jī)架內(nèi)各節(jié)點分組,再按序在組間轉(zhuǎn)移數(shù)據(jù)。
在Nginx上有多種內(nèi)置負(fù)載均衡和擴(kuò)展負(fù)載均衡策略可供選擇。內(nèi)置策略包括輪詢、加權(quán)輪詢、IP_hash、URL_hash等; 擴(kuò)展策略有一致性hash、通用hash等。本文選用加權(quán)輪詢方法。
4.4 橫向擴(kuò)容
FatDFS可在線擴(kuò)容。
當(dāng)有新的StorageServer加入某一分組時,該Storage Server會在啟動時為每個Tracker Server建立一個線程用于通信。Tracker Server在接收到新Storage Server的心跳包時會更新自己對應(yīng)分組的映射表,并將新表同步至該分組的每臺Storage Server上。最后該組內(nèi)一臺存有全部文件的Storage Server會將全部文件備份至新進(jìn)Storage Server。
當(dāng)有新的分組加入時,新分組中的Storage Server會以在啟動時向Tracker Server發(fā)送自己的信息。Tracker Server整理信息,建立該分組與其下Storage Server的映射表,并將該表返回給新組中的每臺Storage Server。此時,存儲系統(tǒng)完成擴(kuò)容。
HDFS也可在線擴(kuò)展存儲量。新的DataNode接入系統(tǒng)時,與NameNode握手,獲得NameNode的namespaceID,該ID用于保證系統(tǒng)的一致性,每當(dāng)DataNode啟動時會在與NameNode握手時確定namespaceID是否一致,不一致時,DataNode會自動關(guān)閉。NameNode會在與DataNode初次握手時給其分配storage ID,用于唯一的標(biāo)識該DataNode,且不會隨DataNode的IP和端口變化而變化。
本文首先分析BIM數(shù)據(jù)的存儲需求,并依此得出BIM數(shù)據(jù)存儲系統(tǒng)應(yīng)具有高可用性、負(fù)載均衡、橫向擴(kuò)展等功能,最終設(shè)計并實施了以FastDFS為主HDFS為副的分布式文件存儲系統(tǒng)。新系統(tǒng)對BIM數(shù)據(jù)的.rfa文件和.rvt文件做出了優(yōu)化,通過在Nginx反向代理服務(wù)器上封裝WebAPI,以文件大小為閾值,調(diào)用FastDFS或HDFS。經(jīng)測試,新系統(tǒng)存的存儲性能有較大提升,并增加了諸多功能,相比原系統(tǒng),能適合存儲BIM數(shù)據(jù)。
[1]王珺. BIM理念及BIM軟件在建設(shè)項目中的應(yīng)用研究[D]. 西南交通大學(xué),2011.
[2]NIBS NationalBIM Standard Project Committee,National BIM Standard[EB/OL]. [2016-10-27]. https://www.nationalbimstandard.org/faqs.
[3]余慶.分布式文件系統(tǒng)FastDFS架構(gòu)剖析[J],程序員,2010,(11):63-65.
[4]HDFSArchitecture[EB/OL].[2016-10-27].http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html.
[5]林麗麗. 使用高性能Web服務(wù)器Nginx實現(xiàn)開源負(fù)載均衡[J]. 大眾科技,2010,卷缺失(7):27,37-38.
[6]Keepalived[EB/OL]. [2016-10-27]. http://www.keepalived.org/
Design and Implementation of Distributed File Storage System based on BIM data
Wang Baohui,Gao Yuan
(SoftwareCollegeofBeihangUniversity,Beijing100191,China)
Building information modeling(BIM)related technologies have been widely used in recent years.Dueto itsnon-structural and growing volume,BIM data puts forward higher requirements tostorage system.In this paper,we design and implement a distributed file systemto store BIM data with high availability,load balancing,and horizontalexpansion.The FastDFs and HDFS(Hadoop distributed filesystem)are basically used to store small files and large files respectively.On top of this arrangement,Nginx reverse proxy server with Keepalived module is deployed tounify the user access port,and encapsulate the Web API to manage the BIM data.Preliminary experiment results show that our approach achieves better performance.
BIM Data; FastDFS; HDFS
國家科技支撐計劃子課題“建筑行業(yè)設(shè)計服務(wù)共性技術(shù)集成平臺研發(fā)與應(yīng)用”(編號: 2014BAH25F03-04)
王寶會(1973-),男,教授級高工,碩士,主要研究方向:軟件架構(gòu); 高遠(yuǎn)(1992-),男,碩士在讀,主要研究方向:軟件工程。
TU17
A
1674-7461(2016)05-0040-05