高级系统架构师

上传人:仙*** 文档编号:171805349 上传时间:2022-11-29 格式:PPT 页数:70 大小:865.50KB
收藏 版权申诉 举报 下载
高级系统架构师_第1页
第1页 / 共70页
高级系统架构师_第2页
第2页 / 共70页
高级系统架构师_第3页
第3页 / 共70页
资源描述:

《高级系统架构师》由会员分享,可在线阅读,更多相关《高级系统架构师(70页珍藏版)》请在装配图网上搜索。

1、111高级系统架构师 架构设计思想与原理 常见高层架构 主流架构 小粒度软件架构222高级系统架构师 架构设计思想与原理 常见高层架构 主流架构 小粒度软件架构333V V型软件开发生命周期模型型软件开发生命周期模型定义开发过程生成的产品,应当测试每一个交付结果。444UP统一过程统一过程 架构设计过程分为二个阶段:高层设计阶段和详细设计阶段 哲学555UP中的架构设计和原理中的架构设计和原理 9个核心工作流,代表了所有角色和活动的逻辑分组情况 666这是开发过程沿时间的动态组织结构。软件生命周期被分解为周期,每一个周期工作在产品新的一代上。UP将周期又划分为四个连续的阶段。初始阶段 细化阶段

2、 构造阶段 交付阶段 每个阶段终结于良好定义的里程碑-某些关键决策必须做出的时间点,因此关键的目标必须被达到。阶段和迭代阶段和迭代-时间轴时间轴777初始阶段初始阶段初始阶段的目标是为系统建立商业案例和确定项目的边界初始阶段的目标是为系统建立商业案例和确定项目的边界。本阶段的主要目标如下:明确软件系统的范围和边界条件,括从功能角度的前景分析、产品验收标准和哪些做与哪些不做的相关决定 明确区分系统的关键用例(Use-case)和主要的功能场景 展现或者演示至少一种符合主要场景要求的候选软件体系结构 对整个项目做最初的项目成本和日程估计(更详细的估计将在随后的细化阶段中做出)估计出潜在的风险(主要

3、指各种不确定因素造成的潜在风险)准备好项目的支持环境 888细化阶段细化阶段细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素险的元素。本阶段的主要目标如下:1.确保软件结构、需求、计划足够稳定;确保项目风险已经降低到能够预计完成整个项目的成本和日程的程度。2.针对项目的软件结构上的主要风险已经解决或处理完成。3.通过完成软件结构上的主要场景建立软件体系结构的基线。4.建立一个包含高质量组件的可演化的产品原型。5.说明基线化的软件体系结构可以保障系统需求可以控制在合理的

4、成本和时间范围内。6.建立好产品的支持环境。999构建阶段构建阶段 在构建阶段在构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详尽的测试所有的功能被详尽的测试。本阶段的主要目标如下:通过优化资源和避免不必要的返工达到开发成本的最小化 根据实际需要达到适当的质量目标 据实际需要形成各个版本(Alpha,Beta,and other test release)对所有必须的功能完成分析、设计、开发和测试工作 采用循环渐进的方式开发出一个可以提交给最终用户的完整产品 确定软件站点用户都为产品的最终部署做好了相关准备 达成一定程度上的

5、并行开发机制 101010交付阶段交付阶段 交付阶段的目的是将软件产品交付给用户群体。交付阶段的目的是将软件产品交付给用户群体。本阶段的主要目标如下:进行 Beta 测试以期达到最终用户的需要 进行 Beta 测试和旧系统的并轨 转换功能数据库 对最终用户和产品支持人员的培训 提交给市场和产品销售部门 和具体部署相关的工程活动 协调 Bug 修订/改进性能和可用性(Usability)等工作 基于完整的 Vision 和产品验收标准对最终部署做出评估 达到用户要求的满意度 达成各风险承担人对产品部署基线已经完成的共识 达成各风险承担人对产品部署符合 Vision 中标准的共识 111111统一

6、软件开发过程最佳实践和概念统一软件开发过程最佳实践和概念1.短时间分区式的迭代和适应性开发2.使用对象技术3.在早期迭代中解决高风险和高价值的问题4.不断的让用户参与评估、反馈 5.在早期的迭代中建立内聚的核心架构6.不断的验证质量,提早、经常和实际的测试121212高级系统架构师 架构设计思想与原理 常见高层架构 主流架构 小粒度软件架构131313常见高层架构常见高层架构 客户服务结构客户服务结构C/S141414常见高层架构常见高层架构 多极体系结构多极体系结构151515常见高层架构常见高层架构 流处理体系结构流处理体系结构气象台 大型运算161616常见高层架构常见高层架构 代理体系

7、结构代理体系结构Corba(Common Object Request Broker Architecture,公共对象请求代理体系结构)MQ 银行排队问题:排队系统与客户系统连接171717常见高层架构常见高层架构 聚合体系结构聚合体系结构即时战略游戏 控制权转移181818常见高层架构常见高层架构 联邦体系结构联邦体系结构军方 高层体系结构(HLA)是一个使得仿真再用和相互交互更为容易的通用目的结构体系 191919常见高层架构常见高层架构 基于包图的表示基于包图的表示202020常见高层架构常见高层架构 架构设计方法比较架构设计方法比较1,没有一种方法能够适用于所有的应用领域,所以合理的

8、架构设计,往往应该更应该看重方法和思想的融合,把合适的方法到合适的地方。2,设计“优劣程度”的评定标准,大都建立在不可证明的假设的基础之上,所以“优劣程度”评定本身是没有意义的,这种讨论更多的是给出设计的方向,和改进架构的方向,过分强调某项指标往往会得到一个拙劣的设计。3,“设计”首先是解决问题的活动,而解决问题的过程和办法是因人而异的,架构风格往往和架构师本人的风格有关。4,方法是重要的,但只有在支撑环境中运用它们才能得到成功,因此不同的支撑环境,往往更适应某种方法,但是各种思想的融合,是得到优秀设计的基础。212121高级系统架构师 架构设计思想与原理 常见高层架构 主流架构 小粒度软件架

9、构222222主流架构主流架构 struts232323主流架构主流架构 AJAX242424主流架构主流架构 AJAXXMLHttpRequest对象252525主流架构主流架构 ORM1.Hibernat:全自动,注意性能问题2.Ibatis:半自动262626主流架构主流架构 SOA面向服务的架构(Service-Oriented Architecture SOA)是一种形式化的分离服务的架构风格。面向服务的架构关注的是哪些是服务向用户提供的功能,哪些是需要这些功能的系统,这种分离,使用一种服务合约(Service Contract)的机制来完成的。272727主流架构主流架构 SOAS

10、OA 有以下特性:服务具有明确的接口(合约)与策略。服务通常代表业务功能或者领域。服务拥有模块化的设计。服务被松散的耦合在一起。服务是可以被发现的。服务的位置对客户是透明的。服务是独立于传输层的。服务是独立于平台的。服务粒度的控制SOA系统中的服务粒度的控制是一项十分重要的设计任务。通常来说,对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于企业系统架构的内部。构建SOA架构时应该注意的问题服务粒度的控制SOA系统中的服务粒度的控制是一项十分重要的设计任务。通常来说,对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于企业系统架

11、构的内部。282828高级系统架构师 架构设计思想与原理 常见高层架构 主流架构 小粒度软件架构292929面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构封装变化与面向接口编程303030面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构使用适配器模式(AdapterAdapter)调适接口313131面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构纵向处理:模板方法(Template MethodTemplate Method)323232面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构横向处理:桥接模式(Bri

12、dgeBridge)333333面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构代理模式:软件开发需要协同工作,希望开发进度能够得到保证,为此需要合理划分软件,每个成 员完成自己的模块,为同伴留下相应的接口。343434面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构观察者模式:定义对象一对多的依赖关系,当一个对象发生变化的时候,所有依赖它的对象都得到通知并且被自动更新。353535面向对象的设计模式与小粒度软件架构面向对象的设计模式与小粒度软件架构树状结构:组合模式363636高级系统架构师2架构设计方法学设计方案的选择分工经济学中的机会成本沟通成本文

13、档测试架构设计实践持久化存储表结构设计引入新技术的风险Ejb的缺点Spring简介Eai简介373737架构设计方法学面向过程的方法架构设计方法学面向过程的方法 面向过程方法又称为结构化方法,起源于20世纪70年代,主要由面向过程分析、面向过程设计和面向过程编程三部分组成。面向过程分析:帮助开发人员定义系统需要做什么(处理需求),系统需要什么样的输入和输出,面向过程分析的主要工具是数据流图(DFD),这是一种显示面向过程分析中产生的输入、处理、存储和输出的图形模型。面向过程设计:面向过程设计是为下列事务提供指导:程序集是什么,每个程序应该实现哪些功能能,如何把这些程序组成一张层次图。面向过程设

14、计的主要工具是结构图,这是一种表达程序模块层次的图形模型。面向过程编程:具有一个开始和结束的程序或者程序块,并且程序执行的每一步都由三部分组成:顺序、选择或者循环结构,实现这种思想的最典型的语言就是C。整个面向过程设计的根本目标是:把复杂的系统分解成简单模块的层次图。整个面向过程设计的根本目标是:把复杂的系统分解成简单模块的层次图。383838架构设计方法学面向对象的方法架构设计方法学面向对象的方法 面向对象的方法由面向对象分析(OOA)、面向对象设计(OOD)以及面向对象编程(OOP)三部分组成。面向对象分析(OOA):定义在系统中工作的所有类型的对象,并显示这些对象如何通过相互作用来完成任

15、务,主要工具是统一建模语言(用例图用例图、活动图、状态图活动图、状态图)。面向对象设计(OOD):定义在系统中人机进行通讯所必需的所有类型的对象,并对每种类型的对象进行细化,以便可以用一种具体的语言来实现这些对象。(类图类图)面向对象编程(OOP):用某种具体语言(C+、Java、C#等)来实现各种对象的行为,包括对象间的消息传递。393939架构设计方法学体系结构设计的基本方法架构设计方法学体系结构设计的基本方法 面向过程思想的本质是复杂功能按一定的层级逐级分解子功能模块,始终围绕实现处理功能的“过程”来构造系统。这种金字塔型的架构在需求不变更的情况下是很稳定的;然而用户需求大都会发生变化,

16、因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的,用户需求变化往往造成系统结构的较大变化,从而需要花费很大的代价才能实现这种变化。优点:层次清晰、容易理解缺点:应变复杂需求的能力差面向对象设计的思想是以现实世界对象所具有的特点(状态、行为)来思考设计的。同时这些对象具有这些特征:封装、继承、多态;优点:以现实世界的角度思考问题,对于复杂需求有很强的应变能力缺点:以面向对象的思维来设计系统,而现实世界的事物间的层次、关系是很复杂的,这样设计出来的系统架构不清晰,不易理解。404040架构设计方法学体系结构设计的基本方法的应用架构设计方法学体系结构设计的基

17、本方法的应用综合两种设计方法的优略:在总的架构设计方面,我们应该采取面向过程的的设计方法,以保证整个系统架构的稳定性、程序架构的清晰性,而在每个具体的分层,应该采用面向对象的设计方法,以保证能应对复杂的业务需求。典型架构:J2EE架构414141架构设计方法学经济学案例架构设计方法学经济学案例分工1农场主牧场主牛肉24土豆3240农场主牧场主牛肉12土豆1620农场主牧场主牛肉3土豆3210424242架构设计方法学经济学案例架构设计方法学经济学案例分工2农场主牧场主牛肉13土豆1824在这个案例中牧场主无论生产何种产品都比农场主有优势(经济学上称为比较优势)机会成本:为获得某事物而必须放弃的

18、东西 牧场主生产1斤牛肉的机会成本是10斤土豆,而农场主生产1斤牛肉的机会成本是16斤土豆。牧场主生产牛肉的机会成本比农场主小的多,比较优势比较大通过贸易可以获得双赢的局面434343架构设计方法学经济学案例架构设计方法学经济学案例分工3同样的相对于软件工程领域,机会成本这个概念也是非常有用的。每个开发人员都有自己的比较优势,无论是从经济学的角度考量还是从软件的开发维护难度考量,我们都提倡分工。让每个人关注于自己相对擅长的领域,这样可以提供总的生产力。问题:对于软件工程领域,是不是分工越细越好呢?问题:对于软件工程领域,是不是分工越细越好呢?答:不是,单单从机会成本角度考量,似乎分工越细,总的

19、生产力就越高。但是IT业还要有个重要的因素要考量:沟通成本沟通成本对于一个项目如果分工太细,势必会大大增加我们的沟通成本。那分工的粒度如何确定呢?那分工的粒度如何确定呢?每个行业有每个行业的分工粒度的适用范围。以一般的B2B商业应用领域常用的软件架构J2EE为例:web层、业务逻辑层、持久化层。这样的分工并不是我们自己凭空想出来的,是商业应用开发多年发展得到的一个经验值。避免教条主义避免教条主义并不是每个软件开发公司、部门这样分工就会获得生产力的最大提升;每个软件开发部门在自身所处公司的不同历史阶段会采取与自身相匹配的开发策略444444架构设计方法学沟通成本架构设计方法学沟通成本13人和5人

20、开发一个程序相互通信和交换意见的关系如下图所示 将N=3和N=5分别代入上面公式。Ec(3)3(3-1)/23 Ec(5)5(5-1)/210 454545架构设计方法学沟通成本架构设计方法学沟通成本219人,通讯数27,通讯数与人数比为27/191.42,与四个人相比,N=4的通讯数为4(4-1)/2=6,通讯数与人数比6/4=1.5,工作效率实际上比四个人略优,但工作量大得多了。如果不采用合理的方式,以N=19计算,19(19-1)/2=171,通讯数与人数比为171/19=9,这样工作效率是非常低的。464646架构设计方法学沟通文档架构设计方法学沟通文档沟通的一个重要途径:文档对于一个

21、大项目,项目成员和模块较多,则各个小项目组间开发的一个重要依据就是接口文档,接口文档必须得到详细清晰的定义,不能随便更改。文档的作用:从整个纯软件公司来说,对于大部分的用户,像用例图之类的需求分析文档,用户一般都不怎么看,开发方如果跟他确认,他一般都会确认没有问题,但是到最终产品上线后,用户是及其有可能反悔的(虽然以签合同的方式能保证软件公司的利益,但是从长期合作的角度考虑,一般都不会把长期合作关系搞坏)。对于我们公司来说,虽然以需求规格说明书的方式定义了我们应该开发的内容,但是业务方会不会认真的去读就不太清楚了。对于开发组来说:文档最重要的一个功能是开发组内部沟通的一个接口。但是目前大多数需

22、求都是一个人从头做到尾。沟通交流的功能暂时好像也不存在。文档的另外一个作用:记录本项目、需求的经验数据、方案(项目开发时间的评估、架构的选择方案分析、新技术选择的优略),为以后的项目、需求提供一定的知识库可供借鉴。文档的内容:应该是实质大于内容,虽然我们可以以UML提供的各种视图来表述我们的需求分析、设计方案;但是并非一定要使用这些来表示。UML出现的初衷也是为了规范交流的工具,都是为了降低沟通成本。而如果我们有更简单易懂的表述方法来表示我们的思想时,可以考虑采用更简单易懂的做法。474747架构设计方法学风险管控架构设计方法学风险管控业务风险:业务风险:对于复杂需求,前面提到如果客户就根本没

23、有心思去看需求规格说明书的时候,我们该怎么办?策略:DEMO现行的原则,我们可以先实现相关页面,相关的演示数据都是程序里写死的。然后演示给客户看,客户有意见则继续修改,直至客户认可使用界面为止。如果程序写死后台处理的演示数据,那真实的开发怎么办。facade模式模式(实现了调用方与具体的业务逻辑实现的解耦):struts-facade-besiness object&layer-persistence object-hibernate-dbs 技术风险:技术风险:对于架构师而言,在项目初期应该预见系统实现的难点,对于风险点高的部分应该优先考虑,应该在项目的早期就应该解决,而不是到后期发现后才修

24、修补补,或者用替代方案解决,此方案必然导致系统的架构复杂、凌乱,还可能导致项目的延期。其它风险:其它风险:人员变动、项目异常终止等等,属于不可控因素。484848架构设计方法学谈谈测试架构设计方法学谈谈测试 对于测试:纯软件公司一般都存在测试组。工作范围:日常的版本测试工作:黑盒、白盒、单元、集成、功能 测试、性能测试、压力测试;应该记录统计程序bug的数量,每个bug产生的原因时什么,为决策者提供相应的决策依据。承担起新技术的测试论证工作,为项目决策者对于是否可以使用某项新技术给与论证。494949架构设计实践持久化存储架构设计实践持久化存储 持久化存储有三种方式:文件形式:数据量小,数据间

25、的关系较为简单时使用(demo演示数据,简单需求)LDAP:轻量级目录访问协议,存放结构简单而数据量大的信息。LDAP服务器都为读密集型的操作进行专门的优化大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。(存储的组织形式:二叉树)(案例:注册表)数据库:适用于数据结构复杂的数据存储。505050架构设计实践数据库开发历史架构设计实践数据库开发历史 最原始的阶段,各个DB厂商各自为营,独立开发自己的数据库驱动程序。业界没有个统 一的接口,给程序的移植性、开发人员理解各个厂商的接口标准带来

26、了一定的难度。随着历史的发展,出现了一个国际标准化组织将各个数据库驱动的接口统一(ODBC、JDBC)。虽然有了一个业界通用的标准,对于数据库厂商来说,不可能再单独按照标准开发一套驱动程序。引出另外一个设计模式:适配器模式适配器模式515151架构设计实践数据库的表结构设计问题架构设计实践数据库的表结构设计问题1关于代码表中代码定义的读取:传统做法:select a.*,b.description from busi_tabel a,code_table b where a.status =b.code;我们为了在页面上现实一些代码的中文含义,一般都习惯在读取业务表时关联代码表。在代码中文含义

27、少量适用的时候,这样做并没有什么问题。当系统中的大量页面都适用了这些基础代码表,而这些代码的具体含义都时通过表关联的方式获取时会带来一定的性能问题。解决方案:将这些基础代码表的信息加载到内存中。在使用时再从内存中读取。案例:核心业务系统中的 t_string_resource表。525252架构设计实践数据库的表结构设计问题主键架构设计实践数据库的表结构设计问题主键 Table主键的设计:主键应该是有意义的还是无意义的?对于不同的业务场景,可能会有不同的选择。具有实际业务意义的字段,具有“意义更改”的可能性,而主键的变更则会带来很多问题,oracle不支持级联修改,这就意味着在其它引用了有意义

28、的主键的地方你要写额外的程序来维护这些设计(trigger),如果你忘记修改,则会给程序的运行带来很多意想不到的问题。535353架构设计实践数据库的表结构设计问题主键架构设计实践数据库的表结构设计问题主键2主键的选择:1、实际业务的业务编号(t_company_organ)2、oracle的sequence3、max加1,在程序中控制,每次主键都是在原表的最大值后加1;实现1:在db中维护这样一个表记录,记录该表的最大主键值,每次insert时,max加1即可。每次查询时需要锁定(select pk_value+1 from table_a where table_name=?for upd

29、ate),否则可能会读到葬数据。实现2:在程序中实现这样的一个单例类单例类,通过程序来生成值最大的主键。对于只有一个 JVM的情况,没有问题,对于分布式应用的开发,不好控制唯一性。4、方案2、3都存在一个问题,就是当我们的应用系统的数据库跟单位的组织架构一样具有层级,而且下级的数据需要向上级汇总,这个时候问题就来了,各个下级系统的业务表的无意义的主键在汇总到上级机构时会有冲突,而如果使用有实际业务意义的业务编号作为系统的主键就不存在这些问题。当然我们还有别的选择:GUID(根据一定的算法,系统时间,网卡MAC地址、CPU序列号等因素考虑生成的随即码)545454架构设计实践数据库的表结构设计问

30、题架构设计实践数据库的表结构设计问题IO操作操作简单描述table/segment(data,index,rollback)/extent/block之间的关系table创建时,默认创建了一个data segment,每个data segment含有min extents指定的extents数,建表的时候初始化分配一定的空间,如 果空间不够则继续扩展,每一次的都是按照一定的大小来扩展的。每个extent据据表空间的存储参数分配一定数量的blocks 如果影像文件信息存储在DB的blob字段,影像文件在db中必然占用多个extent,对于频繁的存取blob,必然导致频繁的IO调用。效率低下。常用

31、的解决方案:在table中只存储影像文件在文件系统中的存储地址,而不是直接存放在blob字段中。实际应用:核心业务系统中的 t_image 555555架构设计实践数据库传统持久化的开发架构设计实践数据库传统持久化的开发以JAVA开发数据库操作为例:传统的数据库操作都是:getConnection,createStatement,execute,close;这样的设计会导致代码的冗余度高,而且每个开发人员都得维护自己的数据库连接、语句、结果集资源等等,在程序没有bug的情况下一切似乎运行的没有问题。但是如果那段程序没有关闭游标,没有关闭连接,问题就来了。对于整个应用系统来说,有时候就会报无足够

32、的连接,没有足够的游标的错误。但是一重启系统,又好了。很难定位问题的所在(我们很难判断是确实因为系统资源不足引起报错,还是程序问题引起的)。解决方案:ORM,全称是Object/Relation Mapping,即对象/关系映射。产品:Hibernate,TopLink,JDO,iBatis 这些系统级的问题全部由ORM产品来解决,我们关注于应用领域的开发。ORM并没有降低我们的开发工作量,工作量从写java程序转移到xml文件的配置上。问题似乎解决了,终于可以高枕无忧了,事实远非如此。问题似乎解决了,终于可以高枕无忧了,事实远非如此。565656架构设计实践架构设计实践 引入新技术的风险引入

33、新技术的风险1以Hibernate 为例:在解决前面所述的开发问题上,Hibernate 确实做的不错。不过所有的数据库操作全写在xml文件中,在实际运行时,都是通过反射机制来实现。反射机制简单举例:Object obj=Class.forName(“class name”).newInstance();由于通过反射机制来使用,必然导致效率会比原来低一些。新技术带来的问题:举例:update语句,对于一般的jdbc访问,只需要写一条update语句就可以了。而Hibernate之前的版本的做法是,先select出符合update条件的语句,再逐条update。在极端情况下,效率会非常低下。se

34、lect语句,在Hibernate 1.0版本上,默认除了查询出主表的信息,还会把有主外键 关联的其它表的信息也一同查询出来,这样必然会额外占用系统的资源。而这些问题你可能在项目上线后才会发觉到,因为在项目开发过程中,由于测试数据比较少,很多问题都很难发现。575757架构设计实践架构设计实践 引入新技术的风险引入新技术的风险2除了新技术本身具有的难以觉察的风险外,开源技术本身还具有的其它风险:新技术本身很有可能只是昙花一现,没有后续的升级支持版本。这对于企业开发来说是不可想象的,这意味着原来的新技术解决方案在项目的后期很有可能需要重新改造,成本是昂贵的,还不如一开始就使用老技术。开源技术的版

35、本升级一般不考虑兼容性,升级版本对于同一个方法可能接口会发生改变,或者删除老版本的一些接口,或者方法本身的接口没有发生变化,而实际完成的工作可能已经发生变化。(当你好不容易等到一个升级版本发布后,满心欢喜的以为升级版本会解决原来的问题,然而你会发现原来低版本的程序现在都不能使用了,接口被删除了。)而一般的产品则不会出现以上的问题:以sun的JDK版本为例,每个升级版本都还是会向下兼容的。例如:java.util.Date对象,虽然在新版本中不建议使用,但是sun并不会把这个类给删除。而是标志为:Deprecated 重新引入的日期类:java.util.Calendar由于包含了很多复杂的功能

36、和时区信息,所以Calendar 是以单例模式单例模式来实现的。在JVM一开始加载类时,就将额外的信息加载,而不是每次都new一个对象,提升资源利用。585858架构设计实践架构设计实践 引入新技术的风险引入新技术的风险3是否新技术就不值得引进呢?应对策略:引入时机:应该等新技术成熟以后才使用,最好是新技术出来12年后,出了一些后续版本,等论坛上批评的声音相对少了很多的时候才可以考虑使用。充分测试:必须让测试组对这项技术进行比较全面的测试后,由测试组提供相应的测试结果以供项目决策者来决定是否使用。595959架构设计实践架构设计实践 中间件的引入中间件的引入 在中间件技术出现以前,我们传统的开

37、发方法,除了关注业务逻辑,更加需要关注非功能性的 需求(安全,事物、线程等等)。以银行取款为例:取款本身的业务逻辑并不复杂,验证用户信息,检查余额与取款数额的关系,更新账户余额等。而实际的开发代码中有80都是用于安全,事物处理等系统方面的问题。导致开发成本非常高。中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件软件管理着客户端程序和数据库或者早期应用软件之间的通讯。中间件在分布式的客户和服务之间扮演着承上启下的角色,如事务管理、负载均衡以及基于Web的计算等。中间件技术刚开始出现时,吹嘘的也正式这个卖点,让开发人员关注于业务逻辑,系统级的问题由中

38、间件来解决。以EJB为例:EJB刚开始出现时,由于他的名声大,导致很多人都以为EJB就是J2EE,开发企业商业应用必然得采取EJB技术,开发人员处于提升自身能力考虑,而且领导也认为EJB是好东西,架构设计必须使用EJB技术。606060架构设计实践架构设计实践 中间件的引入中间件的引入EJB的缺点的缺点1、EJB的问题根源来自于“以规范驱动实现”,历史告诉我们,最成功的标准都是从实践发展来的,而不是由哪个委员会创造出来的。2、EJB善于实现业务对象分布的体系结构,然而这种体系结构究竟有多大程度的普遍性。3、EJB目前使用的最广泛的也就是SLSB(无状态session bean)和MDB(消息驱

39、动bean),而这两个恰恰是规范中描述最简单的,再次验证了“最简单的也就是最经久耐用的”4、使用EJB的成本过于高昂,必须购买EJB容器。5、EJB规范过于复杂,没有多少开发人员,架构师有时间来读懂它。6、测试难度大,EJB的测试依赖于EJB容器,难以测试ejb中的业务逻辑。7、EJB致力于解决的中间件问题,目前已经有了更好的解决方案AOP;8、过度工程,为了实现一个简单的业务逻辑,我们往往要开发一堆重复的代码。9、效率,ejb的相互调用都是以远程连接的方式来实现的,而实际调用的却是同一个JVM中的对象方法。616161架构设计实践架构设计实践 J2EE的分布式和可扩展性的分布式和可扩展性 很

40、多J2EE的开发者相信,要想构建一个可扩展的系统,最好的途径就是使用分布式的业务对象。这种观点认为,可以使用4个web容器、8个ejb容器,所有业务对象都通过web层远程调用。这样一来,就可以对系统的处理能力进行细粒度的控制如果吞吐量上升,可以在按照需要,要么增加web容器、要么增加业务对象所在的ejb容器,这种方法可以获得最佳的可扩展性。这里的核心问题是,每次远程方法的调用造成的性能代价太过高昂,以致于理论上还有什么收益的话,也早就被网络传输和对象编组中的损失给大大超过了。对于并置方案来说,每个应用服务器都加载了所有的J2EE组件(包括web层和业务对象)。为了实现可扩展性,可以对整个应用系

41、统实现集群式的部署,然后利用硬件负载均衡F5或者web容器的负载均衡功能来分流访问。相比较而言,分布式的架构不见得有比并置架构有更好的可扩展性。而并置架构在应用服务器的成本上要大大低于分布式架构。其实应用的可扩展瓶颈在于底层数据库,搭建数据库的负载均衡。626262架构设计实践架构设计实践 Spring简介简介Spring是一个流行的开源的J2EE应用框架。特点:解决被其它框架忽略的部分。在J2EE的各个具体领域都有很多出色的解决方案web框架、持久化方案、远程调用框架等等。Spring的目标就是提供一种贯穿始终的解决方案,将各种专用框架整合成一个连贯的整体框架。因此,我们说Spring是一个

42、应用框架,应用框架,而不是web框架、ioc框架、aop框架或者中间层框架什么的。易于选择。Spring有一个清晰的层次划分,用户可以使用其中的单项功能,而不是将自己的整个世界观强加给用户;例如:可以使用JDBC抽象层或者Hibernate集成。易于使用鼓励最佳时间。Sping力求遵循最佳实践例如“针对接口编程”非侵入性。应用对象应该尽量避免依赖框架。只依赖于具体使用的功能,而非框架。统一配置。应用配置灵活统一,不需要自制Singleton和工厂,从中间层到web控制器,所有的配置需求都可以用统一的方式满足。易于测试。Spring的目标是让现有的技术更容易使用。636363架构设计实践架构设计

43、实践 IOC思想简介思想简介-1业务对象的管理:我们可以通过容器来管理业务对象(如ejb容器),也可以选择不使用容器。甚至不使用一个整体的应用框架。这样会带来这些问题:编写大量的singletom类,大量的工厂类,处理形形色色的配置;有人习惯用properties文件保存配置信息,有人习惯用xml或许和数据库方式。没有容器的帮助,我们通常很难在应用中清晰的区分出一个服务层,缺乏整体统一性也会带来更高的维护成本。容器提供的服务:对象生命周期的管理。查找对象服务。容器的核心就是一个工厂。对象配置管理。提供统一的方式来配置对象运行时所需的参数依赖决议。容器不仅可以管理String、int之类简单类型

44、的配置,还可以管理其中各个对象之间的关系。管理应用代码,而不给应用代码强加对容器的依赖。646464架构设计实践架构设计实践 IOC思想简介思想简介-2 IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。IOC的实现策略:1、依赖查找(ejb JNDI查找)2、依赖注入(设值注入、构造子注入)656565架构设计实践架构设计实践 IOC思想简介思想简介-3 Hello!Rick 666666架构设计实践架构设计实践 AOP思想简介思想简介 AOP 面向切面,即方法拦截,可以让我们在不

45、修改业务代码的前提下,在业务代码执行前后进行执行相应的模块,包括日志、安全检查、事务处理,自定义的处理等等。这样,我们就可以把诸如日志的功能模块合核心业务模块分隔开来,以往的的日志做法都是由核心模块主动的调用日志记录功能,耦合性很强,使用AOP技术,可以将日志模块作为切面,插入到核心业务前执行,和行业务并不主动的调用日志记录功能。EJB只不过是AOP实现的一个子集。EJB提供的只是预先定义好的关注点:事务管理、线程管理、安全性。与AOP相关的几个模式:装饰器模式:只能针对目标类编写定制的装饰器,如果需要对所有业务对象都编写装饰器,给模式不是一个可行的办法。观察者模式:在某些情况下可以达到与AO

46、P相同的效果,不过需要在业务方法中插入与业务逻辑无关的代码来主动发布事件通知。责任连模式:允许将请求在对象链上传播。与AOP中的拦截链有几分类似,不过使用这个模式需要了解责任链的很多血竭,对于每个需要责任链的地方都必须单独为它设置一条责任链,不是通用的解决方案676767架构设计实践架构设计实践 EAI简介简介EAI:Enterprise Application Integration 企业应用集成。EAI是为了表述企业内部各个计算机应用系统之间的数据和系统业务功能的完全共享,而产生的一个专业术语。而今,它对于企业间的应用及业务连接、B2B的发展,正起着至关重要的作用。EAI的集成建立在一个由

47、中间件组成的底层基础平台上,各种“应用孤岛”、“信息孤岛”通过各种适配器连接到一个总线上,然后再通过一个Message Queuing实现各个应用之间的交流。在业务人员的眼中,它们便成为一个个召之即来、挥之即去的模块。各个EAI供应商几乎都会提供一些开发包,以便企业定义、升级适配器及定义管理流程。686868架构设计实践架构设计实践 EAI简介简介2企业进行具体的EAI导入时,主流的方法主要体现为数据集成、应用集成和流程集成这三个层面。数据集成 这是一个基本的集成。应用集成与业务集成都建立在此基础上。方法主要有数据的转换、数据格式的定义、规则的描述、数据的整理及再加工等。集成包含数据共享、数据

48、迁移及数据复制等。主要难点有数据格式的转换、数据冗余以及完整性的保持等。(发布订阅机制)应用集成 这是EAI中关键并难于实现的一环,指各个E-business间的集成,比如CRM、ERP等系统之间的集成。业务集成 企业中事件的处理、操作的流程化。业务流程的前身是Workflow,即工作流程。它由一系列的活动相互连接,从而完成特定的业务活动。应用集成和业务集成实现的方法为:API调用、业务组件调用以及目前最新的基于服务功能调用三种方式实现。696969设计模式设计模式facade模式(门面模式)模式(门面模式)外部与一个子系统的通讯必须通过一个统一的门面(Facade)对象进行,这就是Facade模式。效果:为客户端的调用屏蔽子系统的实现,调用方不必知道子系统内部实现的调用关系。为调用方和子系统解耦,子系统内部实现的变化不会影响调用方案例:慈济健康体检707070设计模式设计模式Decorator模式(装饰器模式)模式(装饰器模式)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!