毕业论文-基于分布式存储的云资源平台的设计_第1页
毕业论文-基于分布式存储的云资源平台的设计_第2页
毕业论文-基于分布式存储的云资源平台的设计_第3页
毕业论文-基于分布式存储的云资源平台的设计_第4页
毕业论文-基于分布式存储的云资源平台的设计_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于分布式存储的云资源平台的设计毕业设计(论文)课 题 名 称 : 基于分布式存储的云资源平台的设计 学 院 : 信息科学与技术学院 专 业 : 通信工程 姓 名 : _ 学 号 : 指 导 教 师 : 基于分布式存储的云资源平台的设计摘要随着互联网的蓬勃发展和信息技术的大规模运用,非结构化数据开始爆炸性的增长,面对越来越火的“大数据”,传统的集中式数据存储已经无法招架,所以大多数企业的关注焦点放在了云存储服务上。大规模的分布式云存储系统具有海量的存储空间,并且可以灵活扩展,利用多台服务器分担负荷后,可以对大数据量和高并发访问的应用提供高效可靠的服务。OpenStack是当今风靡的开源云平台

2、管理项目,它能够控制整个数据中心的计算、存储和网络资源;MongoDB 是目前在信息技术产业十分流行的一种非关系型数据库,其灵活的数据存储模式备受当前IT从业者的青睐。本论文的主要研究内容就是设计并实现一个基于分布式存储的云资源平台。首先搭建OpenStack环境,在OpenStack云上创建虚拟机,按需给虚拟机设置所有的参数后,在虚拟机上完成非关系型数据库的配置和安装,最后基于Node.JS完成云资源平台的Web系统设计,使用户可以访问云资源平台并可在平台上发布话题、评论话题并进行互相回复。本平台完成了从最底层到最前端的“全栈式”安装,囊括了一个网站所需的所有技术,并且利用OpenStack

3、的挂载硬盘功能很好的实现了“分布式云存储”。关键词:分布式,云存储,OpenStack,Node.js,MongoDB,非关系型数据库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 国外研究现状 PAGEREF _Toc18395 2 HYPERLINK l _Toc10765 1.3 国内研究现状 PAGEREF _Toc10765 2 HYPERLINK l _Toc22694 1.4 研究目的和内容 PAGEREF _Toc22694 2 HYPERLINK l _Toc19637 2 云计算平台的架构及相关技术 PAGEREF _Toc19637 4 HYPERLINK l _Toc3599 2.1 云计算技术 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 分布式数据库MongoDB PAGEREF _Toc26102 6 HYPERLINK l _Toc15886 2.3.1 NoSQL数据库 PAGEREF _Toc15886 6 HYPERLINK

12、l _Toc8972 2.3.2 MongoDB 应用及特点 PAGEREF _Toc8972 6 HYPERLINK l _Toc24173 2.4 Node.JS建站技术 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 云资源平台的设计 PAGEREF _Toc31840 12 HYPERLINK l _Toc3206 3.1云平台系统框架设计 PAGEREF _Toc3206 12 HYPERLINK l _Toc32517 3.2云平台数据库设计 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实现会话的持久化 PAGEREF _Toc24782 16 HYPERLINK l _Toc8919 3.3云平台Web系统设计 PAGEREF _Toc8919 17 HYPERLINK l _Toc15536 3.3.1 MVC设计模式 PAGEREF _Toc15536 17 HYPERLINK l _Toc8639 3.3.2 Express框架介绍及其安装 PAGEREF _Toc8639 18 HYPERLINK l _Toc9075 3.3.3 Web系统结构设计 PAG

15、EREF _Toc9075 19 HYPERLINK l _Toc29092 3.3.4 Web系统功能设计 PAGEREF _Toc29092 21 HYPERLINK l _Toc6998 4 云资源平台的实现 PAGEREF _Toc6998 23 HYPERLINK l _Toc30430 4.1 基于OpenStack搭建云计算环境 PAGEREF _Toc30430 23 HYPERLINK l _Toc23072 4.1.1 底层操作系统的环境准备 PAGEREF _Toc23072 23 HYPERLINK l _Toc4023 4.1.2 安装OpenStack认证系统 PA

16、GEREF _Toc4023 27 HYPERLINK l _Toc19978 4.1.3安装OpenStack镜像服务 PAGEREF _Toc19978 28 HYPERLINK l _Toc15931 4.1.4安装OpenStack计算组件 PAGEREF _Toc15931 29 HYPERLINK l _Toc21211 4.1.5安装OpenStack网络组件 PAGEREF _Toc21211 30 HYPERLINK l _Toc29013 4.1.6安装OpenStack仪表盘 PAGEREF _Toc29013 32 HYPERLINK l _Toc7435 4.1.7创

17、建虚拟机实例 PAGEREF _Toc7435 33 HYPERLINK l _Toc28651 4.2 在OpenStack上进行应用开发 PAGEREF _Toc28651 34 HYPERLINK l _Toc29423 4.2.1 OpenStack创建虚拟机时的流程 PAGEREF _Toc29423 35 HYPERLINK l _Toc15844 4.2.2 OpenStack创建硬盘时的流程 PAGEREF _Toc15844 37 HYPERLINK l _Toc19507 4.3 云平台web应用系统实现 PAGEREF _Toc19507 37 HYPERLINK l _

18、Toc21041 4.3.1设计数据库模型 PAGEREF _Toc21041 37 HYPERLINK l _Toc29226 4.3.2 云平台主页 PAGEREF _Toc29226 38 HYPERLINK l _Toc28243 4.3.3 用户注册及登陆功能 PAGEREF _Toc28243 40 HYPERLINK l _Toc20427 4.3.4 发布话题功能 PAGEREF _Toc20427 41 HYPERLINK l _Toc11004 4.3.5 互相回复功能 PAGEREF _Toc11004 43 HYPERLINK l _Toc22089 5 结论 PAGE

19、REF _Toc22089 451 绪论背景介绍随着互联网的蓬勃发展和IT技术的大规模运用,非结构化数据开始爆炸性的增长,面对越来越火的“大数据”,传统的集中式数据存储已经无法招架,所以大多数企业的关注焦点放在了云存储服务上。大规模的分布式云存储系统具有海量的存储空间,并且可以灵活扩展,利用多台服务器分担负荷,对大数据量和高并发访问的应用提供高效可靠的服务1。云存储是以云计算作为基础而衍生的,美国国家标准化与技术协会将云计算定义为一种能够通过网络以随处存取的方式申请访问资源的模式2。据某研究机构的调查显示,已经有超过一半的企业和IT专业人士实施了或正在计划实施云存储解决方案。另外值得一提的是,

20、四分之三的人认为实施云迁移计划的首要原因便是云存储。设计基于分布式云存储的方案有两套,分别基于两套主流的开源云计算框架Hadoop和OpenStack。Hadoop自带有分布式文件系统HDFS和非结构化的数据库HBase, Hadoop的一大优势就是可以部署在非常低廉的硬件上,通过动态增加集群节点,就可以对分布式文件系统进行扩容,并且HBase也凭借自身强大的性能被广泛使用;OpenStack是偏基础设施服务层的云平台管理项目,它相当于自己构建了一个巨大的数据中心,承包所有的计算、存储和网络资源,所以包含了许多组件,OpenStack的搭建比Hadoop复杂许多,并且对底层服务器的性能要求比较

21、高,可以说它是一个大型的开源软件的集合,它的一切都是分布式的。要实现OpenStack的搭建,必须有较好的计算机网络知识基础。虽然Hadoop的搭建方法非常简单,对服务器的性能要求也比较低,但是OpenStack比Hadoop更偏向底层,就如OpenStack的名字一样,它不仅仅“开源”,更是一个“栈”,它可以完成虚拟机后台的全套部署,有强大的资源池,只要把OpenStack搭建起来了,即可在“云”上开发各种各样的服务。国外研究现状在外国,云计算起步较早,发展出来的应用模式较为成熟且种类繁多,在云存储方面的应用也相对较快。Google、Amazon大概在2006年就已经有了类似于Google的

22、应用平台和亚马逊弹性计算云这样的云计算和云存储的方案3。同时,像IBM、微软、VMware、RedHat、雅虎这样的厂商也都在各自构建云计算解决方案。拿谷歌的应用平台做一个具体的例子来说,用户通过Gmail用户名登陆谷歌应用平台就可使用里面的各种功能。比如打开Google Docs网页,通过Google Docs就可以编辑和修改文档,并将其保存在个人存储空间中;能够随时随地再次登录Google Docs,访问保存在云存储系统中的文档;有了云存储系统的权限管理功能,用户还可轻松共享、传送文档以及管理版权;谷歌的Music Beta服务允许用户保存多达两万首音乐。再比如苹果的iCloud服务也有非

23、常强大的功能,可以带给用户非常好的体验。1.3 国内研究现状 随着计算机技术的发展, 国内云存储服务的进步也很大,并且竞争激烈。比如像酷盘、金山快盘、华为等网盘服务都在大幅扩张业务,腾讯旗下的网页QQ平台也是以云存储为基础,在平台上整合了用户常用的应用程序,只要打开网页QQ,几乎所有的日常电脑操作都可以在其中完成。1.4 研究目的和内容OpenStack可以说是目前开源云平台管理项目中最风靡的,它能够控制整个数据中心的计算、存储和网络资源。OpenStack集各种开源软件之大成,是一个庞大的开源软件集合,由多个组件一起协作完成某些具体工作;MongoDB 是目前在 HYPERLINK /vie

24、w/30.htm t _blank IT行业十分流行的一种非关系型数据库(NoSql),其灵活的数据存储模式备受当前IT从业人员的青睐。本论文的主要研究内容就是设计并实现一个基于分布式存储的云资源平台,首先阅读相关文献了解分布式云存储的国内外发展状况和OpenStack及MongoDB的应用案例,对OpenStack框架和分布式存储平台有清晰的认识,然后通过书籍、视频等参考资料,搭建OpenStack集群,接着在OpenStack云上创建虚拟机,按需给虚拟机设置所有的参数后,在虚拟机上完成建站时所需的两大数据库Redis和MongoDB的配置和安装,最后基于Node.JS完成云资源平台的Web

25、系统设计,使用户可以访问云资源平台并可在平台上发布话题、评论话题并进行互相回复。本论文第一章介绍了课题背景,基于分布式存储的云资源平台的应用案例和国内外发展概况;第二章将介绍OpenStack的构架和分布式数据库MongoDB,阐述云计算平台的基本概念;第三章介绍云资源平台的设计,阐述各个模块的设计思路及最终想要达到的功能;第四章根据设计思想实现OpenStack云的搭建以及在上面开发的云存储平台的各个功能模块,使用者可注册并登陆、发布话题,并且可以互相回复;第五章总结本研究内容的成果,分析不足之处,并有所展望。2 云计算平台的架构及相关技术2.1 云计算技术近年来,云计算被大量应用于数字图书

26、馆、基于互联网的教育、商业等领域,学术界相关发文量和文献递增速度非常快4。2007-2011年CNKI期刊数据库收录的核心期刊中,国际国内文献共同研究的热点是虚拟化技术、云服务、云计算的计算模式、资源共享、云安全、云计算构架模式等5。云计算系统可以根据它提供服务的层次进行分类,主要有提供平台服务的系统(PaaS),提供软件服务的系统(SaaS)和提供基础设施服务的系统(IaaS)6。云计算服务的质量直接关系到用户的体验,因为要保证用户能大量使用服务,目前,研究主要集中在底层基础设施服务的性能分析、优化以及测试研究上面7。云计算平台连接了大量并发的网络计算和服务,是一个强大的“云”网络,而且它利

27、用虚拟化技术扩展了每一个服务器的性能,将各自的资源通过云计算平台结合起来,提供超级计算和存储能力8。这一也是最近很流行的“云电脑”的概念。这里提到的虚拟机化技术其实是对计算机的各种资源进行“虚拟”,比如服务器、网络、存储等等,虚拟出来的计算机便可以被用户进行“切割”,随心所欲的使用和分配资源,还能最大化利用物理硬件。2.2 OpenStack框架云计算模式使客户将数据、应用程序或整个虚拟机外包,并且所有资源是弹性的,大大减少了客户在伸缩资源上面需要投入的成本。举例来说,OpenStack,Eucalyptus,CloudStack,OpenNebula是最常见的开源云计算框架,偏基础设施服务层

28、,客户能够按照自己的需要对它进行二次开发,比如越来越流行的“私人云”。2.2.1 OpenStack概述OpenStack 由美国国家航空航天局和Rackspace合作研发,以Apache许可证授权开放源码项目,并且是自由团建的;可以将OpenStack比作一个云操作系统,用来管理大量的计算机、存储设备和网络资源组成的资源池。经过OpenStack 的各种组件多种模式的排列组合,可以搭建成各种规模的“云”9,这些云可能会是私有云、公共云、混合云。OpenStack的开发社区每半年就会举办一次完全对外开放的设计峰会,以此来收集需求并写入即将发布版本的规格中,然后社区制定经过批准的线路图,用于指导

29、未来半年的发展9。在开源云计算项目领域,OpenStack称得上是当今最热门的开源项目,自五年前开始就已经超越CloudStack、Eucalyptus、OpenNebula 等其他云计算开源项目。同时,OpenStack 也在逐步追赶VMware这一虚拟化商业巨头。正式因为OpenStack是高度协作的产物,所以相比之前的几个老开源项目,OpenStack 更高级而且更现代化,它的社区拥有一百多家企业和1千多位开发者,他们都将OpenStack作为基础设置即服务层的通用前端9。很多主流厂商在2013年都先后宣布支持OpenStack,这包括服务器厂商中排名前三的惠普、戴尔、IBM,以及Liu

30、nx发行版厂商中的红帽、Canonical和SUSE,交换机厂商中的Cisco、Juniper和Alcatel- Lucent,存储厂商中的EMC、IBM和NetApp等等,甚至是巨头Orcale也加入了这场变革9。在许多公司和研究社区中,OpenStack已成为构建私人和公共云首选的开源云计算框架。例如,美国能源部的Magellan云是一个值得关注的OpenStack部署。OpenStack版本一直在升级,所以代码质量和文档详尽度的不断提升,于是OpenStack在国内也开始流行起来。比如瞬联软件、趣游、网易等,他们已经分别开始尝试基于OpenStack开发部署自己的云平台,再比如爱奇艺、

31、用友、京东、百度、360、美团等也纷纷选用OpenStack做云平台管理项目。2.2.2 OpenStack组件OpenStack框架由以下组件构成:OpenStack Nova计算、OpenStack Glance镜像服务、OpenStack Swift对象存储、OpenStack Neutron网络连接、OpenStack Cinder块存储、OpenStack Keystone身份认证和OpenStack Horizon仪表盘10。Nova是OpenStack云的核心组件,负责根据用户需求启动和停止虚拟机;Glance是虚拟机的镜像库,在Nova服务发出请求时,它发现、检索和存储镜像;S

32、wift使用集群存储PB级数据。Nertron提供网络服务,使用户能够创建自己的网络和连接它们的接口;Cinder为云中的虚拟机镜像提供持久的块存储;Keystone基于公钥基础设施为云中所有组件提供身份验证和授权,它还允许多租户环境,支持group、user、role这种基于角色的访问控制;Horizon是管理云的Web管理接口11。2.3 分布式数据库MongoDB随着云计算的发展以及各种社交网络的崛起,互联网每天都会产生数以亿计的数据,信息爆炸已势不可挡,数据量级与数据操作的复杂度都有了大幅度提高,传统的关系型数据库受到了极大的挑战12,这时候一种叫非关系型数据库的NoSQL数据库发展起

33、来了,这一小节将着重介绍MongoDB这一分布式的非关系型数据库。存储访问并分析处理海量数据已经成为一大研究热点,而云数据库将数据库放入云中的这一举措,巧妙地利用了云的高可用性和可扩展性等优势来提供数据库服务,受到了业界的普遍关注12。2.3.1 NoSQL数据库传统的 HYPERLINK /view/495393.htm t _blank 关系型数据库支持简单的键值查询、复杂的多表联合查询还有事务机制这种强一致性的机制,而非关系型数据库通常不管强一致性,而注重性能和扩展性。具体来说,非关系型数据库仅保证行级别的原子性,也就是说同时对同一个键下的数据进行的两个操作是串行的,这样保证了每一个键值

34、对不会被破坏。NoSQL意为“Not Only SQL”,也就是不仅仅是SQL,我们一般称其为非关系型数据库。非关系型数据库分为四大类,分别是键值存储 HYPERLINK /view/1088.htm t _blank 数据库、列存储数据库、文档型数据库和图形数据库。NoSQL数据库没有统一的架构,并且各有所长。只要适用于某些场合或者某些应用,那么这个NoSQL就是成功的,并且会在这些场合中体现出远胜于其他关系型数据库或NoSQL的性能14。本资源平台使用的数据库MongoDB属于文档性数据库,文档型数据库是键值数据库的升级版,允许互相之间嵌套键值,并且查询效率高于键值数据库。2.3.2 Mo

35、ngoDB 应用及特点MongoDB是一个由C+语言编写的基于分布式文件存储的数据库开源项目,是目前非常流行的一种非关系型数据库,可以为Web应用提供可拓展的高性能数据存储解决方案12。MongoDB的每一条记录都是一个Document对象,很好的实现了面向对象的思想。MongoDB最大的优势在于开发人员无需手动编写SQL语句,便可以实现所有的数据持久操作,直接调用内部已经封装好的方法就能够轻松实现增加、读取、删除、更新的操作。MongoDB把数据存储在默认路径/data/db目录下,为提高效率使用内存映射文件进行管理。MongoDB具有如下特点:MongoDB主要解决海量数据的访问效率问题,

36、它自带了分布式文件系统GridFS来支持海量数据存储,根据官方的文档显示,在数据量达到50GB时,MongoDB的数据库访问速度为MySQL访问速度的10倍,甚至以上。MongoDB不但支持复杂的数据结构,而且数据查询功能强大,很多项目都用MongoDB来替代MySQL来实现一些普通的Web应用。还有的项目数据量实在太大,MySQL承担不了负荷,无法处理如此庞大的数据量,而在把项目迁移到MongoDB上面后,会发现数据查询的速度明显快了。2.4 Node.JS建站技术Node.js是一个可以让JavaScript运行在服务端的平台,为实时Web应用开发而诞生,它的设计理念中包含了在实时相应、超

37、大规模数据要求下架构的可扩展性15。Node.js摒弃了传统平台为了实现高并发而不得不依靠多个线程来实现的设计思路,反而采用了单线程、异步式输入输出、事件驱动式的程序设计模型来实现高并发。这些特性减少了多线程程序设计的复杂性,带来了巨大的性能提升,提高了程序的开发效率16。2.4.1 Node.js背景Node.js于2009年面世,目前它的周围已经形成了一个庞大丰富的生态系统。Node.js有着强大而灵活的包管理器(node package manager,即npm),现已有上万个第三方模块,包括网站开发框架、MongoDB数据库接口,并且支持模板语言解析、CSS生成工具、调试、图形用户界面

38、和操作系统API工具。由VMware公司建立的云计算平台Cloud Foundry率先支持了Node.js,此外,Windows Azure云计算平台也支持Node.js。2.4.2 安装及配置方法本论文中将Node.js安装在Ubuntu 14.04上,在安装Node.js前需安装nvm。nvm的全称是Node Version Manager,也就是多版本管理器,之所以需要这个工具,是因为Node.js的各种特性都没有稳定下来,所以经常需要切换各种版本来尝试它的新特性,有时候为了新老项目的切换也需要使用nvm来更换版本。安装完成nvm后,需重启shell,此时shell里已有 nvm 命令,

39、调用nvm 命令后看到有输出时,说明nvm 安装成功。然后使用nvm命令安装Node.js最新稳定版,nvm ls-remote命令可以看到nodejs所有可用的版本,本平台使用的node.js版本是 v0.12.2,执行命令nvm install 0.12.2即可。安装完成后,使用nvm ls命令可以查看到该系统上安装的所有Node.js版本。如果想要使用的版本本有呈现被选中的状态,那么可以使用nvm use 0.12.2来告诉nvm将版本切换到0.12.2。最后在终端输入node命令,出现“”提示符,则表示node.js已运行,进入了REPL模式(Real-eval-print loop)

40、,即输入求值输出循环模式,可以输入一条代码语句后立即执行并显示结果,例如:如果要运行一大段代码的话,先写一个JS文件再运行会提高效率。这种从输入到求值到输出的循环模式在应用开发时给程序员带来了很大的便利,比如可以执行简单的计算等、只测试某个包能否正常使用、单独调用应用的某一个模块等等。2.4.3 基本特性Node.js的JavaScript引擎是V8,来自谷歌的Chrome浏览器项目,V8经历了数次引擎革命,号称是目前世界上最快的JavaScript引擎,它的即时编译执行速度已经快到了接近本地代码的执行速度17。Node.js内建了HTTP服务器支持,使用Node.js可以轻而易举地生成一个带

41、有服务器的网站。举一个创建HTTP服务器的例子,在某个磁盘分区下创建文件夹app,首先在文件夹app中建立名为app.js的文件,内容为:接下来在输入求值输出循环模式下进入app.js所在的文件目录,运行node app.js命令,打开浏览器访问 HYPERLINK :3000,即可看到图2-1 :3000,即可看到图2-1所示的内容。图2-1 用Node.js实现的HTTP服务器此时控制台可看到输出“HTTP server is listening at port 3000.”。但是,在开发用Node.js实现的HTTP应用时我们会发现,只要代码一经修改,Node.js都会被终止,只有再重新

42、运行才会使修改的代码生效,这样非常不利于开发调试。Supervisor可以帮助我们克服这一弊端,它会监视代码发生的一切改动,并在代码发生改变后自动重启Node.js。在ubuntu上可以使用命令sudo npm install g supervisor来安装supervisor,安装完成后,用supervisor命令代替node命令启动app.js,即可看到调试过程,在终端显示的结果如下:另外,使用node-inspector也可以调试Node.js,node-inspector是一个完全基于Node.js的开源在线调试工具,有非常友好的用户界面和很强大的调试功能,只需使用命令npm inst

43、all -g node-inspector即可完成安装,然后在终端通过node -debug-brk=5858 app.js命令连接需要检查的脚本的调试服务器,接着启动node-inspector,在浏览器中打开:8080/app?port=5858,即可进入Web调试界面。该Web调试界面与浏览器的脚本调试工具一样,支持单步、断电、调用栈帧查看等功能。Node.js最大的特点就是异步式输入输出与事件紧密结合的编程模式,这种模式不同于传统同步式输入输出的线性编程思路,因为控制几乎是靠事件和回调函数来组织,一个逻辑要拆分为若干个单元18。Node.js开发了node包管理工具npm来解决包的发布

44、和获取需求,Node.js的包是一个目录,其中包括一个轻量级数据交换格式的说明文件package.json,位于项目的根目录下,安装包时,只需在package.json写入所需安装的包名和对应版本,再进入顶层目录,执行命令npm install即可生成一个名为node_modules的目录,目录下是使用npm install安装的包。核心模块Node.js的核心模块由一些精简而高效的库组成,提供基本的应用程序编程接口。Node.js的核心模块主要有全局对象、常用工具、事件机制、文件系统访问和HTTP服务器与客户端。Global是Node.js中的全局对象,它提供了一个操作系统的简单接口,所有全

45、局变量都是global对象的属性,比如用于提供控制台标准输出的console变量、用于描述当前Node.js进程状态的对象的process变量等等;常用工具util提供常用函数的集合,用于充实核心功能库的功能;于用户代码与Node.js下层事件循环的交互是通过事件驱动events实现的,并且基本上所有的模块都依赖事件驱动;文件系统模块提供了文件的读取、写入、更名、删除、遍历目录、链接等可移植操作系统接口;文件系统模块中所有的操作都可以是异步的也可以是同步的;Node.js的标准库提供了两个HTTP模块,包括一个高效的HTTP服务器http.server和一个简易的HTTP客户端http.req

46、uest。云资源平台的设计3.1云平台系统框架设计本资源平台的实现是结合先进的OpenStack平台,采用分层设计的方法,搭建底层的OpenStack“云”,然后在“云”上创建出虚拟机,在该虚拟机上利用Node.js建站技术和分布式数据库MongoDB设计一个资源平台,用户可以在该平台上发布话题、评论话题并进行互相回复。整个云平台的底层系统框架设计如图3-1所示,最底层是作为计算节点、网络节点、存储节点和控制节点的4台服务器,由控制节点控制另外3台服务器,第二层是控制节点上运行的OpenStack用户界面,最后是OpenStack创建的虚拟机。图3-1 云平台底层系统框架设计平台展示技术基于N

47、ode.js、Express和MongoDB,平台的功能包括路由控制、页面模板、数据库访问、用户注册、登陆、话题的发布、互相评论回复功能。本章中将介绍Express框架、MVC设计模式、EJS模板引擎以及MongoDB的操作,呈现出云平台Web系统的结构设计和功能设计。3.2云平台数据库设计在介绍云平台数据库设计之前,首先介绍一下分布式领域的CAP理论。CAP即一致性(Consistency)、可用性(Availability)和分区容错性(Partition-tolerance)。一致性是指在分布式系统中所有数据变动都是同步的;可用性是指在集群中一部分节点故障后,客户端的读写请求是否会受到集

48、群的影响;分区容忍性在一定程度上可以理解为是对通信的时限要求3。系统如果不能在规定时限内达成数据一致性,就只能在一致性和可用性之间做出选择。CAP理论想要说明的就是任何分布式系统只可同时满足一致性、可用性、分区容错性中的两点,没法三者兼顾。图3-2为NoSQL系统的图形指南,从图中我们看到,MongoDB属于文档模型而Redis属于Key-Value模型。图3-2 NoSQL系统的图形指南Key-value模型类似常见的哈希表,一个Key对应一个Value,但是其能提供非常快的查询速度、大的数据存放量和高并发操作,并且可以通过上层的开发来使它也支持复杂的操作。文档模型和Key-value在结构

49、上非常相似,也是一个Key对应一个Value,但是这个Value是有语义的,并且文档型数据库一般可以对Value创建二级索引,以方便上层的应用,而普通键值数据库无法支持这一点。 3.2.1 Mongodb安装及配置下面介绍在64位的Ubuntu14.04上安装MongoDB的步骤:这里我们先停止MongoDB,进入mongod所在的目录(/usr/bin/),然后运行“sudo ./mongod -dbpath /var/lib/mongodb/ -logpath /var/log/mongodb/mongod.log -logappend &”。其中,dbpath指定mongo的数据库文件位

50、置;logpath指定mongo的log日志的具体文件名;logappend表示log的写入采用附加方式,默认覆盖之前的文件;&表示程序在后台运行。进入mongodb的安装目录/usr/bin,输入命令mongo,便启动了MongoDB的命令行客户端程序。下面是MongoDB非常基本的命令:3.2.2 Redis安装及配置 Redis是一个键值数据库,性能非常出色,因为Redis不仅逻辑简单,而且纯内存操作,单节点每秒可以处理超过10万次读写操作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数据库,对其解压后得到名为redis-2.8.11的文件夹,此时可以使用命令mv redis-2.8.11 redis来将改文件夹重命名为简短的redis,方便以后的目录切换。然后切换到redis目录并进行安装,命令为sudo make & sudo make install,安装成功后,控制台会提示对其进行测试,命令为sudo make test,执行测试命令后,系统就会对redis的所有组件进行测试。测试完毕无误后,此时Redis的可执行文件已经被放到了/us

52、r/local/bin目录下,如图3-3所示。图3-3 Redis的可执行文件接着需要下载配置文件和init启动脚本,将启动脚本放到/etc/init.d/目录下,将配置文件放到/etc目录下,然后使用命令启动Redis,最后在redis目录下使用redis-cli命令启动client客户端连接,验证Redis是否成功启动的代码如下:3.2.3 利用MongoDB和Redis实现会话的持久化在controller目录下的sign.js中定义了一个将用户的登陆状态存储下来的session方法,否则每次刷新页面用户都需再登陆一遍。session即服务器与客户端之间的会话状态,使用session的前

53、提是要在入口文件app.js中加入app.use(require(cookie-parser)(config.session_secret),因为session依赖于中间件cookie,有了cookie-parser之后session才能正常工作,然后就可以保存用户的登陆状态。一般的网站服务都是使用HTTP协议传输数据的,HTTP协议是无状态协议,一旦数据交换完成,客户端与服务器之间的链接就会关闭,再次交换就需要再次建立新的链接,这样服务器就无法从链接上跟踪会话了。所以要引入session和cookie来弥补这一不足cookie通过在客户端记录信息确定用户身份,session通过服务器端记录信

54、息来确定用户身份。session和cookie的工作机制如图3-4所示。图3-4 session和cookie的工作机制Redis存储部分的代码如下:MongoDB存储部分的代码如下,注意写代码时,cookieParser一定要在前面, 因为session的设置依赖cookie:3.3云平台Web系统设计3.3.1 MVC设计模式MVC(Model-View-Controller),即模型-视图-控制器,是一种软件的设计模式,它把一个非常复杂的软件工程分解为更加易于理解和管理的三个层面:模型、视图和控制器。模型是对象及其数据结构的实现,包含了数据库操作,目的是为了完成数据库映射;视图表示用户界

55、面,本网站写的是HTML文件来设计各页面;控制器用于处理用户请求和数据流,还有一些复杂模型,再将输出传递给视图。本平台以Express、MongoDB、Mongoose作为基本框架,是典型的MVC引用。模型层由Mongoose对象关系映射模型实现,存放在models目录下;视图层由EJS模板实现,存放在views目录下;控制层由Express Middleware实现,存放在controllers目录下。EJS是一个JavaScript模板库,它除了能缓存已经解析好的html模板外,还有如下特性:Middlewares是Express的中间件,在平台中提供基本的auth,session验证。中

56、间件是一种类似插件的控制函数,能控制流程中的验证、保存、删除等方法。举例来说,在执行save方法时,需要对存入的数据进行验证,利用中间件,可以对错误进行拦截、错误处理、修订等等。middleware 模式相当于一个加工流水线,每一个 middleware 相当于一个加工步骤,当出现一个 http 请求的时候,http 请求会挨着每个 middleware 执行下去。 express 里处理一个请求的过程基本上就是请求通过加工流水线的过程。每个 middleware 都有三个参数 req,res,next。 next() 方法用于处理异步方法,不然后续的 middleware 就无法执行。3.3

57、.2 Express框架介绍及其安装npm提供了大量的第三方模块,其中不乏许多Web框架,Express就是一个Web开发框架,它是目前最稳定、使用最广泛的。Express除了为http模块提供了更高层的接口外,还实现了许多功能,比如路由控制、模板解析支持、动态视图、用户会话、访问和插件支持等等。执行命令sudo apt-get install node-express可安装Express框架,安装完成后,执行命令express app创建开发目录,app即为所开发程序的名称。然后进入app目录,输入npm install安装程序依赖组件,安装完成后,可以看到依赖组件目录如图3-5所示。图3-

58、5 express的依赖组件目录可见npm install命令自动安装了依赖express和jade,检查目录app目录中的package.json文件,内容是: 其中,dependencies属性中有express和jade。当执行无参数的npm install命令时,系统会首先检查当前目录下的package.json,并自动安装这一文件中所有指定的依赖。需要说明的是,jade是Express默认提供的引擎,它与传统模板引擎不同,它由一套生成HTML的每个标签结构的完成语法,由于本网站的实现用的是EJS,所以仍需要安装EJS模板引擎。安装完成后,在app目录下,输入node app来测试整体

59、环境是否安装成功。这个时候打开浏览器,输入 HYPERLINK http:/localhost:3000 http:/localhost:3000,若能看到“Express”,说明Express框架安装成功。3.3.3 Web系统结构设计本Web系统的主要目录和文件如下:其中,app.js、route.js、config.js放在根目录下,app.js是工程的入口,通过require可以直接获取express模块。routes为指定路径组织返回的展示内容;middlewares目录下放的是express框架的中间件,包含基本的auth, session 验证,可以通过app.use启用,比如a

60、pp.js中就包含了五个中间件,分别为功能为解析客户端请求、支持定制的HTTP方法、路由支持、静态文件支持和错误控制器;services目录下包含消息和邮件服务;proxy目录下的js文件可以看做是对model模型处理的加工库。由Express创建的网站架构如图3-6所示。图3-6 Express网站架构首先,浏览器发起访问请求,路由控制器接受这一请求,然后根据不同的路径要求来调用不同的控制器。控制器被调用后,便开始处理用户的具体请求,比如说可能会访问数据库中的对象等等。控制器还会访问模板引擎,生成视图的HTML,最后再由控制器将这一视图返回给浏览器,这样便算是完成了一次请求。3.3.4 We

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论