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

下載本文檔

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

文檔簡(jiǎn)介

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

2、定 的性能需求。文檔描述了各層結(jié)構(gòu)和模塊使用的技術(shù)和框架。最后描述了開(kāi)發(fā)的規(guī)范和 用到的開(kāi)發(fā)工具。文檔只是描述了一期的架構(gòu),系統(tǒng)架構(gòu)圖一期系統(tǒng)架構(gòu)如下層次和模塊前端負(fù)載均衡nginx是一個(gè)口碑很好的開(kāi)源免費(fèi) WEB服務(wù)器,國(guó)內(nèi)很多大型網(wǎng)站都轉(zhuǎn)選 nginx平臺(tái),比如騰訊,豆瓣等。Nginx可以實(shí)現(xiàn)動(dòng)靜分離和 web app的負(fù)載均 衡。1.1.1動(dòng)靜分離動(dòng)靜分離可以很好得分擔(dān)服務(wù)器的負(fù)載,有兩種方式實(shí)現(xiàn)動(dòng)靜分離。1使用 2 級(jí)域名,配置專門的靜態(tài)文件服務(wù)器。2利用 nginx 的 url 轉(zhuǎn)發(fā)功能,把靜態(tài)請(qǐng)求轉(zhuǎn)發(fā)到靜態(tài)服務(wù)器或在 nginx 本 地處理,動(dòng)態(tài)請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。我們目前部署上

3、采用第二種方式,同時(shí)也實(shí)現(xiàn)第一種方式。系統(tǒng)可以配置 動(dòng)態(tài)服務(wù)器地址和靜態(tài)服務(wù)器地址,在生成頁(yè)面時(shí)獲取這兩個(gè)地址,對(duì)圖片、 js 腳本、css和靜態(tài)頁(yè)面使用靜態(tài)配置生成 url,對(duì)ajax請(qǐng)求和動(dòng)態(tài)頁(yè)面使用動(dòng)態(tài) 服務(wù)器地址生成 url。1.1.2負(fù)載均衡nginx可以配置upstream服務(wù)器組,實(shí)現(xiàn)組內(nèi)的負(fù)載均衡。通過(guò)ip_hash的方式把動(dòng)態(tài)請(qǐng)求轉(zhuǎn)發(fā)到組內(nèi)的某臺(tái)服務(wù)器,同時(shí)保證客戶端在IP不變的情況下一直訪問(wèn)同一臺(tái)服務(wù)器,解決 session保持問(wèn)題。Web app網(wǎng)站前端,基于 j2ee, spring 框架開(kāi)發(fā)。 1.1.3 頁(yè)面展示和控制系統(tǒng)有三種頁(yè)面方式。1動(dòng)態(tài)同步請(qǐng)求,通過(guò) vel

4、ocity 模板生成頁(yè)面,客戶端刷新整個(gè)頁(yè)面。2. ajax異步請(qǐng)求。Ajax異步請(qǐng)求又有三種形式:與 velocity模板結(jié)合返回 html 串;返回 json 格式;直接返回簡(jiǎn)單的字符串。3. 模板生成的純靜態(tài)頁(yè)面前臺(tái)頁(yè)面采用的框架和第三方技術(shù)有:1. jquery-core (事件處理,ajax請(qǐng)求,頁(yè)面刷新)。2. Jqzoom (圖片放大器)3. Jquery-validator (輸入驗(yàn)證)1.1.4 權(quán)限安全控制使用apacheshiro框架實(shí)現(xiàn)權(quán)限控制。Shiro是一個(gè)強(qiáng)大、使用簡(jiǎn)單的權(quán)限安 全框架。同時(shí)Shiro也能與cas單點(diǎn)登錄整合,方便在下一期擴(kuò)展多個(gè)應(yīng)用模 塊。框架把

5、權(quán)限系統(tǒng)分成subject (當(dāng)前用戶),manager(管理所有用戶), realms(權(quán)限數(shù)據(jù))三層。支持基于實(shí)際資源和基于角色的權(quán)限校驗(yàn),同時(shí)我們擴(kuò)展shiro的UsernamePasswordToken Realm實(shí)現(xiàn)基于驗(yàn)證碼和數(shù)據(jù) 庫(kù)用戶密碼的用戶登錄在過(guò)濾器層,我們暫時(shí)只使用shiro的3種類型過(guò)濾器控制訪問(wèn):1. AnonymousFilter?匿名過(guò)濾器任何人可以訪問(wèn)。2. AuthenticatingFilter 認(rèn)證過(guò)濾器必須通過(guò)身份認(rèn)真才能訪問(wèn)(跳轉(zhuǎn)到登 錄頁(yè)面)??梢詫?duì)當(dāng)前subject直接調(diào)用方法完成判斷是否登錄,登錄,注銷等操作, 方便對(duì)登錄功能的驗(yàn)證。擴(kuò)展。1.

6、1.5 控制器層采用spring基于注解的控制器,控制器支持 velocity視圖返回,ajaxjson返 回和 ajaxtext 返回。1.1.6 數(shù)據(jù)驗(yàn)證使用和擴(kuò)展 apache 的 common-validator 。1.1.7 邏輯層采用spring基于注解的事務(wù)控制。1.1.8數(shù)據(jù)持久層采用ibatis框架,基于sqlmap配置實(shí)現(xiàn)數(shù)據(jù)的讀寫,sqlmap配置可以控制 底層 sql 語(yǔ)句,便于數(shù)據(jù)庫(kù)的調(diào)優(yōu)。1.1.9 緩存的處理使用緩存可以降低與數(shù)據(jù)庫(kù)的交互次數(shù),極大提高系統(tǒng)性能。我們采用 ehcache緩存框架。用到兩種緩存方式:1 頁(yè)面緩存:直接在過(guò)濾器層對(duì)頁(yè)面進(jìn)行緩存處理,在過(guò)

7、濾器層就可以返 回緩存的頁(yè)面,不用轉(zhuǎn)到控制器去處理。對(duì)于頁(yè)面比較復(fù)雜,調(diào)用業(yè)務(wù)邏輯比 較多的頁(yè)面,采用頁(yè)面緩存效果很好,比如首頁(yè)。2基于注解的方法緩存,可以對(duì)方法的返回值緩存,存入的參數(shù)可以組成 key??梢栽谶壿媽邮褂镁彺?,也可以在持久層試用。對(duì)于請(qǐng)求簡(jiǎn)單,訪問(wèn)量 大,但修改頻率比較低的數(shù)據(jù)進(jìn)行緩存可以達(dá)到很好的效果。比如商品分類, 系統(tǒng)數(shù)據(jù)字典,地區(qū)等數(shù)據(jù)。Ehcache支持分布式緩存,ehcache支持服務(wù)器之間通過(guò)rmi調(diào)用保持所有 服務(wù)器之間緩存同步。緩存的兩種過(guò)期機(jī)制:1. 定時(shí)過(guò)期,直接通過(guò)ehcache的配置確定緩存過(guò)期頻率。2. 主動(dòng)通知,管理員在后臺(tái)系統(tǒng)進(jìn)行某些操作后,通過(guò)

8、hessian遠(yuǎn)程調(diào)用 通知應(yīng)用服務(wù)器緩存過(guò)期。只需通知一臺(tái)應(yīng)用服務(wù)器,應(yīng)用服務(wù)器之間通過(guò) ehcache自帶分布式緩存復(fù)制方式同步緩存。后臺(tái)管理系統(tǒng)可以提供刷新緩存功能,管理員在后臺(tái)管理系統(tǒng)主動(dòng)刷新緩 存。1.1.10 去其他模塊之間的通信通過(guò)hessian遠(yuǎn)程調(diào)用框架,實(shí)現(xiàn)與其他模塊功能之間的通信Hessian是一個(gè)基于http的二進(jìn)制遠(yuǎn)程過(guò)程調(diào)用框架,比 webservice更高 效。與 Spring 框架很好結(jié)合,開(kāi)發(fā)簡(jiǎn)單。后臺(tái)管理系統(tǒng)管理員用來(lái)維護(hù)網(wǎng)站的系統(tǒng)?;趈2ee spring框架。與網(wǎng)站前臺(tái)使用到的 技術(shù)差不多,現(xiàn)只介紹不同點(diǎn):1.1.11 頁(yè)面的展示大部分請(qǐng)求采用頁(yè)面刷新

9、的機(jī)制。頭部,中部左側(cè)菜單和底部固定不變。中部右側(cè) iframe 為主操作區(qū),每次 操作刷新頁(yè)面。商品描述的編輯需要使用到富文本編輯器,我們采用開(kāi)源的TinyMCE,Tin yMCE在國(guó)內(nèi)應(yīng)用比較廣泛。1.1.12緩存機(jī)制后臺(tái)系統(tǒng)訪問(wèn)不是很頻繁,同事管理員需要的是實(shí)時(shí)的數(shù)據(jù),所以后臺(tái)管 理系統(tǒng)不對(duì)數(shù)據(jù)進(jìn)行緩存。1.1.13 權(quán)限管理采用sping security框架進(jìn)行權(quán)限的控制,基于用戶、角色和資源的授權(quán)機(jī) 制。支付模塊:支付模塊主要功能是訂單的管理,與銀行等支付系統(tǒng)的交互。基于 j2eespring 框架。采用 springmvc模式。1.1.14 與銀行和其他支付系統(tǒng)的交互需要提供一個(gè)

10、 Url 地址,供銀行在用戶完成支付后回調(diào),通知系統(tǒng)已經(jīng)支付 成功。1.1.15 與內(nèi)部模塊之間的通信主要來(lái)自網(wǎng)站前端的調(diào)用?;?hessian 機(jī)制。物流模塊支付模塊目前主要功能是調(diào)用物流公司的接口跟蹤物流狀態(tài),隨著系統(tǒng)的 不斷發(fā)展,在擁有自己的物流后,可能發(fā)展成一個(gè)龐大的系統(tǒng)?;?j2eespring 框架。采用springmvc模式?;趆essian機(jī)制對(duì)外提供遠(yuǎn)程效用服務(wù)。郵件模塊郵件模塊主要用來(lái)向客戶發(fā)送郵件。基于 j2ee spring 框架。采用 spring mvc 模式。1.1.16 郵件發(fā)送使用 java mail 包發(fā)送郵件,支持以固定模板發(fā)送郵件。1.1.17 定

11、時(shí)發(fā)送使用 spring+quartz 框架實(shí)現(xiàn)定時(shí)任務(wù)發(fā)送郵件。1.1.18 與內(nèi)部模塊之間的通信為網(wǎng)站前端和后臺(tái)管理系統(tǒng)提供遠(yuǎn)程調(diào)用服務(wù)。基于hessian機(jī)制。短信模塊短信模塊主要用來(lái)向客戶發(fā)送短信。基于 j2ee spring 框架。采用 spring mvc 模式。 1.1.19 郵件發(fā)送調(diào)用短信設(shè)備 api 發(fā)送短信,支持以固定模板發(fā)送短信。1.1.20 定時(shí)發(fā)送使用 spring+quartz 框架實(shí)現(xiàn)定時(shí)任務(wù)發(fā)送短信。1.1.21 與內(nèi)部模塊之間的通信為網(wǎng)站前端和后臺(tái)管理系統(tǒng)提供遠(yuǎn)程調(diào)用服務(wù)?;?hessian 機(jī)制進(jìn)銷存模塊調(diào)用A8系統(tǒng)接口,實(shí)現(xiàn)庫(kù)存的管理?;趈2ee s

12、pring框架。采用spring mvc 模式。1.1.22Web service 調(diào)用采用 spring+xfile 框架調(diào)用 a8 系統(tǒng) webservice。1.1.23 與內(nèi)部模塊之間的通信為網(wǎng)站前端和后臺(tái)管理系統(tǒng)提供遠(yuǎn)程調(diào)用服務(wù)?;趆essian機(jī)制。搜索模塊為網(wǎng)站提供搜索服務(wù)。包括商品檢索和問(wèn)答式搜索的問(wèn)題檢索?;?j2eespring 框架。采用 springmvc模式。1.1.24 檢索框架我們使用國(guó)產(chǎn)開(kāi)源coreSeek搜索引擎,基于俄國(guó)開(kāi)源項(xiàng)目Sphinx研發(fā)并獨(dú) 立開(kāi)發(fā)的搜索引擎。自帶中文分詞器mmseg,有大量中文文檔。提供JAVAAP。索引建立效率 高并且與業(yè)務(wù)無(wú)

13、關(guān)。在國(guó)內(nèi)有大量成功案例。1.1.25 與內(nèi)部模塊之間的通信為網(wǎng)站前端提供遠(yuǎn)程調(diào)用服務(wù)?;趆essian機(jī)制。第三方服務(wù)調(diào)用模塊調(diào)用第三方合作服務(wù)商的接口?;?j2ee spring框架。采用spring mvc模 式。1.1.26Web service 調(diào)用采用spring+xfile框架調(diào)用第三方服務(wù)webservice。1.1.27 與內(nèi)部模塊之間的通信為網(wǎng)站前端和后臺(tái)管理系統(tǒng)提供遠(yuǎn)程調(diào)用服務(wù)?;趆essian 機(jī)制。對(duì)外服務(wù)接口對(duì)外部系統(tǒng)提供 webservice 接口服務(wù)1.1.28Web service 服務(wù)采用spring+xfile框架對(duì)外提供 webservice服務(wù)。

14、1.1.29 與內(nèi)部模塊之間的通信調(diào)用內(nèi)部其他模塊的服務(wù)?;?hessian機(jī)制。數(shù)據(jù)庫(kù)使用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),并使用讀寫分離機(jī)制提高數(shù)據(jù)庫(kù)性能。1.1.30 數(shù)據(jù)庫(kù)讀寫分離我們使用開(kāi)源的 mysql 代理 Amoeba 實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離,把寫請(qǐng)求發(fā)送 到主服務(wù)器,讀請(qǐng)求發(fā)送到從服務(wù)器,主從之間通過(guò) mysql 自帶的復(fù)制機(jī)制實(shí) 現(xiàn)數(shù)據(jù)的同步。1.1.31 數(shù)據(jù)庫(kù)負(fù)載均衡Amoeba 支持輪詢和權(quán)重兩種負(fù)載均衡機(jī)制,我們使用權(quán)重負(fù)載機(jī)制實(shí)現(xiàn)讀 服務(wù)器的負(fù)載均衡。1.1.32 數(shù)據(jù)庫(kù)表引擎的選擇主服務(wù)器必須使用 innodb 支持事務(wù)的存儲(chǔ)引擎,行級(jí)鎖表。而從服務(wù)器可 以考慮使用 myisam

15、 引擎,不支持事務(wù),表級(jí)鎖表,具有更高的讀寫效率,但不 支持外鍵。1.1.33 主從數(shù)據(jù)庫(kù)的差異優(yōu)化主服務(wù)器只需要建立唯一索引和外鍵約束,其它針對(duì)對(duì)查詢優(yōu)化的索引可 以不建立,這要可以提高主服務(wù)器的性能。從服務(wù)器字段使用char 而不用varchar,沒(méi)有varchar, text, blob字段的表是靜態(tài)表,反之是動(dòng)態(tài)表,靜態(tài)表的 檢索效率要比動(dòng)態(tài)表好若干倍。工程命名工程以動(dòng)物命名,結(jié)合了各種動(dòng)物特征與我們各工程的職責(zé):公共接口工具 magpie (喜鵲)網(wǎng)站前臺(tái)服務(wù)bull (公牛)物流cheetah (獵豹)支付lion (獅子)進(jìn)銷存接口 ? fox (狐貍)搜索dog (狗)郵件ea

16、gle?(鷹)短信pigeon (鴿子)后臺(tái)管理horse(馬)調(diào)用第三方合作接口 mouse(老鼠)對(duì)外服務(wù)接口 ? camel駱駝)工程規(guī)范工程目錄結(jié)構(gòu)src 源碼WebContent包結(jié)構(gòu)包命名基本原則:小寫字母開(kāi)頭,如果有多個(gè)單詞,除第一個(gè)單詞之外的 單詞首字母大寫 WEN-INFlib jar 包c(diǎn)onfig 配置文件views 視圖模板layout 布局模板screen 頁(yè)面模板各模塊common 公共的styles 樣式文件resources 資源文件scripts js 文件common 公共 js各模塊,各開(kāi)源js項(xiàng)目1.1.34 公共工具接口工程公共工具:各層的公共基類:下

17、的各子包遠(yuǎn)程調(diào)用公共dto :提供服務(wù)的工程名.remoting .dto.業(yè)務(wù)子模塊遠(yuǎn)程調(diào)用公共接口:提供服務(wù)的工程名 .業(yè)務(wù)子模塊1.1.35 各模塊工程數(shù)據(jù)對(duì)象:工程名.domain.業(yè)務(wù)子模塊持久層dao接口:工程名.dao.業(yè)務(wù)子模塊持久層dao接口實(shí)現(xiàn):工程名.dao.業(yè)務(wù)子模塊.持久層框架名(ibatis)持久層sqlmap:工程名.dbMap.業(yè)務(wù)子模塊.數(shù)據(jù)庫(kù)類型(mysql)業(yè)務(wù)邏輯接口:工程名.service業(yè)務(wù)子模塊業(yè)務(wù)邏輯實(shí)現(xiàn):工程名.service業(yè)務(wù)子模塊.implWeb控制器action: com.工程名.業(yè)務(wù)子模塊Web 驗(yàn)證器: com. .工程名 .業(yè)務(wù)子

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論