0x01 :开发级需求分析

在开发过程中,团队本身在开发的起始阶段确定了基本的开发级需求分析:

在开发过程中,除了需要满足用户级需求以为,我们还需要针对开发团队的特点,满足一些开发级的需求和约束。作为一个学生团队,我们的开发时间极为有限,很难抽调出大量的时间进行开发。因此,开发效率就显得尤为关键。幸运地是,我们团队本身的学习能力较强,成员对于项目的开发较为积极,且对于新知识上手较快。因此,我们选择大量采用成熟的开源技术来加快我们整体的开发效率,力求以最低的成本实现最多的功能。

因此,在开发策略上,团队经过商议后确定了基本方向:

我们简要分析了往届遗留下来的代码,认为其功能较弱且不稳定,相较于目前日益成熟的一些开源技术来说,各方面都相去甚远。因此,我们经过细致的讨论后决定大胆地扔掉遗留代码,采用新技术重新实现。一则可以规避原有代码本身遗留下来的诸多问题,二则采用新技术可以快速地实现更多功能,三则可以使团队成员学到一些当下流行的技术,对成员将来的发展也会有所裨益。

综上所述,我们团队将尽可能地在开发中采用成熟的开源框架和开源技术,以实现我们对于开发效率和开发质量的需求。

0x02 :架构设计

0x0200 :设计摘要说明

首先从架构的层次上,对本身的设计进行最简短的概述:

前端页面

直接与用户打交道,与用户进行交互

后端系统

负责处理用户的请求,并衔接搜索系统,为用户提供其想要的数据

搜索系统

负责搜集、整合数据,并响应网站后端的搜索请求,提供搜索结果

因此,不妨设计学霸在线系统的概念架构图如下图所示。

ü  搜索系统和后端系统为两个不同的执行体,二者通过HTTP协议进行交互,实现搜索系统与后端系统的解耦,使得我们可以轻松地扩展搜索系统本身,而不会对后端造成太大的影响。

ü  前端页面适当地运用ajax技术和后端进行交互,在减少服务器刷新压力的同时,也可以在一定程度上使前后端分离。

0x0204 :前端页面设计

 

我们团队的主要任务是大幅改善原有UI,实现一个优质的前端交互效果。为了达到这一目标,我们经过细致地调研,最终选用了Semantic UI前端框架。该框架具有时下流行的响应式布局特性。且该框架主打UI效果,很多组件都自带了动画效果,整体主题风格前卫,能体现出现代网页设计的特点,符合当代的审美观点。

Semantic UI最主要的特征是采用语义化开发。这套框架中的class都被命名为了描述其对应功能的形容词或者名词。这样的设计使得我们得以快速上手,对于我们提高开发效率大有帮助。使用该框架可以快速开发出现代化的高质量的前端页面,从而保证我们团队能够高质量地完成我们的任务。

0x0208 :后端系统设计

 

 

为了达到我们的开发级需求——快速开发,我们选择使用Python作为后端开发语言,并采用了Django这一重量级的后端框架来实现我们的后端。

Python的开发效率素来为人所称道。且我们团队中的大部分成员对于Python都有一定程度的了解,使用Python学习成本低,且开发效率高。因此,我们认为后端采用Python进行开发是一个相当正确的选择。

为了快速地实现我们的后端,我们采用了Django框架。Django框架经过开源社区多年来的努力,已经成为Python后端开发的不二之选。对于常见的Web开发需求,Django都提供了相应的模块。特别是几乎每个网站都必备的用户系统,Django中更是提供了相当多的支持,使得我们可以在短时间内实现我们的设计。除了其本身的功能外,Django具有大量的优质文档,以及成熟的开源社区。遇到问题时,我们有很多途径可以查找到相应的解决方案。Django的上述优势,使我们最终做出了采用它来实现我们的后端系统的决定。

后端系统主要有两部分功能,一部分是与用户系统相关的功能,如用户的登陆、管理、活动等等,另一部分则是与搜索引擎的衔接。同时还有一个模块负责整个站点的衔接、整合等。

0x0204 :搜索系统设计摘要

 

我们待搜索的内容一个有两类,一类是问答数据,一类是课程资源。这两类资源在系统中的处理是不同的,因此,在搜索系统设计的时候,我们就选择将这两类数据源直接分开。

对于课程资源的搜索类似于传统的页面爬取,我们采用分布式的nutch进行爬取,提高爬取能力的同时,减轻团队在爬取方面的工作量。同时,使用solr作为搜索引擎后端进行搜索,其对于海量数据的处理能力较强,可以实现较好的搜索效果。

对于问答资源,我们采用另外一种方案:StackExchange API可以直接返回Json格式编码好的相关信息。该API可以返回Tags、Posts、Answers、Questions等一系列信息。我们通过一个类似爬虫的程序在后台请求相关API,将数据直接整理入库,从而实现对于问答资源的整合。

0x03 :平台架构设计

0x0300 HTTP Server

我们选用的Web服务器是Apache HTTP Server。Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。

0x0304 :搜索引擎

对于搜索业务,我们选用了搭建在Apache服务器上的Solr + Nutch的配置。Solr和Nutch均为Apache项目中的搜索引擎项目,而二者所擅长的方向不同。

Nutch

与类似于Apache Droids 这样的抓取框架相比,Nutch提供了我们很多很好的优势。其中,显而易见的一点是Nutch 提供了可以让你完整的实现搜索应用的特性集,其次是Nutch 的高可伸缩性(scalablity)和健壮性(robust),Nutch 运行在Hadoop 上,你可以运行在单态机器上,也可以运行在一个100台机器构成的集群(cluster)上,另外,Nutch 有很高的抓取质量,你可以配置哪些页面更重要,优先抓取,拥有丰富的APIs可以让你容易的集成Nutch 到你的应用中(可扩展性),更重要的一点是,Nutch 的内建组件,超链数据库(LinkDatabase),拥有该组件,可以大幅的提高搜索结果的关联度,Nutch 在被抓取的页面之间跟踪超链接,以便依靠內部链接来判断页面和页面之间的相关度。

Solr

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。Solr是基于Lucene的全文搜索服务器,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

BugPhobia进阶篇章:系统架构技术规格的更多相关文章

  1. BugPhobia进阶篇章:前端技术/设计文档

    0x01 :前端概述 0x0100 :前端基本描述 前端基础框架 Semantic UI 根据http://semantic-ui.com/提供的样例和文档,依据Version 2.1.4版本的特性进 ...

  2. BugPhobia进阶篇章:功能规格说明书

    0x01 :特别鸣谢 首先特别鸣谢<构建之法>中并没有给出固定化格式的功能规格说明书的样例,因此在此次的说明书中将尽可能用生动形象的例子展示软件交互阐释 因此受到它本身的启发,此次团队功能 ...

  3. 百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者

    百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者 1.

  4. 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?

    转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...

  5. Android进阶(十一)Android系统架构讲解

    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...

  6. Android进阶加密-第1章-Android系统架构-读书笔记

    第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...

  7. BugPhobia准备篇章:团队Beta阶段准备工作分析

    0x00:序言 To the searching tags, you may well fall in love withhttp://xueba.nlsde.buaa.edu.cn/ 再见,无忧时光 ...

  8. BugPhobia开发篇章:Alaph阶段Scurm Meeting

    [github]   https://github.com/bugphobia/XuebaOnline 0x01 :目录与摘要 If you weeped for the missing sunset ...

  9. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

随机推荐

  1. IE8以下兼容

    <!--[if lt IE 9]><script type="text/javascript">alert('IE版本太低,请升级后使用');</sc ...

  2. CSS3渐变——线性渐变

    渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果 ...

  3. blinker语音控制Arduino/esp8266开关灯-滑动条使用-文本框交互

    总链接:  https://www.arduino.cn/thread-78393-1-1.html 语音控制:https://doc.blinker.app/?file=005-App%E4%BD% ...

  4. CentOS 7.X 系统安装及优化

    centos的演变 启动流程sysvinit 串行启动:一次一个,一个一个启动 并行启动:全部的一起启动 init优点 运行非常良好.主要依赖于shell脚本 init缺点 1.启动慢 2.容易夯住, ...

  5. JS常见的小代码

    一:去掉数组里面的重复项. 比如 如下一个数组:var arr = [1,2,4,3,4,3]; 我想要得到数组 [1,2,4,3].为这样的 写一个函数去掉重复的项. var unique = fu ...

  6. nohup: failed to run command `java': No such file or directory

    在执行脚本添加这一行 source /etc/profile exec nohup java -Xms1024m -Xmx2048m -jar /opt/dev/claimzuul/$JAR_BAO ...

  7. Echo团队Alpha冲刺随笔 - 第三天

    项目冲刺情况 进展 完成了三分一左右,前端整体页面框架已有,后端也在稳步推进 问题 今天问题较少,主要还是出在对于框架的掌握上 心得 继续加油! 今日会议内容 黄少勇 今日进展 实现社区公告,个人信息 ...

  8. node通过http.request向其他服务器上传文件

    function upload(callback) { let boundaryKey = '----' + new Date().getTime(); // 用于标识请求数据段 let option ...

  9. 更换apt-get官方源为163源

    更换apt-get官方源为163源 1.# mv /etc/apt/sources.list /etc/apt/sources.list.bak 2.覆盖原来源文件 tee /etc/apt/sour ...

  10. (推荐)Skyline调用WMTS服务接口

    文章地址 http://blog.csdn.net/chaiqi/article/details/9302373 供大家学习参考.