BugPhobia進階篇章:系統架構技術規格


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可以返回TagsPostsAnswersQuestions等一系列信息。我們通過一個類似爬蟲的程序在后台請求相關API,將數據直接整理入庫,從而實現對於問答資源的整合。

 

0x03 :平台架構設計

0x0300 HTTP Server

我們選用的Web服務器是Apache HTTP ServerApache HTTP服務器是一個模塊化的服務器,源於NCSAhttpd服務器,經過多次修改,成為世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平台上。

 

0x0304 :搜索引擎

對於搜索業務,我們選用了搭建在Apache服務器上的Solr + Nutch的配置。SolrNutch均為Apache項目中的搜索引擎項目,而二者所擅長的方向不同。

Nutch

與類似於Apache Droids 這樣的抓取框架相比,Nutch提供了我們很多很好的優勢。其中,顯而易見的一點是Nutch 提供了可以讓你完整的實現搜索應用的特性集,其次是Nutch 的高可伸縮性(scalablity)和健壯性(robust)Nutch 運行在Hadoop 上,你可以運行在單態機器上,也可以運行在一個100台機器構成的集群(cluster)上,另外,Nutch 有很高的抓取質量,你可以配置哪些頁面更重要,優先抓取,擁有豐富的APIs可以讓你容易的集成Nutch 到你的應用中(可擴展性),更重要的一點是,Nutch 的內建組件,超鏈數據庫(LinkDatabase),擁有該組件,可以大幅的提高搜索結果的關聯度,Nutch 在被抓取的頁面之間跟蹤超鏈接,以便依靠內部鏈接來判斷頁面和頁面之間的相關度。

Solr

Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-serviceAPI接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。Solr是基於Lucene的全文搜索服務器,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM