Java技术架构选型方案报告

milefor

贡献于2013-05-10

字数:0 关键词: 软件架构 方案 报告 Java

最高院执行项目 技术架构选型方案 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资源文件组成,包括JSP,JS 和大量的界面控件,同时还采用了AJAX和Flex等RIA技术,负责向用户展现丰 富的界面信息,并执行用户的命令 控制层 :负责展示层请求的转发、调度和基础验证,同时自动拦截后台返回 的Runtime异常信息。 领域层 :是系统最为丰富的一层,主要负责处理整个系统的业务逻辑。这一 层包括业务服务和领域对象,同时负责系统的事务管理。其中业务服务可以 提供本地调用和共享远程服务的功能。 2 数据访问控制层 :数据访问层的目的很明确,主要作为提供数据持久化的功 能,包括数据的读取和写入,操作数据库的方法可以有两种方式ORM方式, ralasafe封装的方式。 公共基础设施层: 可以包括Common通用模块,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个文件中读取放入到列表中。 (测试多核并发边缘) 从性能上看,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大,这是由于指针 膨胀及数据类型对齐补白等因素导致的。 通过评估JDK的版本,最终采用JDK1.6_22 32位版本 2. IOC容器选型( Spring3.0.5.RELEASE) Spring带给我们什么? ✦ 方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring 进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单 实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层 的应用。 ✦ AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传 统OOP实现的功能可以通过AOP轻松应付。 ✦ 声明式事务的支持 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明 式方式灵活地进行事务的管理,提高开发效率和质量。 ✦ 方便程序的测试 以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试 不再是昂贵的操作,而是随手可做的事情。 ✦ 方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使 用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、 Quartz)等的直接支持。 5 3. ORM选型( MyBatis) 到底应该选用Hibernate还是选用MyBatis,我们首先看看几个前提条件: (1) 数据量在千万级别 (2)3000并发下,简单查询5秒内,复杂查询10秒内. (3)开发效率高,易上手。 前两个是硬性条件,最后一个是服务于开发人员,对于千万级数据量是否 Hibernate能够满足我们的性能需求,我一直渴望能找到相关的数据,但是没有 具体的数据支撑,但是网上的经验,很多的系统当数据量达到千万级以上的时 候,把Hibernate换成SpringJDBC或者Ibatis或者纯JDBC的方式,可见 Hibernate会成为将来性能的一个瓶颈,下面列举几种场景能够体现Hibernate 的性能比较低: 比如说有一个表,这个表有几个或者几十个字段,我需要更新其中的 一个字段,iBatis 很简单,执行一个sql 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。上面的场景中我为什么要把 他们 也选出来呢?用hibernate 的话,你又不能把这两个不需要的 字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需 要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而 iBatis只需要一条update的sql就可以了。减少一次与数据库的交 互,对于性能的提升是非常重要。  所以比较起来,更倾向于使用Mybatis,将来可以进行细粒度的优化,一 般系统性能 的瓶颈都在数据库上。所以这一点是 iBatis 非常重要的一个优 势。 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 (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 Support (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) 安全中间件 对于第一种硬编码的方式是最常用的,也是最不灵活的方法,当用户的需 要变更使,系统也要有很大的改动量很大;第二种方案使基于框架,例如 SpringSecurity,Acegi等,需要你的应用系统按照该框架进行架构,如果是已 有系统改造,代价非常大,对于安全框架,对于数据级权限没有提供任何支 持,需要开发人员编写JAVA和XML代码;第三种方案,不仅能够实现用户认证和 功能级权限,依赖于权限引擎的机制,实现数据级权限,所以采用以安全中间 件的方式来架构系统的安全,目前安全中间件有:Oracle Entitlement Server 和 Ralasafe,前者是Oracle的商业产品,后者是国内的开源产品,并且开源协 议为MIT,对商业完全友好,因此采用ralasafe。  但是对于Ralasafe来说,对于功能级权限和数据级权限是非常的强大, 但是对于用户认证,只有实现一个很简单的数据库认证,对于将来的扩展很 难,所以把用户认证部分单独拿出来,交给安全框架去做,通过对比 8 SpringSecurity,Acegi和Shiro三种安全框架,要以最小的代价,最简单的配置 与Ralasafe进行集成,所以Shiro符合我们的需求。所以采用Shiro+Ralasafe来 保证系统的安全。 shiro  Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大 优势。 ! Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、 授权、管理会话以及密码加密。如下是它所具有的特点: 1. 易于理解的 Java Security API; 2. 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos, ActiveDirectory 等); 3. 对角色的简单的签权(访问控制),支持细粒度的签权; 4. 支持一级缓存,以提升应用程序的性能; 5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境; 6. 异构客户端会话访问; 7. 非常简单的加密 API; 8. 不跟任何的框架或者容器捆绑,可以独立运行。 Ralasafe 在安全和数据权限方面,过去一直在使用的是Acegi和SpringSecurity, 它们都属于 框架级别的,并且本身并不支持数据权限,如果要实现数据权限的 话,必须要硬编码到系统中,会带来3方面的问题: 1. 编码很累; 2. 需要变更,代价大,后期无法改 3. 发现很多技术并不合适,并不专业; 因此采用开源基于安全引擎的中间件ralasafe,提供安全保证和数据权限功 能, 以下是对ralasafe的介绍: 1. 功能概述 • 多应用系统集中管理 • 应用系统与数据库间的防火墙 • 数据库行列级权限 • 字段内容操作权限 9 • 定制违规拒绝提示 2. 权限模型图 3. 与系统集成 4. 使用ralasafe带来的收益 ★ 权限模式随业务精细化需求变化随时调整,无需事先定制 ★ 业务变更可拆分成业务变更,权限变更,防止牵一发而动全身 ★ 给权限系统再定义权限(权限管理自身的精细化管理) 10 5. 前台组件选型 序号 名称 版本 1 JQuery 1.4.4 2 表格JQGrid 3.8.2 3 弹出框JQueryUI 1.8.10 4 表单提交ajaxForm 2.6.7 5 提示组件qtip 2.0 6 下拉多选JQueryUi MultiSelectWidget 1.9 7 日期组件 My97DatePicker 4.7 8 自动完成组件JQuery 1.8.10 9 树组件ztree 2.5 ! 前台的组件都是基于JQuery的组件,那么基于JQuery有什么好处呢? jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是 ——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还有一个比较大的优势是,它的文档说明很全,而且各种应用 也说得很详细,同时还有许多成熟的插件可供选择。 jQuery能够使用户的html页保持代码和html内容分离,也就是说,不 用再在html里面插入一堆js来调用命令了,只需定义id即可. 11 案件导入导出架构设计 总体架构设计  案件导入导出采用以Flex作为客户端的展现方式,客户端通过调用服务 端的Web Services,完成数据从客户端到服务端的过程,由于Web Services是 同步传输,因此采用SOAP over JMS的方式,解决Web Services异步传输。在客 户端调用服务端Web Service时,把soap请求存放到队列中,服务端通过从队列 中取到soap,调用服务器端的Web Services。这种架构方式带来的好处:  1 Web Service 可以异步处理;  2 服务端负载均衡;  3 服务端提供统一访问接口,可供其他系统调用。 12 客户端功能结构 功能描述: 1. 用户认证 访问系统功能,须通过登陆页面,进行用户认证,认证成功后,方可 访问系统。 2. 数据导入  系统提供数据导入功能,把XML文件上传到系统中。 3. 数据校验 系统提供对案件进行数据校验,并提供对不合法的数据进行编辑功 能,保证数据的完整性和准确性。 4. 案件同步 系统提供单个和批量案件同步功能,把案件同步到服务器端,同时提 供同步监控功能,可以查看同步结果,成功或者失败,失败之后可以手动 再次同步。 13 5. 日志信息  记录用户的登陆信息和用户所有的操作信息。 6. 数据保存  系统提供数据保存功能,可以把修改后的数据存在本机中。 技术实现方式 1. 展现方式(FLEX)  与以往纯B/S技术不同,Flex是结合了B/S与C/S技术优点的新一代富客 户端技术。  新一代富客户端的技术特点: (1) 可操作性方面:Flex富客户端的界面和操作性将能够和传统的C/S相 媲美,提供更丰富、更友善、易用性更强的界面给用户,同时互动性更 好,而开发效率却 大为提高;特别是Flex内建对音频和视频(包括H.264 技术)的支持,给用户提供更好的操作体验。之所以Ajax会大行其道,就 是因为Ajax的出现 可以弥补传统B/S在界面友善方面的不足,例如Web2.0 中普遍提供了一个页面中可以多个Tab的切换,给用户带来更多的方便, 但对于更复杂的操作模式 则无能为力。而新一代的富客户端如同传统C/S 应用一样,可以提供更为复杂的界面,同时其数据持有能力也更强。 (2) 架构方面:用XML来描述GUI的外观,GUI和逻辑相分离,真正意义上的 MVC,使得应用开发的结构更为清晰。前端界面使用XML来描述,界面的控 制由ActionScript来负责,后端的应用逻辑则封装在后端中间件中,与 Flex前端界面相分离。 (3) 可拓展性方面:Flex做为前端的客户组件,非常容易与各类后端技术 相结合,例如AMF、PHP、Java、.Net、ColdFusion等,这样后端 应用服 务可以规划为类似的“中间件”组件,将业务逻辑封装其中,中间应用服 务组件的选择预留给用户极大的选择空间,方便而灵活。 (4) 从运行的环境方面:程序可以在浏览器中,也可以运行在浏览器外, 极大拓展了应用的使用场合。新一代富客户端可以根据需求更加灵活的部 署。 (5) 在性能方面:传统的B/S有各种方式来提高应用服务器的效率,但Flex 框架的解决方案与此不同,能够在性能方面有更大的提升。众所周知,传 统Web应用 客户端每次刷新页面都会对服务器产生请求,服务器要将新的 HTML和HTML中包含的图片传递给Client,当请求数量较大时,动态生成 14 HTML及下载 图片的过程都会严重地消耗着服务器的资源(CPU、IO、 Memory、Network)。而新一代富客户应用是通过第一次运行时将应用一次 性下载到本 地,所有的GUI都在本地运行,运行过程中只产生少量的数据 更新请求,而不需要服务器端实时地产生刷新的页面,也就不存在服务器 对HTML等内容的动态构 造,这样后端服务器将完全专注于数据逻辑的处 理,这样充分利用客户端本地机器的CPU,并最大限度的减少网络带宽。 (6) 在开发效率方面,Flex的界面编程技术更类似于VB或是Delphi,开发 中所见即所得,比起修改ASP、JSP、PHP和Javascript所表现 的界面有极 高的开发效能,而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

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 30 人已下载

下载文档

相关文档