《技术架构选型方案报告》由会员分享,可在线阅读,更多相关《技术架构选型方案报告(16页珍藏版)》请在人人文库网上搜索。
1、最高院执行项目 技术架构选型方案 Fantasy 2011年8月25日 1 目录 总体架构?2 整体系统描述 2 架构选型?4 JDK选型(JDK1.6_22 32位) 4 IOC容器选型(Spring3.0.5.RELEASE) 5 ORM选型(MyBatis) 6 MVC选型(SpringMVC) 7 认证和权限选型(shiro1.1 + ralasafe 1.1) 8 前台组件选型 11 案件导入导出架构设计?12 总体架构设计 12 客户端功能结构 13 技术实现方式 14 1 总体架构 整体系统描述 系统架构图总揽 展示层 :主要面向B/S架构,展示层主要由web资源文件组成,包括J。
2、SP,JS 和大量的界面控件,同时还采用了AJAX和Flex等RIA技术,负责向用户展现丰 富的界面信息,并执行用户的命令 控制层:负责展示层请求的转发、调度和基础验证,同时自动拦截后台返回 的Runtime异常信息。 领域层:是系统最为丰富的一层,主要负责处理整个系统的业务逻辑。这一 层包括业务服务和领域对象,同时负责系统的事务管理。其中业务服务可以 提供本地调用和共享远程服务的功能。 2 数据访问控制层:数据访问层的目的很明确,主要作为提供数据持久化的功 能,包括数据的读取和写入,操作数据库的方法可以有两种方式ORM方式, ralasafe封装的方式。 公共基础设施层:可以包括Common。
3、通用模块,IOC模块,Logging日志模块, Exception异常模块和单元测试模块。 3 架构选型 1. JDK选型(JDK1.6_22 32位) JDK1.5、JDK1.6和JDK1.7选型 测试 1. 增加5百万条String数据 测试 2.增加5百万数据到ArrayList中,并且插入时有额外的计算 测试 3. HashMap 有5百万 keys, values. 每对key, value是通 过并发线程计算 (这个测试主要测试计算和并发能力) 测试 4. 把ArrayList长度位5百万的列表,插入1000个文件中,再从 1000个文件中读取放入到列表中。 (测试多核并发边缘) 。
4、从性能上看,JDK1.7 JDK1.6 JDK1.5 4 考虑到JDK1.7正式版于2011年7月28日发布,所以稳定程度没有JDK1.6和 JDK1.7的高,因此最终选用JDK1.6_22版本。 32位和64位选型 假设物理内存无限大,那么 JVM 内存的最大值跟操作系统有关,一般 32 位机是 1.5g 到 3g 之间,而 64 位的就不会有限制了。 64位JDK管理大内存,面临的问题: (1)内存回收稻种的长时间停顿; (2)现阶段,64位JDK的性能测试结果普遍低于32位JDK; (3)相当的程序再64位JDK中消耗的内存一般比32位JDK大,这是由于指针 膨胀及数据类型对齐补白等因素。
5、导致的。 通过评估JDK的版本,最终采用JDK1.6_22 32位版本 2. IOC容器选型(Spring3.0.5.RELEASE) Spring带给我们什么? 方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring 进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单 实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层 的应用。 AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传 统OOP实现的功能可以通过AOP轻松应付。 声明式事务的支持 在Spring中,我们可以。
6、从单调烦闷的事务管理代码中解脱出来,通过声明 式方式灵活地进行事务的管理,提高开发效率和质量。 方便程序的测试 以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试 不再是昂贵的操作,而是随手可做的事情。 方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使 用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、 Quartz)等的直接支持。 5 3. ORM选型(MyBatis) 到底应该选用Hibernate还是选用MyBatis,我们首先看看几个前提条件: (1) 数据量在千万级别 (。
7、2)3000并发下,简单查询5秒内,复杂查询10秒内. (3)开发效率高,易上手。 前两个是硬性条件,最后一个是服务于开发人员,对于千万级数据量是否 Hibernate能够满足我们的性能需求,我一直渴望能找到相关的数据,但是没有 具体的数据支撑,但是网上的经验,很多的系统当数据量达到千万级以上的时 候,把Hibernate换成SpringJDBC或者Ibatis或者纯JDBC的方式,可见 Hibernate会成为将来性能的一个瓶颈,下面列举几种场景能够体现Hibernate 的性能比较低: 比如说有一个表,这个表有几个或者几十个字段,我需要更新其中的 一个字段,iBatis 很简单,执行一个s。
8、ql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比 较麻烦了,缺省的情况下 hibernate 会更新所有字段 需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可 以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE .一般情况下Hibernate 会把 所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两 个比较大的字段,varchar(255)/text。上面的场景中我为什么要把 他。
9、们 也选出来呢?用hibernate 的话,你又不能把这两个不需要的 字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需 要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而 iBatis只需要一条update的sql就可以了。减少一次与数据库的交 互,对于性能的提升是非常重要。 所以比较起来,更倾向于使用Mybatis,将来可以进行细粒度的优化,一 般系统性能 的瓶颈都在数据库上。所以这一点是 iB。
10、atis 非常重要的一个优 势。 6 4. MVC选型(SpringMVC) 为什么是SpringMVC ? 众所周知,基于JVM的Web框架可以列举很多,例如struts1、struts2、 tapestry、SpringMVC等,面对这些框架我们到底该如何选择呢?这是一个让人 头疼的问题,Matt Raible(资深的UI架构师),提出了选择的20个关键点: (1) Developer Productivity (2) Developer Perception (3) Learning Curve (4) Project Health (5) Developer Availability 。
11、(6) Job Trends (7) Templating (8) Components (9) Ajax (10) Plugins or Add-ons (11) Scalability (12) Testing Suport (13) i18n and I10n (14) Validation (15) Multi-language Support (16) Quality of Documentation/Tutorials (17) Books published (18) Rest Support(client and server) (19) Mobile / iphone Sup。
12、port (20) Degree of Risk 7 通过对以上20个关键点的比较,从表中可以看到SpringMVC,GWT和Ruby on Rails都以17分并列第一位。对于企业应用来说,SpringMVC成为了首选。 5. 认证和权限选型(shiro1.1 + ralasafe 1.1) 一般把系统的安全体系分为三个部分: (1)用户认证 (2)功能权限 (3)数据权限 目前有三种解决方案来保证系统的安全: (1)硬编码 (2)安全框架 (3)安全中间件 对于第一种硬编码的方式是最常用的,也是最不灵活的方法,当用户的需 要变更使,系统也要有很大的改动量很大;第二种方案使基于框架,例如 S。
13、pringSecurity,Acegi等,需要你的应用系统按照该框架进行架构,如果是已 有系统改造,代价非常大,对于安全框架,对于数据级权限没有提供任何支 持,需要开发人员编写JAVA和XML代码;第三种方案,不仅能够实现用户认证和 功能级权限,依赖于权限引擎的机制,实现数据级权限,所以采用以安全中间 件的方式来架构系统的安全,目前安全中间件有:Oracle Entitlement Server 和 Ralasafe,前者是Oracle的商业产品,后者是国内的开源产品,并且开源协 议为MIT,对商业完全友好,因此采用ralasafe。 但是对于Ralasafe来说,对于功能级权限和数据级权限是。
14、非常的强大, 但是对于用户认证,只有实现一个很简单的数据库认证,对于将来的扩展很 难,所以把用户认证部分单独拿出来,交给安全框架去做,通过对比 8 SpringSecurity,Acegi和Shiro三种安全框架,要以最小的代价,最简单的配置 与Ralasafe进行集成,所以Shiro符合我们的需求。所以采用Shiro+Ralasafe来 保证系统的安全。 shiro Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大 优势。 ?Shiro 是一个强大而灵活的开源安全框架,能够。
15、非常清晰的处理认证、 授权、管理会话以及密码加密。如下是它所具有的特点: 1.易于理解的 Java Security API; 2.简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos, ActiveDirectory 等); 3.对角色的简单的签权(访问控制),支持细粒度的签权; 4.支持一级缓存,以提升应用程序的性能; 5.内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境; 6.异构客户端会话访问; 7.非常简单的加密 API; 8.不跟任何的框架或者容器捆绑,可以独立运行。 Ralasafe 在安全和数据权限方面,过去一直在使用的是Ace。
16、gi和SpringSecurity, 它们都属于 框架级别的,并且本身并不支持数据权限,如果要实现数据权限的 话,必须要硬编码到系统中,会带来3方面的问题: 1. 编码很累; 2. 需要变更,代价大,后期无法改 3. 发现很多技术并不合适,并不专业; 因此采用开源基于安全引擎的中间件ralasafe,提供安全保证和数据权限功 能, 以下是对ralasafe的介绍: 1. 功能概述 多应用系统集中管理 应用系统与数据库间的防火墙 数据库行列级权限 字段内容操作权限 9 定制违规拒绝提示 2. 权限模型图 3. 与系统集成 4. 使用ralasafe带来的收益 权限模式随业务精细化需求变化随时调整。
17、,无需事先定制 业务变更可拆分成业务变更,权限变更,防止牵一发而动全身 给权限系统再定义权限(权限管理自身的精细化管理) 10 5. 前台组件选型 序号名称版本 1 JQuery1.4.4 2 表格JQGrid3.8.2 3 弹出框JQueryUI1.8.10 4 表单提交ajaxForm2.6.7 5 提示组件qtip2.0 6 下拉多选JQueryUi MultiSelectWidget1.9 7 日期组件 My97DatePicker4.7 8 自动完成组件JQuery1.8.10 9 树组件ztree2.5 ?前台的组件都是基于JQuery的组件,那么基于JQuery有什么好处呢? j。
18、Query是继prototype之后又一个优秀的Javascrpt框架。其宗旨是 WRITE LESS,DO MORE,写更少的代码,做更多的事情。 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它 兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX交互。 jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用 也说得很详细,。
19、同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离,也就是说,不 用再在html里面插入一堆js来调用命令了,只需定义id即可. 11 案件导入导出架构设计 总体架构设计 案件导入导出采用以Flex作为客户端的展现方式,客户端通过调用服务 端的Web Services,完成数据从客户端到服务端的过程,由于Web Services是 同步传输,因此采用SOAP over JMS的方式,解决Web Services异步传输。在客 户端调用服务端Web Service时,把soap请求存放到队列中,服务端通过从队列 中取到soap,调用服务器端的Web S。
20、ervices。这种架构方式带来的好处: 1 Web Service 可以异步处理; 2 服务端负载均衡; 3 服务端提供统一访问接口,可供其他系统调用。 12 客户端功能结构 功能描述: 1.用户认证 访问系统功能,须通过登陆页面,进行用户认证,认证成功后,方可 访问系统。 2.数据导入 系统提供数据导入功能,把XML文件上传到系统中。 3.数据校验 系统提供对案件进行数据校验,并提供对不合法的数据进行编辑功 能,保证数据的完整性和准确性。 4.案件同步 系统提供单个和批量案件同步功能,把案件同步到服务器端,同时提 供同步监控功能,可以查看同步结果,成功或者失败,失败之后可以手动 再次同步。。
21、 13 5.日志信息 记录用户的登陆信息和用户所有的操作信息。 6.数据保存 系统提供数据保存功能,可以把修改后的数据存在本机中。 技术实现方式 1.展现方式(FLEX) 与以往纯B/S技术不同,Flex是结合了B/S与C/S技术优点的新一代富客 户端技术。 新一代富客户端的技术特点: (1) 可操作性方面:Flex富客户端的界面和操作性将能够和传统的C/S相 媲美,提供更丰富、更友善、易用性更强的界面给用户,同时互动性更 好,而开发效率却 大为提高;特别是Flex内建对音频和视频(包括H.264 技术)的支持,给用户提供更好的操作体验。之所以Ajax会大行其道,就 是因为Ajax的出现 可以。
22、弥补传统B/S在界面友善方面的不足,例如Web2.0 中普遍提供了一个页面中可以多个Tab的切换,给用户带来更多的方便, 但对于更复杂的操作模式 则无能为力。而新一代的富客户端如同传统C/S 应用一样,可以提供更为复杂的界面,同时其数据持有能力也更强。 (2) 架构方面:用XML来描述GUI的外观,GUI和逻辑相分离,真正意义上的 MVC,使得应用开发的结构更为清晰。前端界面使用XML来描述,界面的控 制由ActionScript来负责,后端的应用逻辑则封装在后端中间件中,与 Flex前端界面相分离。 (3) 可拓展性方面:Flex做为前端的客户组件,非常容易与各类后端技术 相结合,例如AMF。
23、、PHP、Java、.Net、ColdFusion等,这样后端 应用服 务可以规划为类似的“中间件”组件,将业务逻辑封装其中,中间应用服 务组件的选择预留给用户极大的选择空间,方便而灵活。 (4) 从运行的环境方面:程序可以在浏览器中,也可以运行在浏览器外, 极大拓展了应用的使用场合。新一代富客户端可以根据需求更加灵活的部 署。 (5) 在性能方面:传统的B/S有各种方式来提高应用服务器的效率,但Flex 框架的解决方案与此不同,能够在性能方面有更大的提升。众所周知,传 统Web应用 客户端每次刷新页面都会对服务器产生请求,服务器要将新的 HTML和HTML中包含的图片传递给Client,当请。
24、求数量较大时,动态生成 14 HTML及下载 图片的过程都会严重地消耗着服务器的资源(CPU、IO、 Memory、Network)。而新一代富客户应用是通过第一次运行时将应用一次 性下载到本 地,所有的GUI都在本地运行,运行过程中只产生少量的数据 更新请求,而不需要服务器端实时地产生刷新的页面,也就不存在服务器 对HTML等内容的动态构 造,这样后端服务器将完全专注于数据逻辑的处 理,这样充分利用客户端本地机器的CPU,并最大限度的减少网络带宽。 (6) 在开发效率方面,Flex的界面编程技术更类似于VB或是Delphi,开发 中所见即所得,比起修改ASP、JSP、PHP和Javascri。
25、pt所表现 的界面有极 高的开发效能,而Flex采用ActionScript是面向对象的语言,是一种和 Java、.NET相其类似的语言,对于Java或.NET 程序员来说Flex技术很容 易上手,学习和整体维护成本很低。 (7) 能够与视频、音频等多媒体完美结合。Flex内建视频、音频等多媒体 原生组件,因此为程序员提供了方便、易用的API。特别是最新的更新中 已经包含了对H.264编码协议的支持。 (8) 和B/S相比,Flex能够更方便的实现全双工的消息通信。对于某些特定 的应用,需要实时从服务器Push消息给Client,Flex提供了方便的解决方 案,突破了传统的HTTP消息基于Get/Post被动请求的模式 2.服务组件框架(Tuscany) Apache Tuscany 提供开放式可扩展的运行环境以支持现在和将来的各 种技术这将解除应用程序对底层技术的依赖和偶合,使得跨技术网络平台的 组装成为可能并大大简化 多种构件实现, 包括Java, BPEL, XQuery, JavaScript 多种通讯协议, 包括RMI, Web Services, JSONRPC, Feed, EJB, CORBA 多种接口语言, 包括Java , WSDL 多种数据绑定, 包括XML, JavaBeans, JAXB, SDO, XMLBeans, JSON, AXIOM 15。