技術(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頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 1引言目的通過對系統(tǒng)整體架構(gòu)和技術(shù)規(guī)范的描述,為下一步大規(guī)模設(shè)計開發(fā)提供基礎(chǔ)和規(guī)范對象與范項目管理人員,開發(fā)人員,測試人員。概述系統(tǒng)一期,以實現(xiàn)功能為主,效率性能為輔,但設(shè)計兼顧未來性能的擴展,以減少未來重構(gòu)的工作量。webapp按邏輯分為兩層,第一層用戶服務(wù)接入,第二層內(nèi)部服務(wù)。第一層一期不分模塊,以二級目錄形式表示不同模塊,第二層根據(jù)不同服務(wù)分模塊,第一層和第二層之間使用hessian通信。第一層和第二層獨立部署,第二層的不同模塊也可以獨立部署。下一期考慮第一層分模塊的二級域名獨立部署,并實現(xiàn)單點登錄。webapp采用集群負載均衡,數(shù)據(jù)庫采用負載均衡和讀寫分離,以滿足一定的性能需求。文檔

2、描述了各層結(jié)構(gòu)和模塊使用的技術(shù)和框架。最后描述了開發(fā)的規(guī)范和用到的開發(fā)工具。文檔只是描述了一期的架構(gòu),2系統(tǒng)架構(gòu)圖一期系統(tǒng)架構(gòu)如下HeHeWSSmtp數(shù)據(jù)庫讀寫分離,負載均衡(Amoeba)httpJDBC負載均衡,動靜分離(nginx)動態(tài)求JDBCDBC靜態(tài)請求*rmi緩存同步文件存取1hessian*Uhttpapi支付(lion)物流(antelope)郵件(eagle)短信(pigeon)搜索(dog)對外服務(wù)(camel)進銷存(fox調(diào)用外部(mouse)ssian用戶瀏覽器郵件服務(wù)器物流公司A8系統(tǒng)第三方網(wǎng)站短信平臺銀行,第三方支付網(wǎng)絡(luò)存儲后臺管理系統(tǒng)(hourse)WebAP

3、P(bull)WebAPP(bull)assian管理員瀏覽器nDB(master)DB(salver)DB(salver)DB(salver)DB(salver)3層次和模塊3.1前端負載均衡nginx是一個口碑很好的開源免費WEB服務(wù)器,國內(nèi)很多大型網(wǎng)站都轉(zhuǎn)選nginx平臺,比如騰訊,豆瓣等。Nginx可以實現(xiàn)動靜分離和webapp的負載均衡。3.1.1動靜分離動靜分離可以很好得分擔服務(wù)器的負載,有兩種方式實現(xiàn)動靜分離。1使用2級域名,配置專門的靜態(tài)文件服務(wù)器。利用nginx的url轉(zhuǎn)發(fā)功能,把靜態(tài)請求轉(zhuǎn)發(fā)到靜態(tài)服務(wù)器或在nginx本地處理,動態(tài)請求轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。我們目前部署上采用第二

4、種方式,同時也實現(xiàn)第一種方式。系統(tǒng)可以配置動態(tài)服務(wù)器地址和靜態(tài)服務(wù)器地址,在生成頁面時獲取這兩個地址,對圖片、s腳本、css和靜態(tài)頁面使用靜態(tài)配置生成url,對ajax請求和動態(tài)頁面使用動態(tài)服務(wù)器地址生成url。3.1.2負載均衡nginx可以配置upstream服務(wù)器組,實現(xiàn)組內(nèi)的負載均衡。通過ip_hash的方式把動態(tài)請求轉(zhuǎn)發(fā)到組內(nèi)的某臺服務(wù)器,同時保證客戶端在IP不變的情況下一直訪問同臺服務(wù)器,解決session保持問題。Webapp網(wǎng)站前端,基于j2ee,spring框架開發(fā)。3.2.1頁面展示和控制系統(tǒng)有三種頁面方式。1動態(tài)同步請求,通過velocity模板生成頁面,客戶端刷新整個頁

5、面。ajax異步請求。Ajax異步請求又有三種形式:與velocity模板結(jié)合返回html串;返回json格式;直接返回簡單的字符串。模板生成的純靜態(tài)頁面前臺頁面采用的框架和第三方技術(shù)有:jquery-core(事件處理,ajax請求,頁面刷新)。Jqzoom(圖片放大器)Jquery-validator(輸入驗證)3.2.2權(quán)限安全控制使用apacheshiro框架實現(xiàn)權(quán)限控制。Shiro是一個強大、使用簡單的權(quán)限安全框架。同時Shiro也能與cas單點登錄整合,方便在下一期擴展多個應(yīng)用模塊??蚣馨褭?quán)限系統(tǒng)分成subject(當前用戶),manager(管理所有用戶),realms(權(quán)限數(shù)據(jù)

6、)三層。支持基于實際資源和基于角色的權(quán)限校驗,同時我們擴展shiro的UsernamePasswordToken,Realm實現(xiàn)基于驗證碼和數(shù)據(jù)庫用戶密碼的用戶登錄驗證。在過濾器層,我們暫時只使用shiro的3種類型過濾器控制訪問:AnonymousFilter匿名過濾器任何人可以訪問。AuthenticatingFilter認證過濾器必須通過身份認真才能訪問(跳轉(zhuǎn)到登錄頁面)??梢詫Ξ斍皊ubject直接調(diào)用方法完成判斷是否登錄,登錄,注銷等操作,方便對登錄功能的擴展。3.2.3控制器層采用spring基于注解的控制器,控制器支持velocity視圖返回,ajaxjson返回和ajaxtex

7、t返回。3.2.4數(shù)據(jù)驗證使用和擴展apache的common-validator。3.2.5邏輯層采用spring基于注解的事務(wù)控制。3.2.6數(shù)據(jù)持久層采用ibatis框架,基于sqlmap配置實現(xiàn)數(shù)據(jù)的讀寫,sqlmap配置可以控制底層sql語句,便于數(shù)據(jù)庫的調(diào)優(yōu)。3.2.7緩存的處理使用緩存可以降低與數(shù)據(jù)庫的交互次數(shù),極大提高系統(tǒng)性能。我們采用ehcache緩存框架。用到兩種緩存方式:1頁面緩存:直接在過濾器層對頁面進行緩存處理,在過濾器層就可以返回緩存的頁面,不用轉(zhuǎn)到控制器去處理。對于頁面比較復雜,調(diào)用業(yè)務(wù)邏輯比較多的頁面,采用頁面緩存效果很好,比如首頁。2.基于注解的方法緩存,可以

8、對方法的返回值緩存,存入的參數(shù)可以組成key??梢栽谶壿媽邮褂镁彺?,也可以在持久層試用。對于請求簡單,訪問量大,但修改頻率比較低的數(shù)據(jù)進行緩存可以達到很好的效果。比如商品分類,系統(tǒng)數(shù)據(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自帶分布式緩存復制方式同步緩存。后臺管理系統(tǒng)可以提供刷新緩存功能,管

9、理員在后臺管理系統(tǒng)主動刷新緩存。3.2.8去其他模塊之間的通信通過hessian遠程調(diào)用框架,實現(xiàn)與其他模塊功能之間的通信。Hessian是一個基于http的二進制遠程過程調(diào)用框架,比webservice更高效。與Spring框架很好結(jié)合,開發(fā)簡單。后臺管理系統(tǒng)管理員用來維護網(wǎng)站的系統(tǒng)?;趈2eespring框架。與網(wǎng)站前臺使用到的技術(shù)差不多,現(xiàn)只介紹不同點:3.3.1頁面的展示大部分請求采用頁面刷新的機制。頭部,中部左側(cè)菜單和底部固定不變。中部右側(cè)iframe為主操作區(qū),每次操作刷新頁面。商品描述的編輯需要使用到富文本編輯器,我們采用開源的TinyMCE,TinyMCE在國內(nèi)應(yīng)用比較廣泛。

10、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)的交互?;趈2eespring框架。采用springmvc模式。3.4.1與銀行和其他支付系統(tǒng)的交互需要提供一個Ur丨地址,供銀行在用戶完成支付后回調(diào),通知系統(tǒng)已經(jīng)支付成功。3.4.2與內(nèi)部模塊之間的通信主要來自網(wǎng)站前端的調(diào)用?;趆essian機制。3.5物流模塊支付模塊目前主要功能是調(diào)用物流公司的接口跟蹤物流狀態(tài),隨著系統(tǒng)的

11、不斷發(fā)展,在擁有自己的物流后,可能發(fā)展成一個龐大的系統(tǒng)?;趈2eespring框架。采用springmvc模式?;趆essian機制對外提供遠程效用服務(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ù)?;趆essian機制。3.7短信模塊短信模塊主要用來向客戶發(fā)送短信?;趈2eespring框架。采用springm

12、vc模式。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)庫存的管理?;趈2eespring框架。采用springmvc模式。381Webservice調(diào)用采用spring+xfile框架調(diào)用a8系統(tǒng)webservice。382與內(nèi)部模塊之間的通信為網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù)?;趆essian機制。39搜索模塊為網(wǎng)站提供搜索服務(wù)。包括商品檢索和問答式搜

13、索的問題檢索?;趈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ù)?;趆essian機制。第三方服務(wù)調(diào)用模塊調(diào)用第三方合作服務(wù)商的接口?;趈2eespring框架。采用springmvc模式。Webservice調(diào)用采用spring+xfile框架調(diào)用第三方服務(wù)webservice。與內(nèi)部模塊之間的通信為

14、網(wǎng)站前端和后臺管理系統(tǒng)提供遠程調(diào)用服務(wù)?;趆essian機制。對外服務(wù)接口對外部系統(tǒng)提供webservice接口服務(wù)Webservice服務(wù)采用spring+xfile框架對外提供webservice服務(wù)。與內(nèi)部模塊之間的通信調(diào)用內(nèi)部其他模塊的服務(wù)?;趆essian機制。數(shù)據(jù)庫使用數(shù)據(jù)庫存儲數(shù)據(jù),并使用讀寫分離機制提高數(shù)據(jù)庫性能。數(shù)據(jù)庫讀寫分離我們使用開源的mysql代理Amoeba實現(xiàn)數(shù)據(jù)庫的讀寫分離,把寫請求發(fā)送到主服務(wù)器,讀請求發(fā)送到從服務(wù)器,主從之間通過mysql自帶的復制機制實現(xiàn)數(shù)據(jù)的同步。數(shù)據(jù)庫負載均衡Amoeba支持輪詢和權(quán)重兩種負載均衡機制,我們使用權(quán)重負載機制實現(xiàn)讀服務(wù)器

15、的負載均衡。數(shù)據(jù)庫表引擎的選擇主服務(wù)器必須使用innodb支持事務(wù)的存儲引擎,行級鎖表。而從服務(wù)器可以考慮使用myisam引擎,不支持事務(wù),表級鎖表,具有更高的讀寫效率,但不支持外鍵。主從數(shù)據(jù)庫的差異優(yōu)化主服務(wù)器只需要建立唯一索引和外鍵約束,其它針對對查詢優(yōu)化的索引可以不建立,這要可以提高主服務(wù)器的性能。從服務(wù)器字段使用char而不用varchar,沒有varchar,text,blob字段的表是靜態(tài)表,反之是動態(tài)表,靜態(tài)表的檢索效率要比動態(tài)表好若干倍。4工程命名工程以動物命名,結(jié)合了各種動物特征與我們各工程的職責公共接口工具magpie(喜鵲)網(wǎng)站前臺服務(wù)bull(公牛)物流cheetah(

16、獵豹)支付lion(獅子)進銷存接口fox(狐貍)搜索dog(狗)郵件eagle(鷹)短信pigeon(鴿子)后臺管理horse(馬)調(diào)用第三方合作接口mouse(老鼠)對外服務(wù)接口camel(駱駝)5工程規(guī)范5.1工程目錄結(jié)構(gòu)src源碼WebContentWEN-INFlibjar包config配置文件views視圖模板layout布局模板screen頁面模板各模塊common公共的styles樣式文件resources資源文件scriptsjs文件common公共js各模塊,各開源js項目5.2包結(jié)構(gòu)包命名基本原則:小寫字母開頭,如果有多個單詞,除第一個單詞之外的單詞首字母大寫5.2.1公

17、共工具接口工程公共工具:各層的公共基類:下的各子包遠程調(diào)用公共dto:提供服務(wù)的工程名.remoting.dto.業(yè)務(wù)子模塊遠程調(diào)用公共接口:提供服務(wù)的工程名.業(yè)務(wù)子模塊第三方開源包的擴展:第三方開源包名5.2.2各模塊工程數(shù)據(jù)對象:工程名.domain.業(yè)務(wù)子模塊持久層dao接口:工程名.dao業(yè)務(wù)子模塊持久層dao接口實現(xiàn):工程名.dao業(yè)務(wù)子模塊持久層框架名(ibatis)持久層sqlmap:工程名.dbMap.業(yè)務(wù)子模塊數(shù)據(jù)庫類型(mysql)業(yè)務(wù)邏輯接口:工程名.service.業(yè)務(wù)子模塊業(yè)務(wù)邏輯實現(xiàn):工程名.service業(yè)務(wù)子模塊.implWeb控制器action:com.工程名

18、.業(yè)務(wù)子模塊Web驗證器:com.工程名.業(yè)務(wù)子模塊Web過濾器:com.工程名.工具:工程名.util遠程調(diào)用接口實現(xiàn):工程名業(yè)務(wù)子模塊.impl5.3類、接口命名類命名基本原則:首字母大寫,多個單詞的首字母大寫接口命名基本原則:以大寫字母I開頭,如果有多個單詞,每個單詞頭字母大寫I數(shù)據(jù)對象:數(shù)據(jù)庫表名.javaDao接口:1+數(shù)據(jù)對象名+dao實現(xiàn):數(shù)據(jù)對象名+Dao+框架名(Ibatis).javasqlmap:數(shù)據(jù)對象名.xml業(yè)務(wù)邏輯接口:1+數(shù)據(jù)對象名+業(yè)務(wù)邏輯實現(xiàn):數(shù)據(jù)對象名+Webaction:domain名+Webvalidator:domain名+Dto:*遠程調(diào)用接口:1+數(shù)據(jù)對象名+遠程調(diào)用實現(xiàn):數(shù)據(jù)對象名+5.4變量和方法命名類變量、局部變量命名規(guī)范:變量名首字母必須小寫,如果該變量名有多個單詞組成,后面的單詞首字母大寫單詞與單詞之間不要使用_做連接。類常量命名規(guī)范:所有字母大寫,如果有多個單詞組成,單詞與單詞之間以_隔開。而且該變量必須是公共、靜態(tài)、final類型。方法命名規(guī)范:方法名首字母必須小寫,

溫馨提示

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

評論

0/150

提交評論