技術(shù)架構(gòu)規(guī)范_第1頁
技術(shù)架構(gòu)規(guī)范_第2頁
技術(shù)架構(gòu)規(guī)范_第3頁
技術(shù)架構(gòu)規(guī)范_第4頁
技術(shù)架構(gòu)規(guī)范_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1引言

1.1目的

通過對系統(tǒng)整體架構(gòu)和技術(shù)規(guī)范的描述,為下一步大規(guī)模設(shè)計開發(fā)提供基礎(chǔ)和規(guī)范。

1.2對象與范圍

項目管理人員,開發(fā)人員,測試人員。

1.3概述

系統(tǒng)一期,以實現(xiàn)功能為主,效率性能為輔,但設(shè)計兼顧未來性能的擴展,以減少未來重構(gòu)的工作量。

webapp按邏輯分為兩層,第一層用戶服務(wù)接入,第二層內(nèi)部服務(wù)。第一層一期不分模塊,以二級目

錄形式表本不同模塊,第二層根據(jù)不同服務(wù)分模塊,第一層和第二層之間使用hessian通信。

第一層和第二層獨立部署,第二層的不同模塊也可以獨立部署。

下一期考慮第一層分模塊的二級域名獨立部署,并實現(xiàn)單點登錄.

webapp采用集群負(fù)載均衡,數(shù)據(jù)庫采用負(fù)載均衡和讀寫分離,以滿足一定的性能需求。

文檔描述了各層結(jié)構(gòu)和模塊使用的技術(shù)和框架。最后描述了開發(fā)的規(guī)范和用到的開發(fā)工具.

文檔只是描述了一期的架構(gòu),

2系統(tǒng)架構(gòu)圖

一期系統(tǒng)架構(gòu)如下

用戶瀏覽器

ftt.

負(fù)載均衡,動靜分離<nginx)

網(wǎng)絡(luò)存儲

習(xí)態(tài)1*i

管理員瀏覽

后臺管理系統(tǒng)http

ssian(hours?)器

數(shù)據(jù)庫讀寫分肉,負(fù)載均衡(A?oeba)

3層次和模塊

3.1前端負(fù)載均衡

riginx是一個口碑很好的開源免費WEB服務(wù)器,國內(nèi)很多大型網(wǎng)站都轉(zhuǎn)選nginx平臺,比如騰訊,

豆瓣等。Nginx可以實現(xiàn)動靜分離和webapp的負(fù)載均衡。

3.1.1動靜分離

動靜分離可以很好得分擔(dān)服務(wù)器的負(fù)載,有兩種方式實現(xiàn)動靜分離。

1.使用2級域名,配置專門的靜態(tài)文件服務(wù)器。

2.利用nginx的urI轉(zhuǎn)發(fā)功能,把靜態(tài)請求轉(zhuǎn)發(fā)到靜態(tài)服務(wù)器或在nginx本地處理,動態(tài)請求

轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器.

我們目前部署上采用第二種方式,同時也實現(xiàn)第一種方式。系統(tǒng)可以配置動態(tài)服務(wù)器地址和靜態(tài)服務(wù)

器地址,在生成頁面時獲取這兩個地址,對圖片、js腳本、css和靜態(tài)頁面使用靜態(tài)配置生成urI,對ajax

請求和動態(tài)頁面使用動態(tài)服務(wù)器地址生成url.

3.1.2負(fù)載均衡

nginx可以配置upstream服務(wù)器組,實現(xiàn)組內(nèi)的負(fù)載均衡。通過ip_hash的方式把動態(tài)請求轉(zhuǎn)發(fā)到

組內(nèi)的某臺服務(wù)器,同時保證客戶端在IP不變的情況下一直訪問同一臺服務(wù)器,解決session保持問題。

3.2Webapp

網(wǎng)站前端,基于j2ee,spring框架開發(fā)。

3.2.1頁面展示和控制

系統(tǒng)有三種頁面方式。

1.動態(tài)同步請求,通過velocity模板生成頁面,客戶端刷新整個頁面.

2.ajax異步請求.Ajax異步請求又有三種形式:與velocity模板結(jié)合返回html串;返回json格式;

直接返回簡單的字符串。

3.模板生成的純靜態(tài)頁面

前臺頁面采用的框架和第三方技術(shù)有:

1.jquery-core(事件處理,ajax請求,頁面刷新...)。

2.Jqzoom(圖片放大器)

3.Jquery—vaIidator(輸入驗證)

3.2.2權(quán)限安全控制

使用apacheshiro框架實現(xiàn)權(quán)限控制。Shiro是一個強大、使用簡單的權(quán)限安全框架.同時Shiro也

能與cas單點登錄整合,方便在下一期擴展多個應(yīng)用模塊.

框架把權(quán)限系統(tǒng)分成subject(當(dāng)前用戶),manager(管理所有用戶),reaIms(權(quán)限數(shù)據(jù))三層.支

持基于實除資源和基于角色的權(quán)限校臉,同時

我們擴展shiro的UsernamePasswordToken,Realm實現(xiàn)基于驗證碼和數(shù)據(jù)庫用戶密碼的用戶登錄驗證.

在過濾器層,我們暫時只使用shiro的3種類型過濾器控制訪問:

1.AnonymousFiIter匿名過濾?器任何人可以訪問。

2.AuthenticatingFiIter認(rèn)證過濾器必須通過身粉認(rèn)真才能訪問(跳轉(zhuǎn)到登錄頁面)。

可以對當(dāng)前subject直接調(diào)用方法完成判斷是否登錄,登錄,注銷等操作,方便對疊錄功能的擴展。

3.2.3控制器層

采用spring基于注解的控制器,控制器支持velocity視圖返回,ajaxjson返回和ajaxtext返回。

3.2.4數(shù)據(jù)驗證

彳吏用不口擴展apache的common——vaIidatoro

3.2.5邏輯層

采用spring基于注解的事務(wù)控制o

3.2.6數(shù)據(jù)持久層

采用ibatis框架,基于sqlmap配置實現(xiàn)數(shù)據(jù)的讀寫,sqImap配置可以控制底層sqI語句,便于數(shù)

據(jù)庫的調(diào)優(yōu)。

3.2.7緩存的處理

使用緩存可以降低與數(shù)據(jù)庫的交互次數(shù),極大提高系統(tǒng)性能.我們采用ehcache緩存框架。用到兩種緩存

方式:

1.頁面緩存:直接在過濾器層對頁面進行緩存處理,在過濾器層就可以返回緩存的頁面,不用轉(zhuǎn)到控

制器去處理。對于頁面比較復(fù)雜,調(diào)用業(yè)務(wù)邏輯比較多的頁面,采用頁面緩存效果很好,比如首頁.

2.基于注解的方法輟存,可以對方法的返回值輟存,存入的參數(shù)可以組成key??梢栽谶壿媽邮褂镁彺妫?/p>

也可以在持久層試用.對于請求簡單,訪問量大,但修改頻率比較低的數(shù)據(jù)進行緩存可以達到很好的

效果.比如商品分類,系統(tǒng)教據(jù)字典,地區(qū)等數(shù)據(jù).

Ehcache支持分布式緩存,ehcache支持服務(wù)器之間通過rmi調(diào)用保持所有服務(wù)器之間諼存同步.

緩存的兩種過期機制:

1.定時過期,直接通過ehcache的配置確定緩存過期頻率。

2.主動通知,管理員在后臺系統(tǒng)進行某些操作后,通過hessian遠程調(diào)用通知應(yīng)用服務(wù)器緩存過期。

只需通知一臺應(yīng)用服務(wù)器,應(yīng)用服務(wù)器之間通過ehcache自帶分布式緩存復(fù)制方式同步緩存。

后臺管理系統(tǒng)可以提供刷新緩存功能,管理員在后臺管理系統(tǒng)主動刷新緩存.

3.2.8去其他模塊之間的通信

通過hessian遠程調(diào)用框架,實現(xiàn)與其他模塊功能之間的通信。

Hessian是一個基于http的二進制遠程過程調(diào)用框架,比webservice更高效。與Spring框架很好結(jié)合,

開發(fā)簡單.

3.3后臺管理系統(tǒng)

管理員用來維護網(wǎng)站的系統(tǒng)。基于j2eespring框架。與網(wǎng)站前臺使用到的技術(shù)差不多,現(xiàn)只介紹不

同點:

3.3.1頁面的展示

大部分請求采用頁面刷新的機制。

頭部,中部左側(cè)菜單和底部固定不變。中部右側(cè)iframe為主操作區(qū),每次操作刷新頁面。

商品描述的編輯需要使用到富文本編輯器,我們采用開源的TinyMCE,TinyMCE在國內(nèi)應(yīng)用比較廣泛.

3.3.2緩存機制

后臺系統(tǒng)訪問不是很頻繁,同事管理員需要的是實時的數(shù)據(jù),所以后臺管理系統(tǒng)不對數(shù)據(jù)進行緩存。

3.3.3權(quán)限管理

采用spingsecurity框架進行權(quán)限的控制,基于用戶、角色和資源的授權(quán)機制.

3.4支付模塊:

支付模塊主要功能是訂單的管理,與銀行等支付系統(tǒng)的交互.基于j2eespring框架。采用springmvc

模式.

3.4.1與銀行和其他支付系統(tǒng)的交互

需要提供一個Url地址,供銀行在用戶完成支付后回調(diào),通知系統(tǒng)已經(jīng)支付成功。

3.4.2與內(nèi)部模塊之間的通信

主要來自網(wǎng)站前端的調(diào)用?;趆essian機制.

3.5物流模塊

支付模塊目前主要功能是調(diào)用物流公司的接口跟蹤物流狀態(tài),隨著系統(tǒng)的不斷發(fā)展,在擁有自己的物流

后,可能發(fā)展成一個龐大的系統(tǒng)?;趈2eespring框架。采用springmvc模式。基于hessian機制對

外提供遠程效用服務(wù)。

3.6郵件模塊

郵件模塊主要用來向客戶發(fā)送郵件.基于j2eespring框架。采用springmvc模式。

3.6.1郵件發(fā)送

使用javamaiI包發(fā)送郵件,支持以固定模板發(fā)送郵件。

3.6.2定時發(fā)送

使用spring+quartz框架實現(xiàn)定時任務(wù)發(fā)送郵件。

3.6.3與內(nèi)部模塊之間的通信

為網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù).基于hessian機制。

3.7短信模塊

短信模塊主要用來向客戶發(fā)送短信.基于j2eespring框架。采用springmvc模式。

3.7.1郵件發(fā)送

調(diào)用短信設(shè)備api發(fā)送短信,支持以固定模板發(fā)送短信。

3.7.2定時發(fā)送

使用spring+quartz框架實現(xiàn)定時任務(wù)發(fā)送短信。

3.7.3與內(nèi)部模塊之間的通信

為網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù)?;趆essian機制.

3.8進銷存模塊

調(diào)用A8系統(tǒng)接口,實現(xiàn)庫存的管理。基于j2eespring框架。采用springmvc模式。

3.8.1Webservice調(diào)用

采用spring+xfiIe框架調(diào)用a8系統(tǒng)webservice。

3.8.2與內(nèi)部模塊之間的通信

為網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù)。基于hessian機制。

3.9搜索模塊

為網(wǎng)站提供搜索服務(wù)。包括商品檢索和問答式搜索的問題檢索?;趈2eespring框架。采用springmvc

模式。

3.9.1檢索框架

我們使用國產(chǎn)開源coreSeek搜索引擎,基于俄國開源項目Sphinx研發(fā)并獨立開發(fā)的搜索引擎。自帶

中文分詞器mmseg,有大量中文文檔.提供JAVAAPI。索引建立效率高并且與業(yè)務(wù)無關(guān)。在國內(nèi)有大量成

功案例。

3.9.2與內(nèi)部模塊之間的通信

為網(wǎng)站前端提供遠程調(diào)用服務(wù).基于hessian機制.

3.10第三方服務(wù)調(diào)用模塊

調(diào)用第三方合作服務(wù)商的接口?;趈2eespring框架.采用springmvc模式。

3.10.1Webservice調(diào)用

采用spring+xfiIe框架調(diào)用第三方服務(wù)webserviceo

3.10.2與內(nèi)部模塊之間的通信

為網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù)?;趆essian機制。

3.11對外服務(wù)接口

對外部系統(tǒng)提供webservice接口服務(wù)

3.11.1Webservice服務(wù)

采用spring+xfiIe框架對外提供webservice服務(wù)。

3.11.2與內(nèi)部模塊之間的通信

調(diào)用內(nèi)部其他模塊的服務(wù)。基于hessian機制。

3.12數(shù)據(jù)庫

使用mysq15.5數(shù)據(jù)庫存儲數(shù)據(jù),并使用讀寫分離機制提高數(shù)據(jù)庫性能。

3.12.1數(shù)據(jù)庫讀寫分離

我們使用開源的mysql代理Amoeba實現(xiàn)數(shù)據(jù)庫的讀寫分離,把寫請求發(fā)送到主服務(wù)器,讀請求發(fā)送到從

服務(wù)器,主從之間通過mysql自帶的復(fù)制機制實現(xiàn)數(shù)據(jù)的同步。

3?12.2數(shù)據(jù)庫負(fù)載均衡

Amoeba支持輪詢和權(quán)重兩種負(fù)載均衡機制,我們使用權(quán)重負(fù)載機制實現(xiàn)讀服務(wù)器的負(fù)載均衡。

3?12.3數(shù)據(jù)庫表引擎的選擇

主服務(wù)器必須使用innodb支持事務(wù)的存儲引擎,行級鎖表.而從服務(wù)器可以考慮使用myisam引擎,不

支措事務(wù),表級鎖表,具有更高的讀寫效率,但不支持外健。

3.12.4主從數(shù)據(jù)庫的差異優(yōu)化

主服務(wù)器只需要建立唯一索引和外鍵約束,其它針對對查詢優(yōu)化的索引可以不建立,這要可以提高主服

務(wù)器的性能。

從服務(wù)器字段使用char而不用varchar,沒有varchar,text,blob字段的表是靜態(tài)表,反之是動態(tài)表,

靜態(tài)表的檢索效率要比動態(tài)表好若干倍。

4工程命名

工程以動物命名,結(jié)合了各種動物特征與我們各工程的職責(zé):

公共接口工具magpie(喜鵲)

網(wǎng)站前臺服務(wù)bulI(公牛)

物流cheetah(獵豹)

支付Iion(獅子)

進銷存接口fox(狐貍)

搜索dog(狗)

郵件eagle(鷹)

短信pigeon(鴿子)

后臺管理horse(馬)

調(diào)用第三方合作接口mouse(老鼠)

對外服務(wù)接口camel(駱駝)

5工程規(guī)范

5.1工程目錄結(jié)構(gòu)

src源碼

WebContent

WEN—INF

Iibjar包

config配置文件

views視圖模板

Iayout布局模板

screen頁面模板

……各模塊

common公共的

styIes樣式文件

resources資源文件

scriptsjs文件

common公共js

……各模塊,各開源js項目

5.2包結(jié)構(gòu)

包命名基本原則:小寫字母開頭,如果有多個單詞,除第一個單詞之外的單詞首字母大寫

5.2.1公共工具接口工程

公共工具:com.zjdelai.emal10common.utiI

各層的公共基類:com.zjdelai.emaIIocommon下的各子包

遠程調(diào)用公共dto:com.zjdelai.emaII.提供服務(wù)的工程名。remoting.dto.業(yè)務(wù)子模塊

遠程調(diào)用公共接口:com.zjdelai.emaI10提供服務(wù)的工程名.remoting。interfaces.業(yè)務(wù)子模塊

第三方開源包的擴展:com.zjdelai.emaII.common.第三方開源包名

5.2.2各模塊工程

數(shù)據(jù)對象:com.zjdeIai.emaII.工程名。domain.業(yè)務(wù)子模塊

持久層dao接口:com.deIaioemaIIo工程名。daoo業(yè)務(wù)子模塊

持久層dao接口實現(xiàn):coniozjdeIai<>emaI10工程名。daoo業(yè)務(wù)子模塊.持久層框架名(ibatis)

持久層sqlmap:com。zjdelai.emalIo工程名.dbMap.業(yè)務(wù)子模塊.數(shù)據(jù)庫類型(mysql)

業(yè)務(wù)邏輯接口:com。zjdelai(>emaII.工程名.service。業(yè)務(wù)子模塊

業(yè)務(wù)邏輯實現(xiàn):com。zjdelai.emal10工程名.service。業(yè)務(wù)子模塊。impI

Web控制器action:com.zjdelai.emaII0工程名.web。action.業(yè)務(wù)子模塊

Web驗1證器:com.zjdeIai.emalI.工程名。web。validator。業(yè)務(wù)子模塊

Web過濾器:com.zjdelai.emalIo工程名.web.fiIter

工具:com.zjdeIaiQemaIIw工程名.util

遠程調(diào)用接口實現(xiàn):com.zjdelaioemalI.工程名.remotingointerfaces.業(yè)務(wù)子模塊。impI

5.3類、接口命名

類命名基本原則:首字母大寫,多個單詞的首字母大寫

接口命名基本原則:以大寫字母"I"開頭,如果有多個單詞,每個單詞頭字母大寫?

數(shù)據(jù)對象:數(shù)據(jù)庫表名。java

Dao接口:1+數(shù)據(jù)對象名+Dao.java

dao實現(xiàn):數(shù)據(jù)對象名+Dao+框架名(Ibatis)。java

sqImap:數(shù)據(jù)對象名。xml

業(yè)務(wù)邏辯接口:1+數(shù)據(jù)對象名+Manager.java

業(yè)務(wù)邏輯實現(xiàn):數(shù)據(jù)對象名+ManagerImpI.java

Webaction:domain>&+Action.java

WebvaIidator:domain名+Validator。java

Dto:**java

遠程調(diào)用接口:1+數(shù)據(jù)對象名+Sercice.java

遠程調(diào)用實現(xiàn):數(shù)據(jù)對象名+Sercicelmpl.java

5.4變量和方法命名

類變量、局部變量命名規(guī)范:

變量名首字母必須小寫,如果該變量名有多個單詞組成,后面的單詞首字母大寫,單詞與單詞之間不

要使用['做連接。

類常量命名規(guī)范:

所有字母大寫,如果有多個單詞組成,單詞與單詞之間以隔開。而且該變量必須是公共、靜

溫馨提示

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

最新文檔

評論

0/150

提交評論