畢業(yè)論文-基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)_第1頁(yè)
畢業(yè)論文-基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)_第2頁(yè)
畢業(yè)論文-基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)_第3頁(yè)
畢業(yè)論文-基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)_第4頁(yè)
畢業(yè)論文-基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)畢業(yè)設(shè)計(jì)(論文)課 題 名 稱 : 基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì) 學(xué) 院 : 信息科學(xué)與技術(shù)學(xué)院 專 業(yè) : 通信工程 姓 名 : _ 學(xué) 號(hào) : 指 導(dǎo) 教 師 : 基于分布式存儲(chǔ)的云資源平臺(tái)的設(shè)計(jì)摘要隨著互聯(lián)網(wǎng)的蓬勃發(fā)展和信息技術(shù)的大規(guī)模運(yùn)用,非結(jié)構(gòu)化數(shù)據(jù)開(kāi)始爆炸性的增長(zhǎng),面對(duì)越來(lái)越火的“大數(shù)據(jù)”,傳統(tǒng)的集中式數(shù)據(jù)存儲(chǔ)已經(jīng)無(wú)法招架,所以大多數(shù)企業(yè)的關(guān)注焦點(diǎn)放在了云存儲(chǔ)服務(wù)上。大規(guī)模的分布式云存儲(chǔ)系統(tǒng)具有海量的存儲(chǔ)空間,并且可以靈活擴(kuò)展,利用多臺(tái)服務(wù)器分擔(dān)負(fù)荷后,可以對(duì)大數(shù)據(jù)量和高并發(fā)訪問(wèn)的應(yīng)用提供高效可靠的服務(wù)。OpenStack是當(dāng)今風(fēng)靡的開(kāi)源云平臺(tái)

2、管理項(xiàng)目,它能夠控制整個(gè)數(shù)據(jù)中心的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源;MongoDB 是目前在信息技術(shù)產(chǎn)業(yè)十分流行的一種非關(guān)系型數(shù)據(jù)庫(kù),其靈活的數(shù)據(jù)存儲(chǔ)模式備受當(dāng)前IT從業(yè)者的青睞。本論文的主要研究?jī)?nèi)容就是設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于分布式存儲(chǔ)的云資源平臺(tái)。首先搭建OpenStack環(huán)境,在OpenStack云上創(chuàng)建虛擬機(jī),按需給虛擬機(jī)設(shè)置所有的參數(shù)后,在虛擬機(jī)上完成非關(guān)系型數(shù)據(jù)庫(kù)的配置和安裝,最后基于Node.JS完成云資源平臺(tái)的Web系統(tǒng)設(shè)計(jì),使用戶可以訪問(wèn)云資源平臺(tái)并可在平臺(tái)上發(fā)布話題、評(píng)論話題并進(jìn)行互相回復(fù)。本平臺(tái)完成了從最底層到最前端的“全棧式”安裝,囊括了一個(gè)網(wǎng)站所需的所有技術(shù),并且利用OpenStack

3、的掛載硬盤功能很好的實(shí)現(xiàn)了“分布式云存儲(chǔ)”。關(guān)鍵詞:分布式,云存儲(chǔ),OpenStack,Node.js,MongoDB,非關(guān)系型數(shù)據(jù)庫(kù)THE DESIGN OF A CLOUD RESOURCES PLATFORM BASED ON DISTRIBUTED STORAGEABSTRACT With the vigorous development of the Internet and the large-scale application of Information Technology, there is an explosive growth of unstructured data.

4、 Since Big data is getting popular, the traditional centralized data storage has been unable to parry the large amount of data and most enterprises start to focus on the cloud storage service. Large-scale distributed cloud storage systems have huge amounts of storage space which is flexible and can

5、be easily extended. They can provide efficient and reliable service for the application of large amount of data and high concurrent access with multiple servers to share the load. OpenStack is the most popular open source cloud platform management project, it can control the large pool of resources

6、containing whole data computing, storage, and network resources of the data center; MongoDB is a very popular NoSQL database among the information technology industry, its flexible data storage is preferred by many IT professionals currently. Main research content of this paper is to design and impl

7、ement a cloud resources platform based on distributed storage. The first step is to build OpenStack environment, then create a virtual machine on this cloud with proper settings as demanded, after this complete the configuration and installation of NoSQL database. Finally, complete Web system design

8、 of cloud resources platform based on Node. JS. Users can access the cloud resource platform and post topic, comments on the topic and respond to each other below a topic. This platform completed a whole stack type of installation from the bottom to the front, including all technologies a web site n

9、eeds. And with the service of dynamic block storage provided by OpenStack, the cloud platform realized distributed cloud storage very well.Key words: distributed, cloud storage, OpenStack, Node.js, MongoDB, NoSQL目 錄TOC o 1-3 h u HYPERLINK l _Toc19904 1 緒論 PAGEREF _Toc19904 1 HYPERLINK l _Toc22795 1.

10、1 背景介紹 PAGEREF _Toc22795 1 HYPERLINK l _Toc18395 1.2 國(guó)外研究現(xiàn)狀 PAGEREF _Toc18395 2 HYPERLINK l _Toc10765 1.3 國(guó)內(nèi)研究現(xiàn)狀 PAGEREF _Toc10765 2 HYPERLINK l _Toc22694 1.4 研究目的和內(nèi)容 PAGEREF _Toc22694 2 HYPERLINK l _Toc19637 2 云計(jì)算平臺(tái)的架構(gòu)及相關(guān)技術(shù) PAGEREF _Toc19637 4 HYPERLINK l _Toc3599 2.1 云計(jì)算技術(shù) PAGEREF _Toc3599 4 HYPER

11、LINK l _Toc30495 2.2 OpenStack框架 PAGEREF _Toc30495 4 HYPERLINK l _Toc25475 2.2.1 OpenStack概述 PAGEREF _Toc25475 4 HYPERLINK l _Toc23247 2.2.2 OpenStack組件 PAGEREF _Toc23247 5 HYPERLINK l _Toc26102 2.3 分布式數(shù)據(jù)庫(kù)MongoDB PAGEREF _Toc26102 6 HYPERLINK l _Toc15886 2.3.1 NoSQL數(shù)據(jù)庫(kù) PAGEREF _Toc15886 6 HYPERLINK

12、l _Toc8972 2.3.2 MongoDB 應(yīng)用及特點(diǎn) PAGEREF _Toc8972 6 HYPERLINK l _Toc24173 2.4 Node.JS建站技術(shù) PAGEREF _Toc24173 7 HYPERLINK l _Toc5800 2.4.1 Node.js背景 PAGEREF _Toc5800 8 HYPERLINK l _Toc29328 2.4.2 安裝及配置方法 PAGEREF _Toc29328 8 HYPERLINK l _Toc17919 2.4.3 基本特性 PAGEREF _Toc17919 9 HYPERLINK l _Toc30573 2.4.4

13、 核心模塊 PAGEREF _Toc30573 10 HYPERLINK l _Toc31840 3 云資源平臺(tái)的設(shè)計(jì) PAGEREF _Toc31840 12 HYPERLINK l _Toc3206 3.1云平臺(tái)系統(tǒng)框架設(shè)計(jì) PAGEREF _Toc3206 12 HYPERLINK l _Toc32517 3.2云平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì) PAGEREF _Toc32517 13 HYPERLINK l _Toc32483 3.2.1 Mongodb安裝及配置 PAGEREF _Toc32483 14 HYPERLINK l _Toc30894 3.2.2 Redis安裝及配置 PAGEREF _

14、Toc30894 15 HYPERLINK l _Toc24782 3.2.3 利用MongoDB和Redis實(shí)現(xiàn)會(huì)話的持久化 PAGEREF _Toc24782 16 HYPERLINK l _Toc8919 3.3云平臺(tái)Web系統(tǒng)設(shè)計(jì) PAGEREF _Toc8919 17 HYPERLINK l _Toc15536 3.3.1 MVC設(shè)計(jì)模式 PAGEREF _Toc15536 17 HYPERLINK l _Toc8639 3.3.2 Express框架介紹及其安裝 PAGEREF _Toc8639 18 HYPERLINK l _Toc9075 3.3.3 Web系統(tǒng)結(jié)構(gòu)設(shè)計(jì) PAG

15、EREF _Toc9075 19 HYPERLINK l _Toc29092 3.3.4 Web系統(tǒng)功能設(shè)計(jì) PAGEREF _Toc29092 21 HYPERLINK l _Toc6998 4 云資源平臺(tái)的實(shí)現(xiàn) PAGEREF _Toc6998 23 HYPERLINK l _Toc30430 4.1 基于OpenStack搭建云計(jì)算環(huán)境 PAGEREF _Toc30430 23 HYPERLINK l _Toc23072 4.1.1 底層操作系統(tǒng)的環(huán)境準(zhǔn)備 PAGEREF _Toc23072 23 HYPERLINK l _Toc4023 4.1.2 安裝OpenStack認(rèn)證系統(tǒng) PA

16、GEREF _Toc4023 27 HYPERLINK l _Toc19978 4.1.3安裝OpenStack鏡像服務(wù) PAGEREF _Toc19978 28 HYPERLINK l _Toc15931 4.1.4安裝OpenStack計(jì)算組件 PAGEREF _Toc15931 29 HYPERLINK l _Toc21211 4.1.5安裝OpenStack網(wǎng)絡(luò)組件 PAGEREF _Toc21211 30 HYPERLINK l _Toc29013 4.1.6安裝OpenStack儀表盤 PAGEREF _Toc29013 32 HYPERLINK l _Toc7435 4.1.7創(chuàng)

17、建虛擬機(jī)實(shí)例 PAGEREF _Toc7435 33 HYPERLINK l _Toc28651 4.2 在OpenStack上進(jìn)行應(yīng)用開(kāi)發(fā) PAGEREF _Toc28651 34 HYPERLINK l _Toc29423 4.2.1 OpenStack創(chuàng)建虛擬機(jī)時(shí)的流程 PAGEREF _Toc29423 35 HYPERLINK l _Toc15844 4.2.2 OpenStack創(chuàng)建硬盤時(shí)的流程 PAGEREF _Toc15844 37 HYPERLINK l _Toc19507 4.3 云平臺(tái)web應(yīng)用系統(tǒng)實(shí)現(xiàn) PAGEREF _Toc19507 37 HYPERLINK l _

18、Toc21041 4.3.1設(shè)計(jì)數(shù)據(jù)庫(kù)模型 PAGEREF _Toc21041 37 HYPERLINK l _Toc29226 4.3.2 云平臺(tái)主頁(yè) PAGEREF _Toc29226 38 HYPERLINK l _Toc28243 4.3.3 用戶注冊(cè)及登陸功能 PAGEREF _Toc28243 40 HYPERLINK l _Toc20427 4.3.4 發(fā)布話題功能 PAGEREF _Toc20427 41 HYPERLINK l _Toc11004 4.3.5 互相回復(fù)功能 PAGEREF _Toc11004 43 HYPERLINK l _Toc22089 5 結(jié)論 PAGE

19、REF _Toc22089 451 緒論背景介紹隨著互聯(lián)網(wǎng)的蓬勃發(fā)展和IT技術(shù)的大規(guī)模運(yùn)用,非結(jié)構(gòu)化數(shù)據(jù)開(kāi)始爆炸性的增長(zhǎng),面對(duì)越來(lái)越火的“大數(shù)據(jù)”,傳統(tǒng)的集中式數(shù)據(jù)存儲(chǔ)已經(jīng)無(wú)法招架,所以大多數(shù)企業(yè)的關(guān)注焦點(diǎn)放在了云存儲(chǔ)服務(wù)上。大規(guī)模的分布式云存儲(chǔ)系統(tǒng)具有海量的存儲(chǔ)空間,并且可以靈活擴(kuò)展,利用多臺(tái)服務(wù)器分擔(dān)負(fù)荷,對(duì)大數(shù)據(jù)量和高并發(fā)訪問(wèn)的應(yīng)用提供高效可靠的服務(wù)1。云存儲(chǔ)是以云計(jì)算作為基礎(chǔ)而衍生的,美國(guó)國(guó)家標(biāo)準(zhǔn)化與技術(shù)協(xié)會(huì)將云計(jì)算定義為一種能夠通過(guò)網(wǎng)絡(luò)以隨處存取的方式申請(qǐng)?jiān)L問(wèn)資源的模式2。據(jù)某研究機(jī)構(gòu)的調(diào)查顯示,已經(jīng)有超過(guò)一半的企業(yè)和IT專業(yè)人士實(shí)施了或正在計(jì)劃實(shí)施云存儲(chǔ)解決方案。另外值得一提的是,

20、四分之三的人認(rèn)為實(shí)施云遷移計(jì)劃的首要原因便是云存儲(chǔ)。設(shè)計(jì)基于分布式云存儲(chǔ)的方案有兩套,分別基于兩套主流的開(kāi)源云計(jì)算框架Hadoop和OpenStack。Hadoop自帶有分布式文件系統(tǒng)HDFS和非結(jié)構(gòu)化的數(shù)據(jù)庫(kù)HBase, Hadoop的一大優(yōu)勢(shì)就是可以部署在非常低廉的硬件上,通過(guò)動(dòng)態(tài)增加集群節(jié)點(diǎn),就可以對(duì)分布式文件系統(tǒng)進(jìn)行擴(kuò)容,并且HBase也憑借自身強(qiáng)大的性能被廣泛使用;OpenStack是偏基礎(chǔ)設(shè)施服務(wù)層的云平臺(tái)管理項(xiàng)目,它相當(dāng)于自己構(gòu)建了一個(gè)巨大的數(shù)據(jù)中心,承包所有的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源,所以包含了許多組件,OpenStack的搭建比Hadoop復(fù)雜許多,并且對(duì)底層服務(wù)器的性能要求比較

21、高,可以說(shuō)它是一個(gè)大型的開(kāi)源軟件的集合,它的一切都是分布式的。要實(shí)現(xiàn)OpenStack的搭建,必須有較好的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)基礎(chǔ)。雖然Hadoop的搭建方法非常簡(jiǎn)單,對(duì)服務(wù)器的性能要求也比較低,但是OpenStack比Hadoop更偏向底層,就如OpenStack的名字一樣,它不僅僅“開(kāi)源”,更是一個(gè)“棧”,它可以完成虛擬機(jī)后臺(tái)的全套部署,有強(qiáng)大的資源池,只要把OpenStack搭建起來(lái)了,即可在“云”上開(kāi)發(fā)各種各樣的服務(wù)。國(guó)外研究現(xiàn)狀在外國(guó),云計(jì)算起步較早,發(fā)展出來(lái)的應(yīng)用模式較為成熟且種類繁多,在云存儲(chǔ)方面的應(yīng)用也相對(duì)較快。Google、Amazon大概在2006年就已經(jīng)有了類似于Google的

22、應(yīng)用平臺(tái)和亞馬遜彈性計(jì)算云這樣的云計(jì)算和云存儲(chǔ)的方案3。同時(shí),像IBM、微軟、VMware、RedHat、雅虎這樣的廠商也都在各自構(gòu)建云計(jì)算解決方案。拿谷歌的應(yīng)用平臺(tái)做一個(gè)具體的例子來(lái)說(shuō),用戶通過(guò)Gmail用戶名登陸谷歌應(yīng)用平臺(tái)就可使用里面的各種功能。比如打開(kāi)Google Docs網(wǎng)頁(yè),通過(guò)Google Docs就可以編輯和修改文檔,并將其保存在個(gè)人存儲(chǔ)空間中;能夠隨時(shí)隨地再次登錄Google Docs,訪問(wèn)保存在云存儲(chǔ)系統(tǒng)中的文檔;有了云存儲(chǔ)系統(tǒng)的權(quán)限管理功能,用戶還可輕松共享、傳送文檔以及管理版權(quán);谷歌的Music Beta服務(wù)允許用戶保存多達(dá)兩萬(wàn)首音樂(lè)。再比如蘋果的iCloud服務(wù)也有非

23、常強(qiáng)大的功能,可以帶給用戶非常好的體驗(yàn)。1.3 國(guó)內(nèi)研究現(xiàn)狀 隨著計(jì)算機(jī)技術(shù)的發(fā)展, 國(guó)內(nèi)云存儲(chǔ)服務(wù)的進(jìn)步也很大,并且競(jìng)爭(zhēng)激烈。比如像酷盤、金山快盤、華為等網(wǎng)盤服務(wù)都在大幅擴(kuò)張業(yè)務(wù),騰訊旗下的網(wǎng)頁(yè)QQ平臺(tái)也是以云存儲(chǔ)為基礎(chǔ),在平臺(tái)上整合了用戶常用的應(yīng)用程序,只要打開(kāi)網(wǎng)頁(yè)QQ,幾乎所有的日常電腦操作都可以在其中完成。1.4 研究目的和內(nèi)容OpenStack可以說(shuō)是目前開(kāi)源云平臺(tái)管理項(xiàng)目中最風(fēng)靡的,它能夠控制整個(gè)數(shù)據(jù)中心的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源。OpenStack集各種開(kāi)源軟件之大成,是一個(gè)龐大的開(kāi)源軟件集合,由多個(gè)組件一起協(xié)作完成某些具體工作;MongoDB 是目前在 HYPERLINK /vie

24、w/30.htm t _blank IT行業(yè)十分流行的一種非關(guān)系型數(shù)據(jù)庫(kù)(NoSql),其靈活的數(shù)據(jù)存儲(chǔ)模式備受當(dāng)前IT從業(yè)人員的青睞。本論文的主要研究?jī)?nèi)容就是設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于分布式存儲(chǔ)的云資源平臺(tái),首先閱讀相關(guān)文獻(xiàn)了解分布式云存儲(chǔ)的國(guó)內(nèi)外發(fā)展?fàn)顩r和OpenStack及MongoDB的應(yīng)用案例,對(duì)OpenStack框架和分布式存儲(chǔ)平臺(tái)有清晰的認(rèn)識(shí),然后通過(guò)書籍、視頻等參考資料,搭建OpenStack集群,接著在OpenStack云上創(chuàng)建虛擬機(jī),按需給虛擬機(jī)設(shè)置所有的參數(shù)后,在虛擬機(jī)上完成建站時(shí)所需的兩大數(shù)據(jù)庫(kù)Redis和MongoDB的配置和安裝,最后基于Node.JS完成云資源平臺(tái)的Web

25、系統(tǒng)設(shè)計(jì),使用戶可以訪問(wèn)云資源平臺(tái)并可在平臺(tái)上發(fā)布話題、評(píng)論話題并進(jìn)行互相回復(fù)。本論文第一章介紹了課題背景,基于分布式存儲(chǔ)的云資源平臺(tái)的應(yīng)用案例和國(guó)內(nèi)外發(fā)展概況;第二章將介紹OpenStack的構(gòu)架和分布式數(shù)據(jù)庫(kù)MongoDB,闡述云計(jì)算平臺(tái)的基本概念;第三章介紹云資源平臺(tái)的設(shè)計(jì),闡述各個(gè)模塊的設(shè)計(jì)思路及最終想要達(dá)到的功能;第四章根據(jù)設(shè)計(jì)思想實(shí)現(xiàn)OpenStack云的搭建以及在上面開(kāi)發(fā)的云存儲(chǔ)平臺(tái)的各個(gè)功能模塊,使用者可注冊(cè)并登陸、發(fā)布話題,并且可以互相回復(fù);第五章總結(jié)本研究?jī)?nèi)容的成果,分析不足之處,并有所展望。2 云計(jì)算平臺(tái)的架構(gòu)及相關(guān)技術(shù)2.1 云計(jì)算技術(shù)近年來(lái),云計(jì)算被大量應(yīng)用于數(shù)字圖書

26、館、基于互聯(lián)網(wǎng)的教育、商業(yè)等領(lǐng)域,學(xué)術(shù)界相關(guān)發(fā)文量和文獻(xiàn)遞增速度非常快4。2007-2011年CNKI期刊數(shù)據(jù)庫(kù)收錄的核心期刊中,國(guó)際國(guó)內(nèi)文獻(xiàn)共同研究的熱點(diǎn)是虛擬化技術(shù)、云服務(wù)、云計(jì)算的計(jì)算模式、資源共享、云安全、云計(jì)算構(gòu)架模式等5。云計(jì)算系統(tǒng)可以根據(jù)它提供服務(wù)的層次進(jìn)行分類,主要有提供平臺(tái)服務(wù)的系統(tǒng)(PaaS),提供軟件服務(wù)的系統(tǒng)(SaaS)和提供基礎(chǔ)設(shè)施服務(wù)的系統(tǒng)(IaaS)6。云計(jì)算服務(wù)的質(zhì)量直接關(guān)系到用戶的體驗(yàn),因?yàn)橐WC用戶能大量使用服務(wù),目前,研究主要集中在底層基礎(chǔ)設(shè)施服務(wù)的性能分析、優(yōu)化以及測(cè)試研究上面7。云計(jì)算平臺(tái)連接了大量并發(fā)的網(wǎng)絡(luò)計(jì)算和服務(wù),是一個(gè)強(qiáng)大的“云”網(wǎng)絡(luò),而且它利

27、用虛擬化技術(shù)擴(kuò)展了每一個(gè)服務(wù)器的性能,將各自的資源通過(guò)云計(jì)算平臺(tái)結(jié)合起來(lái),提供超級(jí)計(jì)算和存儲(chǔ)能力8。這一也是最近很流行的“云電腦”的概念。這里提到的虛擬機(jī)化技術(shù)其實(shí)是對(duì)計(jì)算機(jī)的各種資源進(jìn)行“虛擬”,比如服務(wù)器、網(wǎng)絡(luò)、存儲(chǔ)等等,虛擬出來(lái)的計(jì)算機(jī)便可以被用戶進(jìn)行“切割”,隨心所欲的使用和分配資源,還能最大化利用物理硬件。2.2 OpenStack框架云計(jì)算模式使客戶將數(shù)據(jù)、應(yīng)用程序或整個(gè)虛擬機(jī)外包,并且所有資源是彈性的,大大減少了客戶在伸縮資源上面需要投入的成本。舉例來(lái)說(shuō),OpenStack,Eucalyptus,CloudStack,OpenNebula是最常見(jiàn)的開(kāi)源云計(jì)算框架,偏基礎(chǔ)設(shè)施服務(wù)層

28、,客戶能夠按照自己的需要對(duì)它進(jìn)行二次開(kāi)發(fā),比如越來(lái)越流行的“私人云”。2.2.1 OpenStack概述OpenStack 由美國(guó)國(guó)家航空航天局和Rackspace合作研發(fā),以Apache許可證授權(quán)開(kāi)放源碼項(xiàng)目,并且是自由團(tuán)建的;可以將OpenStack比作一個(gè)云操作系統(tǒng),用來(lái)管理大量的計(jì)算機(jī)、存儲(chǔ)設(shè)備和網(wǎng)絡(luò)資源組成的資源池。經(jīng)過(guò)OpenStack 的各種組件多種模式的排列組合,可以搭建成各種規(guī)模的“云”9,這些云可能會(huì)是私有云、公共云、混合云。OpenStack的開(kāi)發(fā)社區(qū)每半年就會(huì)舉辦一次完全對(duì)外開(kāi)放的設(shè)計(jì)峰會(huì),以此來(lái)收集需求并寫入即將發(fā)布版本的規(guī)格中,然后社區(qū)制定經(jīng)過(guò)批準(zhǔn)的線路圖,用于指導(dǎo)

29、未來(lái)半年的發(fā)展9。在開(kāi)源云計(jì)算項(xiàng)目領(lǐng)域,OpenStack稱得上是當(dāng)今最熱門的開(kāi)源項(xiàng)目,自五年前開(kāi)始就已經(jīng)超越CloudStack、Eucalyptus、OpenNebula 等其他云計(jì)算開(kāi)源項(xiàng)目。同時(shí),OpenStack 也在逐步追趕VMware這一虛擬化商業(yè)巨頭。正式因?yàn)镺penStack是高度協(xié)作的產(chǎn)物,所以相比之前的幾個(gè)老開(kāi)源項(xiàng)目,OpenStack 更高級(jí)而且更現(xiàn)代化,它的社區(qū)擁有一百多家企業(yè)和1千多位開(kāi)發(fā)者,他們都將OpenStack作為基礎(chǔ)設(shè)置即服務(wù)層的通用前端9。很多主流廠商在2013年都先后宣布支持OpenStack,這包括服務(wù)器廠商中排名前三的惠普、戴爾、IBM,以及Liu

30、nx發(fā)行版廠商中的紅帽、Canonical和SUSE,交換機(jī)廠商中的Cisco、Juniper和Alcatel- Lucent,存儲(chǔ)廠商中的EMC、IBM和NetApp等等,甚至是巨頭Orcale也加入了這場(chǎng)變革9。在許多公司和研究社區(qū)中,OpenStack已成為構(gòu)建私人和公共云首選的開(kāi)源云計(jì)算框架。例如,美國(guó)能源部的Magellan云是一個(gè)值得關(guān)注的OpenStack部署。OpenStack版本一直在升級(jí),所以代碼質(zhì)量和文檔詳盡度的不斷提升,于是OpenStack在國(guó)內(nèi)也開(kāi)始流行起來(lái)。比如瞬聯(lián)軟件、趣游、網(wǎng)易等,他們已經(jīng)分別開(kāi)始嘗試基于OpenStack開(kāi)發(fā)部署自己的云平臺(tái),再比如愛(ài)奇藝、

31、用友、京東、百度、360、美團(tuán)等也紛紛選用OpenStack做云平臺(tái)管理項(xiàng)目。2.2.2 OpenStack組件OpenStack框架由以下組件構(gòu)成:OpenStack Nova計(jì)算、OpenStack Glance鏡像服務(wù)、OpenStack Swift對(duì)象存儲(chǔ)、OpenStack Neutron網(wǎng)絡(luò)連接、OpenStack Cinder塊存儲(chǔ)、OpenStack Keystone身份認(rèn)證和OpenStack Horizon儀表盤10。Nova是OpenStack云的核心組件,負(fù)責(zé)根據(jù)用戶需求啟動(dòng)和停止虛擬機(jī);Glance是虛擬機(jī)的鏡像庫(kù),在Nova服務(wù)發(fā)出請(qǐng)求時(shí),它發(fā)現(xiàn)、檢索和存儲(chǔ)鏡像;S

32、wift使用集群存儲(chǔ)PB級(jí)數(shù)據(jù)。Nertron提供網(wǎng)絡(luò)服務(wù),使用戶能夠創(chuàng)建自己的網(wǎng)絡(luò)和連接它們的接口;Cinder為云中的虛擬機(jī)鏡像提供持久的塊存儲(chǔ);Keystone基于公鑰基礎(chǔ)設(shè)施為云中所有組件提供身份驗(yàn)證和授權(quán),它還允許多租戶環(huán)境,支持group、user、role這種基于角色的訪問(wèn)控制;Horizon是管理云的Web管理接口11。2.3 分布式數(shù)據(jù)庫(kù)MongoDB隨著云計(jì)算的發(fā)展以及各種社交網(wǎng)絡(luò)的崛起,互聯(lián)網(wǎng)每天都會(huì)產(chǎn)生數(shù)以億計(jì)的數(shù)據(jù),信息爆炸已勢(shì)不可擋,數(shù)據(jù)量級(jí)與數(shù)據(jù)操作的復(fù)雜度都有了大幅度提高,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)受到了極大的挑戰(zhàn)12,這時(shí)候一種叫非關(guān)系型數(shù)據(jù)庫(kù)的NoSQL數(shù)據(jù)庫(kù)發(fā)展起

33、來(lái)了,這一小節(jié)將著重介紹MongoDB這一分布式的非關(guān)系型數(shù)據(jù)庫(kù)。存儲(chǔ)訪問(wèn)并分析處理海量數(shù)據(jù)已經(jīng)成為一大研究熱點(diǎn),而云數(shù)據(jù)庫(kù)將數(shù)據(jù)庫(kù)放入云中的這一舉措,巧妙地利用了云的高可用性和可擴(kuò)展性等優(yōu)勢(shì)來(lái)提供數(shù)據(jù)庫(kù)服務(wù),受到了業(yè)界的普遍關(guān)注12。2.3.1 NoSQL數(shù)據(jù)庫(kù)傳統(tǒng)的 HYPERLINK /view/495393.htm t _blank 關(guān)系型數(shù)據(jù)庫(kù)支持簡(jiǎn)單的鍵值查詢、復(fù)雜的多表聯(lián)合查詢還有事務(wù)機(jī)制這種強(qiáng)一致性的機(jī)制,而非關(guān)系型數(shù)據(jù)庫(kù)通常不管強(qiáng)一致性,而注重性能和擴(kuò)展性。具體來(lái)說(shuō),非關(guān)系型數(shù)據(jù)庫(kù)僅保證行級(jí)別的原子性,也就是說(shuō)同時(shí)對(duì)同一個(gè)鍵下的數(shù)據(jù)進(jìn)行的兩個(gè)操作是串行的,這樣保證了每一個(gè)鍵值

34、對(duì)不會(huì)被破壞。NoSQL意為“Not Only SQL”,也就是不僅僅是SQL,我們一般稱其為非關(guān)系型數(shù)據(jù)庫(kù)。非關(guān)系型數(shù)據(jù)庫(kù)分為四大類,分別是鍵值存儲(chǔ) HYPERLINK /view/1088.htm t _blank 數(shù)據(jù)庫(kù)、列存儲(chǔ)數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)和圖形數(shù)據(jù)庫(kù)。NoSQL數(shù)據(jù)庫(kù)沒(méi)有統(tǒng)一的架構(gòu),并且各有所長(zhǎng)。只要適用于某些場(chǎng)合或者某些應(yīng)用,那么這個(gè)NoSQL就是成功的,并且會(huì)在這些場(chǎng)合中體現(xiàn)出遠(yuǎn)勝于其他關(guān)系型數(shù)據(jù)庫(kù)或NoSQL的性能14。本資源平臺(tái)使用的數(shù)據(jù)庫(kù)MongoDB屬于文檔性數(shù)據(jù)庫(kù),文檔型數(shù)據(jù)庫(kù)是鍵值數(shù)據(jù)庫(kù)的升級(jí)版,允許互相之間嵌套鍵值,并且查詢效率高于鍵值數(shù)據(jù)庫(kù)。2.3.2 Mo

35、ngoDB 應(yīng)用及特點(diǎn)MongoDB是一個(gè)由C+語(yǔ)言編寫的基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)開(kāi)源項(xiàng)目,是目前非常流行的一種非關(guān)系型數(shù)據(jù)庫(kù),可以為Web應(yīng)用提供可拓展的高性能數(shù)據(jù)存儲(chǔ)解決方案12。MongoDB的每一條記錄都是一個(gè)Document對(duì)象,很好的實(shí)現(xiàn)了面向?qū)ο蟮乃枷搿ongoDB最大的優(yōu)勢(shì)在于開(kāi)發(fā)人員無(wú)需手動(dòng)編寫SQL語(yǔ)句,便可以實(shí)現(xiàn)所有的數(shù)據(jù)持久操作,直接調(diào)用內(nèi)部已經(jīng)封裝好的方法就能夠輕松實(shí)現(xiàn)增加、讀取、刪除、更新的操作。MongoDB把數(shù)據(jù)存儲(chǔ)在默認(rèn)路徑/data/db目錄下,為提高效率使用內(nèi)存映射文件進(jìn)行管理。MongoDB具有如下特點(diǎn):MongoDB主要解決海量數(shù)據(jù)的訪問(wèn)效率問(wèn)題,

36、它自帶了分布式文件系統(tǒng)GridFS來(lái)支持海量數(shù)據(jù)存儲(chǔ),根據(jù)官方的文檔顯示,在數(shù)據(jù)量達(dá)到50GB時(shí),MongoDB的數(shù)據(jù)庫(kù)訪問(wèn)速度為MySQL訪問(wèn)速度的10倍,甚至以上。MongoDB不但支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而且數(shù)據(jù)查詢功能強(qiáng)大,很多項(xiàng)目都用MongoDB來(lái)替代MySQL來(lái)實(shí)現(xiàn)一些普通的Web應(yīng)用。還有的項(xiàng)目數(shù)據(jù)量實(shí)在太大,MySQL承擔(dān)不了負(fù)荷,無(wú)法處理如此龐大的數(shù)據(jù)量,而在把項(xiàng)目遷移到MongoDB上面后,會(huì)發(fā)現(xiàn)數(shù)據(jù)查詢的速度明顯快了。2.4 Node.JS建站技術(shù)Node.js是一個(gè)可以讓JavaScript運(yùn)行在服務(wù)端的平臺(tái),為實(shí)時(shí)Web應(yīng)用開(kāi)發(fā)而誕生,它的設(shè)計(jì)理念中包含了在實(shí)時(shí)相應(yīng)、超

37、大規(guī)模數(shù)據(jù)要求下架構(gòu)的可擴(kuò)展性15。Node.js摒棄了傳統(tǒng)平臺(tái)為了實(shí)現(xiàn)高并發(fā)而不得不依靠多個(gè)線程來(lái)實(shí)現(xiàn)的設(shè)計(jì)思路,反而采用了單線程、異步式輸入輸出、事件驅(qū)動(dòng)式的程序設(shè)計(jì)模型來(lái)實(shí)現(xiàn)高并發(fā)。這些特性減少了多線程程序設(shè)計(jì)的復(fù)雜性,帶來(lái)了巨大的性能提升,提高了程序的開(kāi)發(fā)效率16。2.4.1 Node.js背景Node.js于2009年面世,目前它的周圍已經(jīng)形成了一個(gè)龐大豐富的生態(tài)系統(tǒng)。Node.js有著強(qiáng)大而靈活的包管理器(node package manager,即npm),現(xiàn)已有上萬(wàn)個(gè)第三方模塊,包括網(wǎng)站開(kāi)發(fā)框架、MongoDB數(shù)據(jù)庫(kù)接口,并且支持模板語(yǔ)言解析、CSS生成工具、調(diào)試、圖形用戶界面

38、和操作系統(tǒng)API工具。由VMware公司建立的云計(jì)算平臺(tái)Cloud Foundry率先支持了Node.js,此外,Windows Azure云計(jì)算平臺(tái)也支持Node.js。2.4.2 安裝及配置方法本論文中將Node.js安裝在Ubuntu 14.04上,在安裝Node.js前需安裝nvm。nvm的全稱是Node Version Manager,也就是多版本管理器,之所以需要這個(gè)工具,是因?yàn)镹ode.js的各種特性都沒(méi)有穩(wěn)定下來(lái),所以經(jīng)常需要切換各種版本來(lái)嘗試它的新特性,有時(shí)候?yàn)榱诵吕享?xiàng)目的切換也需要使用nvm來(lái)更換版本。安裝完成nvm后,需重啟shell,此時(shí)shell里已有 nvm 命令,

39、調(diào)用nvm 命令后看到有輸出時(shí),說(shuō)明nvm 安裝成功。然后使用nvm命令安裝Node.js最新穩(wěn)定版,nvm ls-remote命令可以看到nodejs所有可用的版本,本平臺(tái)使用的node.js版本是 v0.12.2,執(zhí)行命令nvm install 0.12.2即可。安裝完成后,使用nvm ls命令可以查看到該系統(tǒng)上安裝的所有Node.js版本。如果想要使用的版本本有呈現(xiàn)被選中的狀態(tài),那么可以使用nvm use 0.12.2來(lái)告訴nvm將版本切換到0.12.2。最后在終端輸入node命令,出現(xiàn)“”提示符,則表示node.js已運(yùn)行,進(jìn)入了REPL模式(Real-eval-print loop)

40、,即輸入求值輸出循環(huán)模式,可以輸入一條代碼語(yǔ)句后立即執(zhí)行并顯示結(jié)果,例如:如果要運(yùn)行一大段代碼的話,先寫一個(gè)JS文件再運(yùn)行會(huì)提高效率。這種從輸入到求值到輸出的循環(huán)模式在應(yīng)用開(kāi)發(fā)時(shí)給程序員帶來(lái)了很大的便利,比如可以執(zhí)行簡(jiǎn)單的計(jì)算等、只測(cè)試某個(gè)包能否正常使用、單獨(dú)調(diào)用應(yīng)用的某一個(gè)模塊等等。2.4.3 基本特性Node.js的JavaScript引擎是V8,來(lái)自谷歌的Chrome瀏覽器項(xiàng)目,V8經(jīng)歷了數(shù)次引擎革命,號(hào)稱是目前世界上最快的JavaScript引擎,它的即時(shí)編譯執(zhí)行速度已經(jīng)快到了接近本地代碼的執(zhí)行速度17。Node.js內(nèi)建了HTTP服務(wù)器支持,使用Node.js可以輕而易舉地生成一個(gè)帶

41、有服務(wù)器的網(wǎng)站。舉一個(gè)創(chuàng)建HTTP服務(wù)器的例子,在某個(gè)磁盤分區(qū)下創(chuàng)建文件夾app,首先在文件夾app中建立名為app.js的文件,內(nèi)容為:接下來(lái)在輸入求值輸出循環(huán)模式下進(jìn)入app.js所在的文件目錄,運(yùn)行node app.js命令,打開(kāi)瀏覽器訪問(wèn) HYPERLINK :3000,即可看到圖2-1 :3000,即可看到圖2-1所示的內(nèi)容。圖2-1 用Node.js實(shí)現(xiàn)的HTTP服務(wù)器此時(shí)控制臺(tái)可看到輸出“HTTP server is listening at port 3000.”。但是,在開(kāi)發(fā)用Node.js實(shí)現(xiàn)的HTTP應(yīng)用時(shí)我們會(huì)發(fā)現(xiàn),只要代碼一經(jīng)修改,Node.js都會(huì)被終止,只有再重新

42、運(yùn)行才會(huì)使修改的代碼生效,這樣非常不利于開(kāi)發(fā)調(diào)試。Supervisor可以幫助我們克服這一弊端,它會(huì)監(jiān)視代碼發(fā)生的一切改動(dòng),并在代碼發(fā)生改變后自動(dòng)重啟Node.js。在ubuntu上可以使用命令sudo npm install g supervisor來(lái)安裝supervisor,安裝完成后,用supervisor命令代替node命令啟動(dòng)app.js,即可看到調(diào)試過(guò)程,在終端顯示的結(jié)果如下:另外,使用node-inspector也可以調(diào)試Node.js,node-inspector是一個(gè)完全基于Node.js的開(kāi)源在線調(diào)試工具,有非常友好的用戶界面和很強(qiáng)大的調(diào)試功能,只需使用命令npm inst

43、all -g node-inspector即可完成安裝,然后在終端通過(guò)node -debug-brk=5858 app.js命令連接需要檢查的腳本的調(diào)試服務(wù)器,接著啟動(dòng)node-inspector,在瀏覽器中打開(kāi):8080/app?port=5858,即可進(jìn)入Web調(diào)試界面。該Web調(diào)試界面與瀏覽器的腳本調(diào)試工具一樣,支持單步、斷電、調(diào)用棧幀查看等功能。Node.js最大的特點(diǎn)就是異步式輸入輸出與事件緊密結(jié)合的編程模式,這種模式不同于傳統(tǒng)同步式輸入輸出的線性編程思路,因?yàn)榭刂茙缀跏强渴录突卣{(diào)函數(shù)來(lái)組織,一個(gè)邏輯要拆分為若干個(gè)單元18。Node.js開(kāi)發(fā)了node包管理工具npm來(lái)解決包的發(fā)布

44、和獲取需求,Node.js的包是一個(gè)目錄,其中包括一個(gè)輕量級(jí)數(shù)據(jù)交換格式的說(shuō)明文件package.json,位于項(xiàng)目的根目錄下,安裝包時(shí),只需在package.json寫入所需安裝的包名和對(duì)應(yīng)版本,再進(jìn)入頂層目錄,執(zhí)行命令npm install即可生成一個(gè)名為node_modules的目錄,目錄下是使用npm install安裝的包。核心模塊Node.js的核心模塊由一些精簡(jiǎn)而高效的庫(kù)組成,提供基本的應(yīng)用程序編程接口。Node.js的核心模塊主要有全局對(duì)象、常用工具、事件機(jī)制、文件系統(tǒng)訪問(wèn)和HTTP服務(wù)器與客戶端。Global是Node.js中的全局對(duì)象,它提供了一個(gè)操作系統(tǒng)的簡(jiǎn)單接口,所有全

45、局變量都是global對(duì)象的屬性,比如用于提供控制臺(tái)標(biāo)準(zhǔn)輸出的console變量、用于描述當(dāng)前Node.js進(jìn)程狀態(tài)的對(duì)象的process變量等等;常用工具util提供常用函數(shù)的集合,用于充實(shí)核心功能庫(kù)的功能;于用戶代碼與Node.js下層事件循環(huán)的交互是通過(guò)事件驅(qū)動(dòng)events實(shí)現(xiàn)的,并且基本上所有的模塊都依賴事件驅(qū)動(dòng);文件系統(tǒng)模塊提供了文件的讀取、寫入、更名、刪除、遍歷目錄、鏈接等可移植操作系統(tǒng)接口;文件系統(tǒng)模塊中所有的操作都可以是異步的也可以是同步的;Node.js的標(biāo)準(zhǔn)庫(kù)提供了兩個(gè)HTTP模塊,包括一個(gè)高效的HTTP服務(wù)器http.server和一個(gè)簡(jiǎn)易的HTTP客戶端http.req

46、uest。云資源平臺(tái)的設(shè)計(jì)3.1云平臺(tái)系統(tǒng)框架設(shè)計(jì)本資源平臺(tái)的實(shí)現(xiàn)是結(jié)合先進(jìn)的OpenStack平臺(tái),采用分層設(shè)計(jì)的方法,搭建底層的OpenStack“云”,然后在“云”上創(chuàng)建出虛擬機(jī),在該虛擬機(jī)上利用Node.js建站技術(shù)和分布式數(shù)據(jù)庫(kù)MongoDB設(shè)計(jì)一個(gè)資源平臺(tái),用戶可以在該平臺(tái)上發(fā)布話題、評(píng)論話題并進(jìn)行互相回復(fù)。整個(gè)云平臺(tái)的底層系統(tǒng)框架設(shè)計(jì)如圖3-1所示,最底層是作為計(jì)算節(jié)點(diǎn)、網(wǎng)絡(luò)節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)和控制節(jié)點(diǎn)的4臺(tái)服務(wù)器,由控制節(jié)點(diǎn)控制另外3臺(tái)服務(wù)器,第二層是控制節(jié)點(diǎn)上運(yùn)行的OpenStack用戶界面,最后是OpenStack創(chuàng)建的虛擬機(jī)。圖3-1 云平臺(tái)底層系統(tǒng)框架設(shè)計(jì)平臺(tái)展示技術(shù)基于N

47、ode.js、Express和MongoDB,平臺(tái)的功能包括路由控制、頁(yè)面模板、數(shù)據(jù)庫(kù)訪問(wèn)、用戶注冊(cè)、登陸、話題的發(fā)布、互相評(píng)論回復(fù)功能。本章中將介紹Express框架、MVC設(shè)計(jì)模式、EJS模板引擎以及MongoDB的操作,呈現(xiàn)出云平臺(tái)Web系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)和功能設(shè)計(jì)。3.2云平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)在介紹云平臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)之前,首先介紹一下分布式領(lǐng)域的CAP理論。CAP即一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition-tolerance)。一致性是指在分布式系統(tǒng)中所有數(shù)據(jù)變動(dòng)都是同步的;可用性是指在集群中一部分節(jié)點(diǎn)故障后,客戶端的讀寫請(qǐng)求是否會(huì)受到集

48、群的影響;分區(qū)容忍性在一定程度上可以理解為是對(duì)通信的時(shí)限要求3。系統(tǒng)如果不能在規(guī)定時(shí)限內(nèi)達(dá)成數(shù)據(jù)一致性,就只能在一致性和可用性之間做出選擇。CAP理論想要說(shuō)明的就是任何分布式系統(tǒng)只可同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性中的兩點(diǎn),沒(méi)法三者兼顧。圖3-2為NoSQL系統(tǒng)的圖形指南,從圖中我們看到,MongoDB屬于文檔模型而Redis屬于Key-Value模型。圖3-2 NoSQL系統(tǒng)的圖形指南Key-value模型類似常見(jiàn)的哈希表,一個(gè)Key對(duì)應(yīng)一個(gè)Value,但是其能提供非常快的查詢速度、大的數(shù)據(jù)存放量和高并發(fā)操作,并且可以通過(guò)上層的開(kāi)發(fā)來(lái)使它也支持復(fù)雜的操作。文檔模型和Key-value在結(jié)構(gòu)

49、上非常相似,也是一個(gè)Key對(duì)應(yīng)一個(gè)Value,但是這個(gè)Value是有語(yǔ)義的,并且文檔型數(shù)據(jù)庫(kù)一般可以對(duì)Value創(chuàng)建二級(jí)索引,以方便上層的應(yīng)用,而普通鍵值數(shù)據(jù)庫(kù)無(wú)法支持這一點(diǎn)。 3.2.1 Mongodb安裝及配置下面介紹在64位的Ubuntu14.04上安裝MongoDB的步驟:這里我們先停止MongoDB,進(jìn)入mongod所在的目錄(/usr/bin/),然后運(yùn)行“sudo ./mongod -dbpath /var/lib/mongodb/ -logpath /var/log/mongodb/mongod.log -logappend &”。其中,dbpath指定mongo的數(shù)據(jù)庫(kù)文件位

50、置;logpath指定mongo的log日志的具體文件名;logappend表示log的寫入采用附加方式,默認(rèn)覆蓋之前的文件;&表示程序在后臺(tái)運(yùn)行。進(jìn)入mongodb的安裝目錄/usr/bin,輸入命令mongo,便啟動(dòng)了MongoDB的命令行客戶端程序。下面是MongoDB非常基本的命令:3.2.2 Redis安裝及配置 Redis是一個(gè)鍵值數(shù)據(jù)庫(kù),性能非常出色,因?yàn)镽edis不僅邏輯簡(jiǎn)單,而且純內(nèi)存操作,單節(jié)點(diǎn)每秒可以處理超過(guò)10萬(wàn)次讀寫操作20。在64位的Ubuntu14.04上安裝Redis的步驟如下,首先,使用命令wget HYPERLINK http:/download.redis

51、.io/releases/redis-2.8.11.tar.gz 下載2.8.11版本的Redis 下載2.8.11版本的Redis數(shù)據(jù)庫(kù),對(duì)其解壓后得到名為redis-2.8.11的文件夾,此時(shí)可以使用命令mv redis-2.8.11 redis來(lái)將改文件夾重命名為簡(jiǎn)短的redis,方便以后的目錄切換。然后切換到redis目錄并進(jìn)行安裝,命令為sudo make & sudo make install,安裝成功后,控制臺(tái)會(huì)提示對(duì)其進(jìn)行測(cè)試,命令為sudo make test,執(zhí)行測(cè)試命令后,系統(tǒng)就會(huì)對(duì)redis的所有組件進(jìn)行測(cè)試。測(cè)試完畢無(wú)誤后,此時(shí)Redis的可執(zhí)行文件已經(jīng)被放到了/us

52、r/local/bin目錄下,如圖3-3所示。圖3-3 Redis的可執(zhí)行文件接著需要下載配置文件和init啟動(dòng)腳本,將啟動(dòng)腳本放到/etc/init.d/目錄下,將配置文件放到/etc目錄下,然后使用命令啟動(dòng)Redis,最后在redis目錄下使用redis-cli命令啟動(dòng)client客戶端連接,驗(yàn)證Redis是否成功啟動(dòng)的代碼如下:3.2.3 利用MongoDB和Redis實(shí)現(xiàn)會(huì)話的持久化在controller目錄下的sign.js中定義了一個(gè)將用戶的登陸狀態(tài)存儲(chǔ)下來(lái)的session方法,否則每次刷新頁(yè)面用戶都需再登陸一遍。session即服務(wù)器與客戶端之間的會(huì)話狀態(tài),使用session的前

53、提是要在入口文件app.js中加入app.use(require(cookie-parser)(config.session_secret),因?yàn)閟ession依賴于中間件cookie,有了cookie-parser之后session才能正常工作,然后就可以保存用戶的登陸狀態(tài)。一般的網(wǎng)站服務(wù)都是使用HTTP協(xié)議傳輸數(shù)據(jù)的,HTTP協(xié)議是無(wú)狀態(tài)協(xié)議,一旦數(shù)據(jù)交換完成,客戶端與服務(wù)器之間的鏈接就會(huì)關(guān)閉,再次交換就需要再次建立新的鏈接,這樣服務(wù)器就無(wú)法從鏈接上跟蹤會(huì)話了。所以要引入session和cookie來(lái)彌補(bǔ)這一不足cookie通過(guò)在客戶端記錄信息確定用戶身份,session通過(guò)服務(wù)器端記錄信

54、息來(lái)確定用戶身份。session和cookie的工作機(jī)制如圖3-4所示。圖3-4 session和cookie的工作機(jī)制Redis存儲(chǔ)部分的代碼如下:MongoDB存儲(chǔ)部分的代碼如下,注意寫代碼時(shí),cookieParser一定要在前面, 因?yàn)閟ession的設(shè)置依賴cookie:3.3云平臺(tái)Web系統(tǒng)設(shè)計(jì)3.3.1 MVC設(shè)計(jì)模式MVC(Model-View-Controller),即模型-視圖-控制器,是一種軟件的設(shè)計(jì)模式,它把一個(gè)非常復(fù)雜的軟件工程分解為更加易于理解和管理的三個(gè)層面:模型、視圖和控制器。模型是對(duì)象及其數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),包含了數(shù)據(jù)庫(kù)操作,目的是為了完成數(shù)據(jù)庫(kù)映射;視圖表示用戶界

55、面,本網(wǎng)站寫的是HTML文件來(lái)設(shè)計(jì)各頁(yè)面;控制器用于處理用戶請(qǐng)求和數(shù)據(jù)流,還有一些復(fù)雜模型,再將輸出傳遞給視圖。本平臺(tái)以Express、MongoDB、Mongoose作為基本框架,是典型的MVC引用。模型層由Mongoose對(duì)象關(guān)系映射模型實(shí)現(xiàn),存放在models目錄下;視圖層由EJS模板實(shí)現(xiàn),存放在views目錄下;控制層由Express Middleware實(shí)現(xiàn),存放在controllers目錄下。EJS是一個(gè)JavaScript模板庫(kù),它除了能緩存已經(jīng)解析好的html模板外,還有如下特性:Middlewares是Express的中間件,在平臺(tái)中提供基本的auth,session驗(yàn)證。中

56、間件是一種類似插件的控制函數(shù),能控制流程中的驗(yàn)證、保存、刪除等方法。舉例來(lái)說(shuō),在執(zhí)行save方法時(shí),需要對(duì)存入的數(shù)據(jù)進(jìn)行驗(yàn)證,利用中間件,可以對(duì)錯(cuò)誤進(jìn)行攔截、錯(cuò)誤處理、修訂等等。middleware 模式相當(dāng)于一個(gè)加工流水線,每一個(gè) middleware 相當(dāng)于一個(gè)加工步驟,當(dāng)出現(xiàn)一個(gè) http 請(qǐng)求的時(shí)候,http 請(qǐng)求會(huì)挨著每個(gè) middleware 執(zhí)行下去。 express 里處理一個(gè)請(qǐng)求的過(guò)程基本上就是請(qǐng)求通過(guò)加工流水線的過(guò)程。每個(gè) middleware 都有三個(gè)參數(shù) req,res,next。 next() 方法用于處理異步方法,不然后續(xù)的 middleware 就無(wú)法執(zhí)行。3.3

57、.2 Express框架介紹及其安裝npm提供了大量的第三方模塊,其中不乏許多Web框架,Express就是一個(gè)Web開(kāi)發(fā)框架,它是目前最穩(wěn)定、使用最廣泛的。Express除了為http模塊提供了更高層的接口外,還實(shí)現(xiàn)了許多功能,比如路由控制、模板解析支持、動(dòng)態(tài)視圖、用戶會(huì)話、訪問(wèn)和插件支持等等。執(zhí)行命令sudo apt-get install node-express可安裝Express框架,安裝完成后,執(zhí)行命令express app創(chuàng)建開(kāi)發(fā)目錄,app即為所開(kāi)發(fā)程序的名稱。然后進(jìn)入app目錄,輸入npm install安裝程序依賴組件,安裝完成后,可以看到依賴組件目錄如圖3-5所示。圖3-

58、5 express的依賴組件目錄可見(jiàn)npm install命令自動(dòng)安裝了依賴express和jade,檢查目錄app目錄中的package.json文件,內(nèi)容是: 其中,dependencies屬性中有express和jade。當(dāng)執(zhí)行無(wú)參數(shù)的npm install命令時(shí),系統(tǒng)會(huì)首先檢查當(dāng)前目錄下的package.json,并自動(dòng)安裝這一文件中所有指定的依賴。需要說(shuō)明的是,jade是Express默認(rèn)提供的引擎,它與傳統(tǒng)模板引擎不同,它由一套生成HTML的每個(gè)標(biāo)簽結(jié)構(gòu)的完成語(yǔ)法,由于本網(wǎng)站的實(shí)現(xiàn)用的是EJS,所以仍需要安裝EJS模板引擎。安裝完成后,在app目錄下,輸入node app來(lái)測(cè)試整體

59、環(huán)境是否安裝成功。這個(gè)時(shí)候打開(kāi)瀏覽器,輸入 HYPERLINK http:/localhost:3000 http:/localhost:3000,若能看到“Express”,說(shuō)明Express框架安裝成功。3.3.3 Web系統(tǒng)結(jié)構(gòu)設(shè)計(jì)本W(wǎng)eb系統(tǒng)的主要目錄和文件如下:其中,app.js、route.js、config.js放在根目錄下,app.js是工程的入口,通過(guò)require可以直接獲取express模塊。routes為指定路徑組織返回的展示內(nèi)容;middlewares目錄下放的是express框架的中間件,包含基本的auth, session 驗(yàn)證,可以通過(guò)app.use啟用,比如a

60、pp.js中就包含了五個(gè)中間件,分別為功能為解析客戶端請(qǐng)求、支持定制的HTTP方法、路由支持、靜態(tài)文件支持和錯(cuò)誤控制器;services目錄下包含消息和郵件服務(wù);proxy目錄下的js文件可以看做是對(duì)model模型處理的加工庫(kù)。由Express創(chuàng)建的網(wǎng)站架構(gòu)如圖3-6所示。圖3-6 Express網(wǎng)站架構(gòu)首先,瀏覽器發(fā)起訪問(wèn)請(qǐng)求,路由控制器接受這一請(qǐng)求,然后根據(jù)不同的路徑要求來(lái)調(diào)用不同的控制器。控制器被調(diào)用后,便開(kāi)始處理用戶的具體請(qǐng)求,比如說(shuō)可能會(huì)訪問(wèn)數(shù)據(jù)庫(kù)中的對(duì)象等等。控制器還會(huì)訪問(wèn)模板引擎,生成視圖的HTML,最后再由控制器將這一視圖返回給瀏覽器,這樣便算是完成了一次請(qǐng)求。3.3.4 We

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論