JAVA技术架构及开发规范文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA技术架构及开发规范文档
1引言
1.1目的
通过对系统整体架构和技术规范的描述.为下一步大规模设计开发提供基础和规范。
也希望广大JAVA项目开发的程序猿们提出宝贵的建议.不断完善。
1.2对象与范围
架构师.高级工程师.项目经理.项目管理人员,开发人员.测试人员。
1.3概述
系统实现方案,以实现功能为主.效率性能为辅. 但设计兼顾未来性能的扩展,以减少未来重构的工作量。
wcbapp按逻辑分为两层.第一层用户服务接入. 第二层内部服务。
第一层项目不分模块,以二级目录形式表示不同模块,第二层根据不同服务分模块,第
一层和第二层之间使用hessian通信。
第一层和第二层独立部署.第二层的不同模块也可以独立部署。
下项目考虑第一层分模块的二级域名独立部署. 并实现单点登荥。
web app采用集群负载均衡,数据库采用负载均衡和读写分离.以满足一定的性能需求。
文档描述了各层结构和模块使用的技术和框架。
最后描述了开发的规范和用到的开发工具。
文档只是描述了项目的架构.
2系统架构图
系统架构如下
3层次和模块
3.1前端负载均衡
Nginx是一个口碑很好的开源免费WEB服务器,国内很多大型网站都转选Nginx平台.比如將讯,豆瓣等。
Nginx可以实现动靜分离和web app的负载均衡。
3.1.1动静分离
动靜分离可以很好得分担服务器的负载,有两种方式实现动靜分离。
1. 使用2级域名,配置专门的靜态文件服务器。
2. 利用Nginx的url转发功能,把静态请求转发到靜态服务器或在Nginx本地込理.动态请求转发到应用服务器。
我们目前部署上采用第二种方式.同时也实现第一种方式。
系统可以配置动态服务器地址和静态服务器地址,在生成页面时获取这两个地址.对图片、js脚本、css和靜态页面使用静态配置生成url,对ajax清求和动态页面使用动态服务器地址生成urlo
3.1.2负载均衡
Nginx可以配置upstream服务器组,实现组内的负载均衡。
通过ip_hash的方式把动态请求转发到组内的某台服务器.同时保证客户端在IP不变的情况下—直访问同一台服务器.解决session保持问题。
3.2 Web app
网站前端,基Tj2ce. spring框架开发。
3.2.1页面展示和控制
系统有三种页面方式。
动态同步请求.通过velocity模板生成页面.客户端刷新整个页面。
ajax异步请求。
Ajax舁步请求又有三种形式:与velocity模板结合返回html串:返回json格式;直接返回简单的字符串。
3模板生成的纯静态页面
前台页面采用的框架和第三方技术有:
jqucry-corc (事件处理.ajax请求,页面刷新......)o
Jqzoom (图片放大器)
3. Jqucry-validator(输入验证)
3.2.2权限安全控制
使用apache shiro框架实现权限控制。
Shiro是一个强大、使用简单的权限安全框架。
同时Shiro也能与 cas单点登录整合,方便在下项目扩展多个应用模块。
框架把权限系统分成subject(当前用户). manager(管理所有用户),rcalms(权限数据)三层。
支持
基于实际资源和基于角色的权限校验.同时
我们扩展 shiro 的 Username Password? oken, Realm 实现基于验证码和数据库用户密码的用户登录验证。
在过滤器层.我们暂时只使用shiro的3种类型过滤器控制访问:
1. AnonymousFiltcr匿名过滤器任何人可以
访问。
2. AuthcnticatingFillcr认证过滤器必须通过身份认真才能访问(跳转到登录页面)。
可以对当前subject直接调用方法完成判断是否登录,登录.注销等操作.方便对登录功能的扩展。
3.2.3控制器层
采用spring 基于注解的控制器.控制器支持
velocity视图返回.ajaxjson返回和ajax text返回。
3.2.4数据验证
使用和扩展 apache 的 common-validator。
3.2.5逻辑层
采用spring基于注解的事务控制。
3.2.6数据持久层
采用ibatis框架,基于sqlmap配置实现数据的读写, sqlmap配置可以控制底层sql 语句,便于数据库的调优。
3.2.7缓存的处理
使用缓存可以降低与数据库的交互次数.极大提高系统性能。
我们采用ehcache缓存框架。
用到两种缓存方式:
1 口页面缓存:直接在过滤器层对页面进行缓存処理,在过滤器层就可以返回缓存的页面.不用转到控制器去处理。
对于页面比较复杂.调用业务逻辑比较多的页面.采用页面缓存效果很好.比如首页。
2口基于注解的方法缓存.可以对方法的返回值缓存. 存入的参数可以组成key。
可以在逻辑层使用缓存, 也可以在持久层试用。
对于请求简单.访问呈大,但修改频率比较低的数据进行缓存可以达到很好的效果。
比如商品分类.系统数据字典,地区等数据。
Ehcachc支持分布式缓存.chcachc支持服务器之间通过rmi调用保持所有服务器之间缓存同步。
缓存的两种过期机制:
!□定时过期.直接通过ehcachc的配置确定缓存过期频率。
2口主动通知.管理员在后台系统进行某些操作后.通过hessian远程调用通知应用服务器缓存过期。
只需通知一台应用服务器.应用服务器之间通过ehcache自带分布式缓存复制方式同步缓存。
后台管理系统可以提供刷新缓存功能,管理员在后台管理系统主动刷新缓存。
3.2.8去其他模块之间的通信
通过hessian远程调用框架,实现与其他模块功能之冋的通信。
Hessian是一个基于http的二逬制远程过程调用框架,比websenuce更高效。
与Spring框架很好结合,开发简单。
3.3后台管理系统
管理员用来维护网站的系统。
基于j2cc spring框架。
与网站前台使用到的技术差不多.现只介绍不同点:
3.3.1页面的展示
大部分请求采用页面刷新的机制。
头部,中部左侧菜单和底部固定不变。
中部右ffll] iframc 为主操作区,毎次操作刷新页面。
商品描述的编辑需要使用到富文本编辑器,我们采用开源的TinyMCE, TinyMCE在国内应用比较广泛。
332缓存机制
后台系统访问不是很频繁.同事管理员需要的是实
时的数据.所以后台管理系统不对数据进行缓存。
3.3.3权限管理
采用sping security框架进行权限的控制.基于用户、角色和资源的授权机制。
3.4支付模块:
支付模块主要功能是订单的管理.与银行等支付系统的交互。
基于j2ec spring框架。
采用spring mvc模式。
3.4.1与银行和其他支付系统的
交互
需要提供一个Url地址,供银行在用户完成支付后回调.通知系统已经支付成功。
3.4.2与内部模块之间的通信
主要来自网站前端的调用。
基于hessian机制。
3.5物流模块
支付模块目前主要功能是调用物流公司的接口跟踪物流状态,随着系统的不断发展,在拥有自己的物流后,可能发展成一个庞大的系统。
基于j2ee spring框架。
采用spring mvc模式。
基于hessian机制对外提供远程效用服务。
3-6邮件模块
邮件模块主要用来向客户发送邮件。
基于j2cc spring 框架。
采用spring mvc模式。
3.6.1邮件发送
使用java mail包发送邮件,支持以固定模板发送邮件。
3.6.2定时发送
使用spring+quartz框架实现定时任务发送邮件。
3.6.3与内部模块之间的通信
为网站前端和后台管理系统提供远程调用服务。
基于 hessian 机制。
3.7短信模块
短信模块主要用来向客户发送短信。
基于j2ce spring 框架。
采用spring mvc模式。
3.7.1邮件发送
调用短信设备api发送短信.支持以固定模板发送短信。
3.7.2定时发送
使用spring+quartz框架实现定时任务发送短信。
3.7.3与内部模块之间的通信
为网站前端和后台管理系统提供远程调用服务。
基于 hessian 机制。
3.8进销存模块
调用A8系统接口,实现库存的管理。
基于j2ec spring 框架。
采用spring mvc模式。
3.8.1 Web service 调用
采用spring+xfilc框架调用a8系统wcbscn(iceo
3.8.2与内部模块之间的通信
为网站前端和后台管理系统提供远程调用服务。
基于 hessian 机制。
3.9搜索模块
为网站提供搜索服务。
包括商品检索和问答式搜索的问题检索。
基于j2ec spring框架。
采用spring mvc模式。
3.9.1检索框架
我们使用国产开源corcScck搜索引擎.基于俄国开源项目Sphinx研发并独立开发的搜索引擎。
自带中文分词器mmscg.有大量中文文档。
提供JAVAAPL 索引建立效率高并且与业务无关。
在国内有大量成功案例。
3.9.2与内部模块之间的通信
为网站前端提供远程调用服务。
基于hessian机制。
3.10第三方服务调用模块
调用第三方合作服务商的接口。
基于j2ee spring框架。
采用spring mvc模式。
3.10.1 Web service 调用
采用spring+xfilc框架调用第三方服务webscrvicco
3.10.2与内部模块之间的通信
为网站前端和后台管理系统提供远程调用服务。
基于
hessian 机制。
3.11对外服务接口
对外部系统提供webscrvicc接口服务
3.11.1 Web service 服务
采用spring+xfilc框架对外提供wcbscrvicc服务。
3.11.2与内部模块之间的通信
调用内部其他模块的服务。
基于hessian机制。
3.12数据库
使用mysql5.5数据库存储数据,并使用读写分离机制
提高数据库性能。
3.12.1数据库读写分离
我们使用开源的mysql代理Amoeba实现数据库的读写分离.把写请求发送到主服务器.读请求发送到从服务器.主从之间通过mysql自带的复制机制实现数据的同步。
3.12.2数据库负载均衡
Amoeba支持轮询和权重两种负载均衡机制,我们使用权重负载机制实现读服务器的负载均衡。
3.12.3数据库表引擎的选择
主服务器必须使用innodb支持事务的存储引擎.行级锁表。
而从服务器可以考虑使用myisam引擎.不支持事务.表级锁表.具有更高的读写效率,但不支持外键。
3.12.4主从数据库的差异优化
主服务器只需要建立唯一索引和外键约束.其它针对对查询优化的索引可以不建立,这要可以提高主服务器的性能。
从服务器字段使用char而不用varchar,没有varchar, text, blob字段的表是靜态表,反之是动态表,静态表的检索效率要比动态表好若干倍。
4工程命名
工程以动物命名.结合了各种动物特征与我们各工程的职责:
公共接口工具magpie(喜鹊) 网站前台服务bull(公牛) 物流cheetah (猎豹) 支付lion (郷子) 进销存接口 fox(狐狸) 搜索dog (狗) 邮件eagle (鹰) 短信pigeon (鸽子) 后台管理horse(马) 调用第三方合作接口 mouse(老鼠) 对外服务接口 camcl(骆驼)
5工程规范
5.1工程目录结构
sre源码
WebContent
WEN-INF
lib jar 包
config配置文件
views 视图模板
layout布局模板
screen页面模板
. 各模块
common公共的
styles样式文件
resources资源文件
scripts js 文件
common 公共 js
……各模块.各开源js项目
5.2包结构
包命名基本原朋:小写字母开头.如果有多个单词.除第一个单词之外的单词首字母大写5.2.1公共工具接口工程
公共工具:mon.util
各层的公共基类:mon下的各子包。