技術架構規范_第1頁
技術架構規范_第2頁
技術架構規范_第3頁
技術架構規范_第4頁
技術架構規范_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 引言1.1 目的通過對系統整體架構和技術規范的描述,為下一步大規模設計開發提供基礎和規范。1.2 對象與范圍項目管理人員,開發人員,測試人員。1.3 概述系統一期,以實現功能為主,效率性能為輔,但設計兼顧未來性能的擴展,以減少未來重構的工作量。webapp按邏輯分為兩層,第一層用戶服務接入,第二層內部服務。第一層一期不分模塊,以二級目錄形式表示不同模塊,第二層根據不同服務分模塊,第一層和第二層之間使用hessian通信。第一層和第二層獨立部署,第二層的不同模塊也可以獨立部署。下一期考慮第一層分模塊的二級域名獨立部署,并實現單點登錄。web app采用集群負載均衡,數據庫采用負載均衡和讀寫分

2、離,以滿足一定的性能需求。 文檔描述了各層結構和模塊使用的技術和框架。最后描述了開發的規范和用到的開發工具。文檔只是描述了一期的架構,2 系統架構圖一期系統架構如下3 層次和模塊233.1 前端負載均衡nginx是一個口碑很好的開源免費WEB服務器,國內很多大型網站都轉選nginx平臺,比如騰訊,豆瓣等。Nginx可以實現動靜分離和web app的負載均衡。3.1.1 動靜分離動靜分離可以很好得分擔服務器的負載,有兩種方式實現動靜分離。1使用2級域名,配置專門的靜態文件服務器。2利用nginx的url轉發功能,把靜態請求轉發到靜態服務器或在nginx本地處理,動態請求轉發到應用服務器。我們目前

3、部署上采用第二種方式,同時也實現第一種方式。系統可以配置動態服務器地址和靜態服務器地址,在生成頁面時獲取這兩個地址,對圖片、js腳本、css和靜態頁面使用靜態配置生成url,對ajax請求和動態頁面使用動態服務器地址生成url。3.1.2 負載均衡nginx可以配置upstream服務器組,實現組內的負載均衡。通過ip_hash的方式把動態請求轉發到組內的某臺服務器,同時保證客戶端在IP不變的情況下一直訪問同一臺服務器,解決session保持問題。3.2 Web app網站前端,基于j2ee,spring框架開發。3.2.1 頁面展示和控制系統有三種頁面方式。1 動態同步請求,通過veloci

4、ty模板生成頁面,客戶端刷新整個頁面。2 ajax異步請求。Ajax異步請求又有三種形式:與velocity模板結合返回html串;返回json格式;直接返回簡單的字符串。3 模板生成的純靜態頁面前臺頁面采用的框架和第三方技術有:1 jquery-core (事件處理,ajax請求,頁面刷新)。2 Jqzoom (圖片放大器)3Jquery-validator(輸入驗證)3.2.2 權限安全控制使用apache shiro框架實現權限控制。Shiro是一個強大、使用簡單的權限安全框架。同時Shiro也能與cas單點登錄整合,方便在下一期擴展多個應用模塊。框架把權限系統分成subject(當前用

5、戶),manager(管理所有用戶),realms(權限數據)三層。支持基于實際資源和基于角色的權限校驗,同時我們擴展shiro的UsernamePasswordToken,Realm實現基于驗證碼和數據庫用戶密碼的用戶登錄驗證。在過濾器層,我們暫時只使用shiro的3種類型過濾器控制訪問:1AnonymousFilter  匿名過濾器 任何人可以訪問。2AuthenticatingFilter 認證過濾器 必須通過身份認真才能訪問(跳轉到登錄頁面)。可以對當前subject直接調用方法完成判斷是否登錄,登錄,注銷等操作,方便對登錄功能的擴展。3.2.3 控制器層采用spring 基

6、于注解的控制器,控制器支持velocity視圖返回,ajax json返回和ajax text返回。3.2.4 數據驗證使用和擴展apache的common-validator。3.2.5 邏輯層采用spring基于注解的事務控制。3.2.6 數據持久層采用ibatis框架,基于sqlmap配置實現數據的讀寫,sqlmap配置可以控制底層sql語句,便于數據庫的調優。3.2.7 緩存的處理使用緩存可以降低與數據庫的交互次數,極大提高系統性能。我們采用ehcache緩存框架。用到兩種緩存方式:1 頁面緩存:直接在過濾器層對頁面進行緩存處理,在過濾器層就可以返回緩存的頁面,不用轉到控制器去處理。對

7、于頁面比較復雜,調用業務邏輯比較多的頁面,采用頁面緩存效果很好,比如首頁。2 基于注解的方法緩存,可以對方法的返回值緩存,存入的參數可以組成key。可以在邏輯層使用緩存,也可以在持久層試用。對于請求簡單,訪問量大,但修改頻率比較低的數據進行緩存可以達到很好的效果。比如商品分類,系統數據字典,地區等數據。Ehcache支持分布式緩存,ehcache支持服務器之間通過rmi調用保持所有服務器之間緩存同步。緩存的兩種過期機制:1 定時過期,直接通過ehcache的配置確定緩存過期頻率。2 主動通知,管理員在后臺系統進行某些操作后,通過hessian遠程調用通知應用服務器緩存過期。只需通知一臺應用服務

8、器,應用服務器之間通過ehcache自帶分布式緩存復制方式同步緩存。后臺管理系統可以提供刷新緩存功能,管理員在后臺管理系統主動刷新緩存。3.2.8 去其他模塊之間的通信通過hessian遠程調用框架,實現與其他模塊功能之間的通信。Hessian是一個基于http的二進制遠程過程調用框架,比webservice更高效。與Spring框架很好結合,開發簡單。3.3 后臺管理系統管理員用來維護網站的系統。基于j2ee spring框架。與網站前臺使用到的技術差不多,現只介紹不同點:3.3.1 頁面的展示大部分請求采用頁面刷新的機制。頭部,中部左側菜單和底部固定不變。中部右側iframe為主操作區,每

9、次操作刷新頁面。商品描述的編輯需要使用到富文本編輯器,我們采用開源的TinyMCE,TinyMCE在國內應用比較廣泛。3.3.2 緩存機制后臺系統訪問不是很頻繁,同事管理員需要的是實時的數據,所以后臺管理系統不對數據進行緩存。3.3.3 權限管理采用sping security框架進行權限的控制,基于用戶、角色和資源的授權機制。3.4 支付模塊:支付模塊主要功能是訂單的管理,與銀行等支付系統的交互。基于j2ee spring框架。采用spring mvc模式。3.4.1 與銀行和其他支付系統的交互需要提供一個Url地址,供銀行在用戶完成支付后回調,通知系統已經支付成功。3.4.2 與內部模塊之

10、間的通信主要來自網站前端的調用。基于hessian機制。3.5 物流模塊支付模塊目前主要功能是調用物流公司的接口跟蹤物流狀態,隨著系統的不斷發展,在擁有自己的物流后,可能發展成一個龐大的系統。基于j2ee spring框架。采用spring mvc模式。基于hessian機制對外提供遠程效用服務。3.6 郵件模塊郵件模塊主要用來向客戶發送郵件。基于j2ee spring框架。采用spring mvc模式。3.6.1 郵件發送使用 java mail包發送郵件,支持以固定模板發送郵件。3.6.2 定時發送使用spring+quartz框架實現定時任務發送郵件。3.6.3 與內部模塊之間的通信為網

11、站前端和后臺管理系統提供遠程調用服務。基于hessian機制。3.7 短信模塊短信模塊主要用來向客戶發送短信。基于j2ee spring框架。采用spring mvc模式。3.7.1 郵件發送調用短信設備api發送短信,支持以固定模板發送短信。3.7.2 定時發送使用spring+quartz框架實現定時任務發送短信。3.7.3 與內部模塊之間的通信為網站前端和后臺管理系統提供遠程調用服務。基于hessian機制。3.8 進銷存模塊調用A8系統接口,實現庫存的管理。基于j2ee spring框架。采用spring mvc模式。3.8.1 Web service調用采用spring+xfile

12、框架調用a8系統webservice。3.8.2 與內部模塊之間的通信為網站前端和后臺管理系統提供遠程調用服務。基于hessian機制。3.9 搜索模塊為網站提供搜索服務。包括商品檢索和問答式搜索的問題檢索。基于j2ee spring框架。采用spring mvc模式。3.9.1 檢索框架我們使用國產開源coreSeek搜索引擎,基于俄國開源項目Sphinx研發并獨立開發的搜索引擎。自帶中文分詞器mmseg,有大量中文文檔。提供JAVAAPI。索引建立效率高并且與業務無關。在國內有大量成功案例。3.9.2 與內部模塊之間的通信為網站前端提供遠程調用服務。基于hessian機制。3.10 第三方

13、服務調用模塊調用第三方合作服務商的接口。基于j2ee spring框架。采用spring mvc模式。3.10.1 Web service調用采用spring+xfile 框架調用第三方服務webservice。3.10.2 與內部模塊之間的通信為網站前端和后臺管理系統提供遠程調用服務。基于hessian機制。3.11 對外服務接口對外部系統提供webservice接口服務3.11.1 Web service服務采用spring+xfile 框架對外提供webservice服務。3.11.2 與內部模塊之間的通信調用內部其他模塊的服務。基于hessian機制。3.12 數據庫使用mysql5.

14、5數據庫存儲數據,并使用讀寫分離機制提高數據庫性能。3.12.1 數據庫讀寫分離我們使用開源的mysql代理Amoeba實現數據庫的讀寫分離,把寫請求發送到主服務器,讀請求發送到從服務器,主從之間通過mysql自帶的復制機制實現數據的同步。3.12.2 數據庫負載均衡Amoeba支持輪詢和權重兩種負載均衡機制,我們使用權重負載機制實現讀服務器的負載均衡。3.12.3 數據庫表引擎的選擇主服務器必須使用innodb支持事務的存儲引擎,行級鎖表。而從服務器可以考慮使用myisam引擎,不支持事務,表級鎖表,具有更高的讀寫效率,但不支持外鍵。3.12.4 主從數據庫的差異優化主服務器只需要建立唯一索

15、引和外鍵約束,其它針對對查詢優化的索引可以不建立,這要可以提高主服務器的性能。從服務器字段使用char而不用varchar,沒有varchar, text, blob字段的表是靜態表,反之是動態表,靜態表的檢索效率要比動態表好若干倍。4 工程命名工程以動物命名,結合了各種動物特征與我們各工程的職責:公共接口工具 magpie(喜鵲) 網站前臺服務 bull(公牛)物流 cheetah (獵豹)支付 lion (獅子)進銷存接口  fox(狐貍)搜索 dog (狗)郵件 eagle  (鷹)短信 pigeon (鴿子)后臺管理 horse(馬)調用第三方合作接口 mouse(

16、老鼠)對外服務接口  camel(駱駝)5 工程規范5.1 工程目錄結構src 源碼WebContentWEN-INFlib jar包config 配置文件views 視圖模板layout 布局模板screen 頁面模板 各模塊common 公共的 styles 樣式文件 resources資源文件 scripts js文件common 公共js 各模塊,各開源js項目5.2 包結構包命名基本原則:小寫字母開頭,如果有多個單詞,除第一個單詞之外的單詞首字母大寫5.2.1 公共工具接口工程公共工具:mon.util 各層的公共基類:mon 下的各子包 遠程調用公共dto:com.zjd

17、elai.emall.提供服務的工程名.remoting .dto.業務子模塊遠程調用公共接口:com.zjdelai.emall.提供服務的工程名.erfaces.業務子模塊第三方開源包的擴展:mon.第三方開源包名5.2.2 各模塊工程數據對象:com.zjdelai.emall.工程名.domain.業務子模塊 持久層dao接口: com.delai.emall.工程名.dao.業務子模塊 持久層dao接口實現: com.zjdelai.emall.工程名.dao.業務子模塊.持久層框架名(ibatis) 持久層sqlmap: com.zjdelai.emall.

18、工程名.dbMap.業務子模塊.數據庫類型(mysql)業務邏輯接口: com.zjdelai.emall.工程名.service.業務子模塊 業務邏輯實現: com.zjdelai.emall.工程名.service.業務子模塊.impl Web控制器action: com. zjdelai.emall.工程名.web.action.業務子模塊 Web驗證器:com. zjdelai.emall.工程名.web.validator.業務子模塊 Web過濾器:com. zjdelai.emall.工程名.web.filter工具:com.zjdelai.emall.工程名.util遠程調用接口

19、實現:com.zjdelai.emall.工程名. erfaces.業務子模塊.impl5.3 類、接口命名類命名基本原則:首字母大寫,多個單詞的首字母大寫接口命名基本原則:以大寫字母"I"開頭,如果有多個單詞,每個單詞頭字母大寫I數據對象:數據庫表名.javaDao接口: I+數據對象名+Dao.javadao實現:數據對象名+Dao+框架名(Ibatis).javasqlmap:數據對象名.xml業務邏輯接口:I+數據對象名+Manager.java業務邏輯實現:數據對象名+ManagerImpl.javaWeb action: domain名+

20、Action.javaWeb validator: domain名+Validator.javaDto:*Dto.java遠程調用接口: I+數據對象名+Sercice.java遠程調用實現:數據對象名+SerciceImpl.java5.4 變量和方法命名類變量、局部變量命名規范:變量名首字母必須小寫,如果該變量名有多個單詞組成,后面的單詞首字母大寫,單詞與單詞之間不要使用_做連接。類常量命名規范:所有字母大寫,如果有多個單詞組成,單詞與單詞之間以_隔開。而且該變量必須是公共、靜態、final類型。方法命名規范:方法名首字母必須小寫,如果該變量名有多個單詞組成,后面的單詞首字母大寫,單詞與單詞之間不要使用_做連接。方法參數名命名規范:參數名首字母必須小寫,如果該變量名有多個單詞組成,后面的單詞首字母大

溫馨提示

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

評論

0/150

提交評論