版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年西安西北有色物化探總隊有限公司招聘備考題庫含答案詳解
- 養(yǎng)老院環(huán)境衛(wèi)生與消毒制度
- 2026年攀枝花市西區(qū)財政局關(guān)于面向社會公開招聘人員的備考題庫帶答案詳解
- 2026年石晶光電招聘23人備考題庫附答案詳解
- 2026年航天時代低空科技有限公司招聘行政人員勞務(wù)派遣崗位備考題庫及一套完整答案詳解
- 2026年雅安市人民醫(yī)院四川大學(xué)華西醫(yī)院雅安醫(yī)院 小兒外科、健康管理中心醫(yī)師招聘備考題庫及一套參考答案詳解
- 天津中醫(yī)藥大學(xué)第二附屬醫(yī)院2026年第一批公開招聘備考題庫(博士及高級職稱醫(yī)療人員)帶答案詳解
- 2026年蘇州交投鑫能交通科技有限公司公開招聘備考題庫及答案詳解1套
- 2026年橫琴粵澳深度合作區(qū)首都師范大學(xué)子期實驗小學(xué)招聘備考題庫參考答案詳解
- 2026年部分大??蓤蟛幌迣I(yè)武漢大學(xué)人民醫(yī)院招聘7人備考題庫含答案詳解
- (2025年)四川省自貢市紀(jì)委監(jiān)委公開遴選公務(wù)員筆試試題及答案解析
- 2025年度骨科護理部年終工作總結(jié)及工作計劃
- 2026安徽省農(nóng)村信用社聯(lián)合社面向社會招聘農(nóng)商銀行高級管理人員參考考試試題及答案解析
- 巖板采購合同范本
- popchrio歐可芮小紅書營銷方案
- (零模)2026屆廣州市高三年級調(diào)研測試英語試卷(含答案解析)
- 透析病人遠期并發(fā)癥及管理
- 2025陜西西安財金投資管理限公司招聘27人易考易錯模擬試題(共500題)試卷后附參考答案
- 放射科X線胸片診斷技術(shù)要點
- 配網(wǎng)工程安全管理培訓(xùn)課件
- 2025年江西電力職業(yè)技術(shù)學(xué)院單招考試文化素質(zhì)物理通關(guān)題庫附答案詳解【綜合題】
評論
0/150
提交評論