毕业设计(论文)Web2.0社区系统设计.doc

上传人:文库蛋蛋多 文档编号:3977268 上传时间:2023-03-30 格式:DOC 页数:34 大小:550.50KB
返回 下载 相关 举报
毕业设计(论文)Web2.0社区系统设计.doc_第1页
第1页 / 共34页
毕业设计(论文)Web2.0社区系统设计.doc_第2页
第2页 / 共34页
毕业设计(论文)Web2.0社区系统设计.doc_第3页
第3页 / 共34页
毕业设计(论文)Web2.0社区系统设计.doc_第4页
第4页 / 共34页
毕业设计(论文)Web2.0社区系统设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《毕业设计(论文)Web2.0社区系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)Web2.0社区系统设计.doc(34页珍藏版)》请在三一办公上搜索。

1、本科毕业设计(2009届)题 目学 院专 业班 级学 号学生姓名指导教师完成日期摘 要在互联网进入Web2.0时代以后,Web开发技术迎来了极大变革。AJAX、富客户端、RSS等概念开始涌现,以“用户为中心”成为被业界重视的理念。在这些变革的背后,是一些原本复杂技术的平民化。这些技术以前只掌握在少数大网站手中;而在Web2.0时代,许多小网站也采用了这些技术,以便更好地为用户服务。本项目旨在通过搭建一个社区系统,深入研究在Web2.0中Web开发的一些关键技术,如全文检索、中文分词、相似推荐、性能调优等。同时,本项目采用Ruby on Rails框架,进行敏捷开发实践。最终,本项目实现了所有设

2、计需求,并达到了高性能的指标。同时对前述Web开发中的关键技术,全部进行了研究和实现,使这些技术不会停留在理论上可行的阶段。通过本项目的开发,也积累了在敏捷开发和Ruby on Rails方面的经验,在瞬息万变的互联网中,敏捷开发方法可以极大提高产品推出速度,为产品的设计、推广赢得时间。关键字:敏捷开发;Web2.0;Ruby on Rails;全文检索;相似推荐算法AbstractAs internet entered web2.0 times, web development has ushered in great changes. The emergence of AJAX, rich

3、-client, RSS and other new concepts has just made user-centric to win the industrys attention. However, behind these changes, some advanced techniques became civilian popular. These technologies was once hold by a few large companies, while now widely took advantage by many small Web2.0 sites- just

4、for better user experience.This project is about to do a deep research at those key techniques, such as full-text search, Chinese word segmentation, similarity recommendation, performance tuning, etc, to meet the need of a Web2.0 sites development. The way of research is to develop a site that requi

5、res these techniques. In addition, the hot framework Ruby on Rails will be used, to perform agile development practice.Finally, this project fulfilled the requirements that planned at the beginning, with high performance as a plus. In addition, this project includes the research and development of t

6、he key techniques that quoted above, so that they can be applied in real internet products. Through the whole development, I gained a lot of experience that about Agile and Ruby on Rails. As a matter of fact, the Agile development method can extremely accelerate the launching of products, as to save

7、 time for theirs designing and promotion, in the rapid changing Internet.Keywords: Agile Development; Web2.0; Ruby on Rails; Full-text search; Similarity recommend algorithm 引言自从Web2.0的概念在2004年兴起,互联网行业已经涌现出了一大批Web2.0网站。其中不乏成功者如国外Youtube、Facebook,国内的豆瓣。Web2.0改变了互联网:从思路上,“以用户为中心”的提出标志着网站更加重视用户体验,学会站在用

8、户的角度考虑问题;从技术上,海量数据、富客户端、全文检索等相对复杂的技术开始在中小网站普及。在Web开发的语言方面,近几年也有了长足发展。在互联网在国内发展的最初几年,用于web开发的技术主要是微软公司的ASP,Java平台的JSP以及开源的PHP。而最近几年,又有了不少新的语言和平台普及开来,比如.net平台,python、ruby、erlang等。另一方面,在Web应用的设计角度,体现出了层次化、抽象化的特征。相比以前的简单页面、简单逻辑,Web2.0时代的Web应用往往以页面众多、内容丰富、逻辑复杂为特色。如豆瓣网,拥有百万级别的图书音像资料,还要根据用户收藏的图书为不同用户做出不同推荐

9、。可想而知,其中的逻辑是非常复杂的。正因为如此,如今的Web应用在设计的角度开始分层,基本的分层方法如MVC,将控制器、模型和页面展示分开;也有分为Web层、BIZ层和DAO层的方法,直观地抽象出业务层(BIZ)和数据访问层(DAO),是一种更适合大型Web应用所处分布式环境下的架构设计。如果说以前的Web开发只是“做网页”,比做软件的工程量小很多的话,如今的Web开发可以被认为是“Software for Internet”,其中涉及到的知识广度,已经大大超过了开发传统软件。此外,当前在Web开发的方法上,也比以前更加丰富。以前更多的是单兵作战,网站上需要编程的部分较少,用网页三剑客基本可以

10、完成。但现在的Web开发讲究分层,讲究团队协作,特别是在大网站如阿里巴巴、百度等,同一个网站下会有众多的产品线,而每一个产品线都由一个或多个团队负责。具体到一个团队,不同开发人员的工作职责又可分为前端开发、后端开发、测试、运维等,复杂程度已经超过了软件开发。由此可知,在Web开发的方法论上,近年也有了长足发展,特别是敏捷开发,日益被更多团队采用。本项目拟采用敏捷开发的方式,以新近流行的Ruby On Rails框架为基础,开发一个Web 2.0社区系统。该系统以图书点评为中心,在开发过程中,致力于研究一些Web2.0网站所涉及到的关键技术,比如相似推荐算法、中文分词算法、搜索引擎技术、海量数据

11、下的性能调优等。所有的研究都会给出可操作的解决方案,使这些技术不会停留在理论上可行的阶段。项目概述Web2.0概述“Web 2.0”的概念来自于2004年一个会议,由OReilly公司副总裁的戴尔多尔蒂(Dale Dougherty)提出。如今,“Web 2.0”一词已经深入人心。但是,至今关于Web 2.0的含义仍存在极大的分歧,一些人将Web 2.0贬低为毫无疑义的一个行销炒作口号,而其他一些人则将之理解为一种新的传统理念。暂且搁置争论,不可否认的是,确实有一批公司,在Web 2.0的浪潮中崭露头角。在国外有YouTube,2006年被Google以16.5亿美金收购;还有Wikipedi

12、a, Flickr, Delicious, Myspace以及后来的Facebook, Twitter。在国内,典型的Web 2.0网站如豆瓣,以及校内等SNS类网站也可归入Web 2.0范畴。Web 2.0在商业上的成功,离不开技术上的进步。但在Web 2.0浪潮中涌现出来的新技术,大多是“旧瓶装新酒”。Web 2.0涉及到的新技术主要包括:AJAX:AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。简单来说,AJAX可以实现不全部刷新页面而更新内容,可以让B/S模式的应用有C/S模

13、式的使用体验,在“以用户为中心”的Web 2.0浪潮中,AJAX极大地提升了用户的使用体验。最早应用AJAX的Web项目是Google的Gmail和Google Map。Javascript:Javascript并不是在Web2.0时代才出现的技术,但以前开发者对Javascript的使用仅限于作为静态页面的点缀。直到AJAX出现以后,Javascript才被“正名”。如今,Javascript已经被作为一种常用的编程语言,许多大公司也专门设置了前端开发工程师岗位,Javascript越来越被重视。在开源社区,也涌现出大量Javascript库,如Prototype, Script.aculo

14、.us , JQuery等。在本项目中,我将使用Prototype和Script.aculo.us进行AJAX操作并产生一些可视化效果(Visual Effects)。RSS:RSS全称为“Really Simple Syndication”是一种描述和同步网站内容的格式,是目前使用最广泛的资源共享应用。可以被称为资源共享模式的延伸。如今,将内容输出成为RSS已成为一种惯例,通过RSS,也可以将互联网上的内容更有语义化地组织起来。Web 2.0中也产生了一些基于RSS的创业公司,如Feedsky,抓虾,鲜果等。流媒体技术:流媒体技术并非Web 2.0中才出现,而是美国Real公司最早提出的。这

15、种技术可以让用户在观看视频媒体时“边下载边观看”,对音频媒体也是如此。但Real公司并没能让它的技术普及,真正从流媒体技术中获益的是Youtube,而它依赖是基于FLV的流媒体技术。Web应用原理简述Web应用与桌面应用有显著区别。在涉及到网络交互的应用中,Web应用被称为B/S模式,桌面应用被称为C/S模式。实际上B/S模式可认为是一种特殊的C/S,这里的C (Client)就是浏览器。Web应用基于HTTP协议,需要一个Web服务器来提供服务;如果Web应用是动态的,还需要一层应用服务器以执行动态代码。总结起来,Web应用的原理由浅入深,可以做如下划分:图2-1 服务静态内容对静态内容请求

16、的处理如图2-1所示,直接由Web Server返回。图2-2 服务动态内容有动态程序的情况如图2-2所示。Web Server调用相应的解释器或VM,运行指定的文件,获得运行结果。然后Web Server将运行结果所谓响应返回。对于一些平台,如J2EE、Ruby等,将会有一层独立的应用服务器进行支撑。图2-3 有数据库的情况采用了数据库以后如图2-3所示。动态的程序在执行过程中到数据库查询结果,并根据一定规则生成文本内容返回给Web Server,之后Web Server发送响应内容。图2-4 多数据库的情况多个数据库作了复制或是集群或是负载均衡的情况如图2-4所示。因为在查询压力较大时,数

17、据库可能成为应用瓶颈,所以可以采用数据库集群。一方面可以使读写分离(主数据库只写,从数据库只读),另一方面,可以将读的压力均衡至多台服务器。这种方式在被很多大型Web应用所采用。图2-5 多个Web服务器的情况多个web服务器作了负载均衡的情况如图2-5所示。原理和数据库层面进行的负载均衡类似,但在技术细节上有所区别,但都是为了分散单点所承受的压力。对Web服务器和数据库服务器都采用负载均衡的情况不再赘述,这种情况下,要考虑的因素更为复杂。在一些大规模应用中,从最前端负责请求转发的Web服务器到最后端提供数据持久化的数据库服务器,经过的可能不只一层应用。这就涉及到Web开发中的分层的思路1。M

18、VC概述MVC是Web开发中一种常见的分层开发的思路。其中,M, V, C分别指Model(对象) , View(视图) 和 Controller(控制器)。MVC(Model-View-Controller,模型视图控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。MVC由Trygve Reenskaug提出,是Xerox PARC在20世纪80年代为程序语言Smalltalk-80发明的一种软件设计模式。MVC的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为

19、可能。除此之外此模式通过对复杂度的简化使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:控制器- 程序员编写程序应有的功能(实现算法等等)视图 - 界面设计人员进行图形界面设计模型 - 数据库专家进行数据管理和数据库设计图2-6 MVC图示近年,在Web开发中使用MVC成为趋势。在最初的Web开发中中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程

20、序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同事能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。其次,模型是自包含的,与控制器和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,或者把RDBMS数

21、据源改变成LDAP数据源,只需改变模型即可。一旦正确地实现了模型,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以一句这种设计思想能构造良好的松耦合的构件。此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型机型处理,然后选择适当的的视图将处理结果显示给用户。MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较

22、复杂,所以需要花费一些时间去思考。开发一个MVC架构的工程,将不得不花费相当可观的时间去考虑如何将MVC运用到应用程序中,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。另外由于MVC将一个应用程序分成了三个部件,所以这意味着同一个工程将包含比以前更多的文件。因此MVC并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远的角度来看,它会大大

23、提高后期软件开发的效率。本项目将采用Ruby on Rails框架,以及MVC的开发思想。Ruby on Rails是通过Ruby语言所开发出来的Web Framework,也是采用Model-View-Controller架构。Ruby on Rails简介Ruby on Rails,也称RoR或简称Rails,是一个使用Ruby语言实现的全栈式 (full-stack)开源网络应用框架,它是严格按照MVC结构开发的。Rails努力使自身保持简单,来使实际的应用开发时的代码更少,配置更少1。Rails的设计原则包括“不要重复自己”(Dont Repeat Yourself)和“约定胜于配置”

24、(Convention Over Configuration)。Rails框架自2003年问世以来,已经发展到第2.2版本,也出现了一大批基于ROR构建的网站。国外的Twitter、国内的Javaeye,都是用Rails框架搭建的;豆瓣的第一版也使用了Rails,这也符合其创始人阿北提出的“快速上线”的方针。Ruby on Rails首先是基于Ruby语言,Ruby语言虽然冷门,却有许多令人兴奋的特性。比如在Ruby中,一切皆为对象;而号称纯OO的Java,其中的基本类型(如Integer、Long)就不是以对象的形式存在的。Ruby特有的“block”可以便捷地处理循环、回调,使Ruby可以

25、用更少的代码完成更多地任务,而且程序保持简洁易懂。比如下面的这行代码:Ruby语言简短的代码具有强大的表现能力。根据统计,在真实的Ruby项目中,平均每个方法(函数)只有5行代码。Ruby的项目比起同样规模的Java项目,代码量只相当于Java项目的1/5。同时,Ruby的代码风格比较自由。比如函数调用可以不加括号,行尾可以不加分号。这使得Ruby可以在经过包装之后,成为一种DSL(领域特定语言),这显著拓展了Ruby的适用范围。Ruby on Rails框架问世以后,以“约定大于配置”的思想,迅速征服了世界范围内的Web开发者,并给实际上占统治地位的J2EE平台带来了极大冲击。Rails框架

26、的魅力在于把一切都按照需要的方式约定好,无需配置,甚至无需撰写代码就可以让应用成功跑起来。如今,Ruby on Rails已经发布了2.3版本。Rails框架将和另一个名为Merb的框架合并,并发布在3.0版本中。围绕着Ruby on Rails产生了一系列生产环境的部署方案,虽然还不如J2EE平台成熟,但选择已经很多。本项目将采用Rails 2.1.0版本进行开发,部署环境选择Ubuntu Linux Server 8.10版本。敏捷开发简介敏捷开发是近年流行起来的一种开发模式。敏捷开发依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净

27、、简单,这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计2。敏捷开发所遵循的原则包括:个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划这些规则也可以归纳为:个体交互、快速原型、客户现场、拥抱变化。在互联网行业中,互联网产品的特点往往是:需要快速完成上线;需求很难在一开始完全确定;业务规则相对简单。这些特点使敏捷开发模式非常适用于互联网软件的开发。本项目将在Ruby on Rails框架的基础上,通过搭建一个Web2.0社区系统,进行一次敏捷开发实践。全文检索简介全

28、文检索的一个关键技术是全文索引,这是一种区别于数据库索引的倒排索引(inverted index)3。在小规模数据量时,对于文本的检索可以使用数据库的like语法进行。但由于数据库索引不是为全文索引设计的,因此,使用like %keyword%时,数据库索引是不起作用的,搜索过程又变成类似于一页页翻书的遍历过程。所以对于含有模糊查询的数据库服务来说,like对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like%keyword1% and like %keyword2% .其效率之低下也可想而知。在数据量规模很大的情况下(比如百万级别的数据),根本无法使用like进行查询。建立一个

29、高效检索系统的关键是建立一个反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词到文章的映射关系,利用这样的映射关系索引:关键词=出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率,检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。当前,对全文检索的研究主要由研究语言模型的数学家进行,并且取得了显著成果。在排序方面,基于tf/idf原理的打分算法成为标准;在软件领域,有Lucene、Sphinx、Xpian等开源项目用

30、来提供全文检索服务。另一方面,全文检索在中文(以及日文和韩文)领域遇到了挑战。因为中文的文本没有天然的空格,所以需要开发单独的中文分词器来支持中文分词。支持中文的全文检索技术,可以认为是Web开发中关键技术之一。本项目将研究在海量数据下进行中文全文检索,并将所有功能完整实现。中文分词技术简介由于中文文本没有天然的空格,所以对中文分词需要采用单独的分词算法进行。目前,比较常见的中文分词算法包括单字切词、二分法以及基于词库匹配的分词算法。其中,单字切词和二分法都不算是真正的分词算法,效果也不理想。本项目中将研究基于词库匹配的分词算法。基于词库匹配的分词算法,需要解决的是二义性问题。九十年代以前,海

31、内外不少学者试图用一些文法规则来解决分词的二义性问题,都不是很成功。90年前后,清华大学的郭进博士用统计语言模型成功解决分词二义性问题,将汉语分词的错误率降低了一个数量级4-5。利用统计语言模型分词的方法,可以用几个数学公式简单概括如下:假定一个句子S可以有几种分词方法,为了简单起见假定有以下三种:A1, A2, A3, ., Ak,B1, B2, B3, ., BmC1, C2, C3, ., Cn其中,A1, A2, B1, B2, C1, C2 等等都是汉语的词。那么最好的一种分词方法应该保证分完词后这个句子出现的概率最大。也就是说如果 A1,A2,., Ak 是最好的分法,那么 (P

32、表示概率):P (A1, A2, A3, ., Ak) P (B1, B2, B3, ., Bm), 并且P (A1, A2, A3, ., Ak) P(C1, C2, C3, ., Cn)因此,只要利用合适的统计语言模型计算出每种分词后句子出现的概率,并找出其中概率最大的,就能够找到最好的分词方法。其中,统计语言模型可以用TF/IDF算法计算得出6。在一系列研究的基础上,Chih-Hao Tsai提出了一种MMSeg算法7,这种算法可分为simple和complex两种算法。其中,simple 算法就是最简单的正向最大匹配算法。为了解决 simple 算法的不足,MMSEG 又提供了另一种选

33、择:complex 算法。该算法使用了 Chen K. J. 和 Liu S. H. 于 1992 年在 Word identification for Mandarin Chinese sentences 中提出的一种最大匹配算法的变种。complex 算法通常比 simple 算法具有更高的精确度8-9。本项目中,采用了MMSeg算法进行中文分词。缓存简介缓存的原理可以概括为局部性原理。从时间的维度来讲,局部性体现在当前被访问的部分可能在短时间内再次被访问。对于一些流量不大的系统或者性能要求不高的系统,缓存并非必要。但本项目旨在建立一个高性能的社区系统,在性能方面的要求很高。因此,需要优化

34、一切可以优化的环节,缓存就是其中之一。概括来讲,缓存的原理是,将一些耗时的操作的结果保存起来,使以后再访问时可以不需要重新操作一次即可得到结果。所以缓存能提高系统性能、节约处理时间。举例来说,假设一次数据库查询会耗时2秒,而读取内存中同样的内容只需要0.002秒。那么,进行1000次这样的操作,如果不使用缓存,总耗时2000秒;而使用了缓存将数据保存到内存以后,只需要 2+0.002*999,大约是4秒。本项目采用了开源软件memcached。 Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。通过

35、在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcached非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O, 对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表,因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1)。Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJ每天已

36、经在向一百万用户提供多达两千万次的页面访问。而这 些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、提供了更好的资源分配方式,以及Memcache失效时对数据库的访问速度。Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。为了提升项目性能,本项目还设计了一套多级缓存架构。Memcached是这套架构中的重要一环。相似推荐算法简介相似推荐算法常用在Web2.0网站上,

37、用来向用户推送与当前内容相似的内容。如果相似推荐算法计算准确,将使用户看到相关内容,从而达到增加PV、提升流量的作用。举例来说,当用户在浏览与黄金时代相关的内容时,如果通过计算,推荐出白银时代、黑铁时代,则这样的算法可以认为是准确的。准确的相似推荐算法,有助于引起用户进一步的兴趣。国内最早引入相似推荐算法的网站是豆瓣网,经过多年发展,豆瓣网已经成长为国内领先的Web2.0社区网站之一。但其相似推荐算法作为核心技术,从未对外批露。本项目中,将研究一种易于实现的相似推荐算法,基于Tag进行相似推荐。需求分析敏捷开发中的需求分析在敏捷开发的实践中,需求分析依然是不可或缺的部分。但敏捷开发中的需求分析

38、,与传统的需求分析方式有很大区别。这些区别可以归纳为表3-1。表3-1 敏捷开发与传统方法在需求分析阶段的区别传统需求分析敏捷需求分析需求分析时机更多地集中在项目早期近乎均匀地贯穿于项目的整个生命周期需求划分单位基于功能分解,划分模块或子系统,一个模块或子系统的颗粒度通常较大基于能否独立业务价值,切割成一个个用户故事,一个故事有时会跨越传统的模块或子系统边界;故事的颗粒度较小需求细化过程一步到位,可供开发人员设计开发逐步细化,仅就下一个迭代需要实现的部分进行详细分析需求文档要求正式文档,往往有明确的格式要求。既作为设计开发人员必须严格遵守的规约,也作为向客户提交的必备产出物之一。难维护,难验证

39、(跟踪)非正式文档。仅仅是辅助开发团队与客户沟通,不作为规约,也不作为必备产出物。更多强调通过自动化功能测试用例来跟踪系统需求应对需求变更有严格的控制流程,视变更为风险视变更为必然或预期中的事情本项目采用敏捷开发的方法,因此,不在需求分析阶段强制确定所有需求,而是在设计阶段、开发阶段不断去完善。同时,针对本项目所实现的功能,业务逻辑相对简单的特点,在需求分析时不需要绘制数据流图,而采用流程图进行表述。项目功能需求用户模块本系统定位在一个“以用户为中心”的社区系统,围绕这一点,首先需要完善与用户相关的功能。此部分流程图如图3-1所示。图3-1 用户模块需求图书模块在本项目中,用户活动的载体是图书

40、。本项目的图书模块用来展示所有与图书相关的信息。图书信息页面功能需求如图3-2所示。除图书信息页以外,图书模块还应当包含以下功能:图书信息全文检索图书信息按照出版社浏览图书信息按照作者浏览图书信息按照Tag浏览单条评论信息展示以上的“浏览”功能,应当按照需要,加入分页机制。以达到更好的用户使用体验。图3-2 图书信息页需求管理模块系统的管理模块用来对内容进行管理。这部分需求较少,可在以后使用中产生了新需求再进行添加。管理模块的流程如图3-3所示。图3-3 管理模块需求其他模块除以上功能外,系统还需要一些额外的功能:单本图书评论RSS输出全站书评RSS输出随机显示作者、出版社以及Tag信息搜索引

41、擎优化总体设计系统架构设计系统运行环境系统运行环境包含开发环境、测试环境和生产环境。其中,开发环境和测试环境一致,采用自己的电脑。生产环境采用专用的服务器。系统的两套运行环境对比如表4-1所示。表4-1 系统运行环境开发/测试环境生产环境操作系统Windows XP SP3Ubuntu Server 8.10Web服务器Webrick Nginx应用服务器WebrickThin数据库服务器Mysql 5.0Mysql 5.0文件系统 文件系统的选择一般来说对应用影响不大。但本项目的多级缓存系统中,可能在同一目录产生大量静态缓存文件。此时文件系统的差异对应用的影响就会比较显著。Fat32Ext3

42、Ruby版本ruby 1.8.6ruby 1.8.6Rails版本rails 2.1.0rails 2.1.0除以上环境外,本项目采用svn进行代码版本控制。系统架构规划本系统采用B-S模式,以Ruby on Rails框架为基础,采用MVC方式开发。本系统还将依赖一些服务如全文检索引擎、memcached缓存。对系统架构规划的目标是使系统易于扩展。当系统承载的压力增大到十倍甚至百倍时,可以通过简单的调整,使系统Scale Out。本系统的架构设计如图4-1所示。在生产环境中,采用Nginx作为前端Web服务器。Nginx将指向静态文件的请求直接返回,将指向动态页面的请求,转发到后端的应用服务

43、器。在本项目中,选择了基于Thin的集群,这样一方面可以发挥Nginx在Linux epoll模型上的强大处理能力;另一方面也能充分利用多个Thin进程形成集群提升并发请求的处理能力。图4-1 系统架构同时,本系统采用Memcached、MySQL以及Sphinx提供内存缓存服务、数据持久化以及全文检索服务。Thin与这3个服务采用Socket方式通信。Sphinx采用MySQL作为数据源编制索引。针对系统压力增大的情况,我设计了如下渐进的Scale Out策略:第一步,将几个子系统拆分到不同服务器。Memcached采用大容量内存服务器,Sphinx采用高速硬盘服务器,MySQL和Thin

44、App Server亦部署到单独的服务器。这样可以避免雪球效应,一旦一项服务宕掉,不至于影响其他服务。第二步,有针对性地采用集群。Memcached有良好的分布式支持,而Thin App Server本身是以Cluster方式工作的。可以采用多台服务器部署Memcached、Thin。Nginx将动态请求分流到不同的Thin服务器。MySQL保持单点以保证数据一致性。第三步,针对MySQL采用集群技术达到读写分离。采用主从同步保持数据一致性。第四步,进行服务切分,将不同服务分布在不同App Server上,并搭建配套的MySQL集群。服务之间通信可以采用Rest接口或者Socket方式。将My

45、SQL作为非关系数据库使用,消除SQL Query中的join。可见,在一开始采用清晰的架构规划,对将来的系统扩容是有很大帮助的。Rails模块结构Rails是一套适合快速开发的框架,在本项目的开发中,需要涉及到Rails的app部分以及config部分。Rails处理请求的流程和各模块分工如图4-2所示。图4-2 Rails框架处理请求流程其中,在APP部分是典型的MVC模式。与数据库服务器的交互的操作由Model类负责。数据库逻辑设计数据库逻辑结构依照本项目的功能设计,主要功能点的数据库逻辑图如图4-3所示。图4-3 数据库逻辑结构示意图 本项目线上程序实际的表结构与ER图中的表述略有差距

46、。在线上的表结构中,一些字段被设计为给将来的功能使用。在图4-3中,一些多对多关系采用两个一对多关系进行描述。如图书表与作者表的关系:一本图书可以有多个作者,每个作者可以写多本图书,因此二者是多对多关系。在此建立一个关系表Authors_Subjects,就可以把多对多问题简化为一对多。根据本项目的定位和功能需求,还设计了用于存放其他各类数据的表。如找回密码的记录表、图书价格信息表、网店优惠信息表等。在此不再赘述。采用Rails的Migration机制管理表结构在Rails中,可以使用Migration进行数据库版本的控制。本小节将具体讲述Migration的用法。在Rails中,Model是和数据库表对应的,所以,在使用script/generate命令生成Model文件时,会一并生成Migration文件。打开生成的*_create_subjects.rb文件,内容如下:class CreateSubjects 60 t.string :icon t.datetime :updated_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号