锁定老帖子 主题:浅谈企业应用架构(一)
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-05
作者:Anders小明 一、什么是架构 在牛津高阶词典(第7版)中,架构(architecture)一词的解释是:the design an structure of a computer system,而架构师(architect)一词的解释是:a person who is responsible for planning or creating an idea, an event or a situation。 针对于企业应用,依据不同的关注点,架构可以分为如下几类: 业务架构(Business Architecture):关注于业务及其流程; 应用架构(Application Architecture):关注于应用系统设计; 基础架构(Infrastructure Architecture):关注于基础技术; 数据架构(Data Architecture):关注于数据存储及其规划; 这里所说的企业应用架构,即属于应用架构,包括如下几个部分: 1.目标和愿景。即应用系统所面临的问题域。 2.评价指标。从哪些纬度和指标来评价和度量解决方案。 3.原则和方法论。为解决这些问题,所采用的原则及其方法论。 4.技术架构。架构的技术层面,给出相应的设计以及结构,描述应用系统。 5.组织因素。架构的组织层面,组织的各个部分如何参与。
二、架构的目标和愿景 1. 架构的问题来源 1. 外部,客户要求包括了业务和技术上。 2. 内部,组织管理、项目管理和技术发展上。 特别的,架构需要解决的非业务问题包括如下: A.系统目标:系统性能,稳定性等。 B.项目目标:开发成本,项目质量等 C.项目过程:需求的不确定性和开发过程的团队协作性,即所谓的开发管理。 2. 架构的核心问题 问题可分解为两种类型,业务上和技术上。 1. 业务上。问题域分解为,逻辑的纵向抽象层次,以及逻辑的横向模块分解和集成。 2. 技术上。问题域分解为,纵向的技术主题,以及横向的技术职责的分解和集成。 A.领域化 传统的架构模式是三层或者四层模式,虽然从技术上有效的横向分解系统结构,但对业务模型如何建立,如何进行层次间传递,模型间关联关系,以及与服务逻辑耦合等问题没有给出进一步的细化,也带来了很多问题。 此外,在传统设计方法下,分析模型和设计模型的转换也是一个大的问题。 B.组件化 实施组件化或者说模块化,其需求分为两个层面。 1.内部管理,可以帮助开发过程中进行业务切分,帮助控制进度,降低风险,以及财务分析;对于大型复杂的项目,也有利于知识的传递和积累。 2.销售需要,All in one的系统因不符合发展趋势而不利于销售;组件化有助于产品销售,可以针对客户,将若干组件打包销售,同时减少集成的风险。 C.产品化 C.1 定制化问题 定制化问题的由来:1.面向行业的应用通常没有标准,或者完备的标准;2.通常产品的开发是针对于通用或者公共需求,不针对于特定客户;3.而一个确定的客户,其自身的业务差异和管理差异导致需求的差异性。 这种现象尤其在缺乏标准的行业应用中,以及系统的产品化过程中。 传统的简单的解决方式是为每个客户单独维护一个系统分支,在此情况下提供维护和升级,则维护成本巨大;因此如何解决领域的定制化就成为一个重大问题。 C.2 升级问题 领域需求每次进一步的挖掘和实现,都意味着领域的升级。但升级面临的诸多问题:数据迁移,旧版本的兼容问题,依赖关联等等,在组件化和定制化情况下,还面临定制化兼容和冲突检测。 C.3 国际化问题 1.文本消息国际化 国际化消息没有直接呈现,而是中间存储后呈现; 2.布局国际化 阿拉伯人是从右到左; 3.业务时间,跨时区; 4.计量单位,多币种; D.平台化 应用系统可以分为两个内容:应用程序和基础设施。应用程序处理业务问题,而基础设施处理技术问题。 来自客户的要求是包含业务和技术两个方面。其中技术上包括两种“定型和定性”,其所需的知识和技能是不同于业务上的; 此外,内部管理也提出相应的要求。由于技术的发展和业务发展之间的不同步,对于一个产品而言,同时存在技术升级和业务升级两个需求。而同时升级存在较大的成本和风险。 同时对于一个产品来说,技术方面需要较强的适应性,能够低成本上的适应客户的特别要求。 因此有效解藕技术和业务两个部分成为必然。 3. 架构的应用问题 A.事务管理 数据一致性问题出现的原因通常是开发过程中,由于错误的并发和事务控制导致的;而在业务过程中也存在错误的业务操作情况。 B.并发处理 不同的业务应用存在不同的并发场景(并发度以及存在的业务依赖),因此业务上需要明确原则和方案;而不同平台所支持的并发方式和能力也不相同,则采用一定框架支持有助于简化问题。 C.集成能力 业务应用所面临的集成问题不同,包括不同的集成环境:外部系统,内部系统,遗留系统等;不同的集成模式:基于文件,基于数据库表,基于消息等,导致所需的集成方法及其能力也不同。 4. 架构的设计问题 分析设计和开发实现存在着一定的差异性:分析设计属于知识级,而开发实现属于操作级的。 分析设计是需求和实现的中间桥梁,因而设计必须解决系统边界的合法性,内部逻辑解藕的合理性和实现的可达性(设计的类方法为实现的30%-70%)。而开发实现需不断重构代码,采用约定和框架能力等技术手段解决开发的实际问题,解决程序级别的健壮性,可读性,可维护性以及可测试性。 传统的方式,分析设计存在于文档中,而开发实现存在于代码中。两者的割裂导致沟通的困难,也导致了开发工程中具大的风险——分析设计和最终开发实现的不一致性。 三、架构的评价指标 1. 财务角度 在传统的财务核算机制中,系统或者产品的开发通常属于成本中心,对于IT企业来说,电脑设备,办公室等属于沉没成本,而IT人员的工资属于可变成本,是成本的核心部分,为了控制成本,就需要减少项目的开发时间。 因此架构一个重要的关注点在于控制开发成本和维护成本,通常讲维护成本是开发成本的3倍。降低开发成本核心,在于提高效率、提高适应需求变化的能力。 2. 技术角度 技术角度评估架构很难说一个架构行或者不行。技术角度需要给出的最大指标是风险性。而风险性和各个指标因数有很大相关,但还需要结合相应实际情况判断。例如:如果决定了不可能换数据库,那么即便强绑定oracle也没有特别的风险。 以下指标参考了架构的质量特性,但进行了裁减。 A.内部指标 1.侵入性。或者说是可迁移性,即系统与外部资源的关联关系,以及系统内部的关联关系。例如,如果架构决定使用pl/sql,那么就意味着架构和Oracle数据库是强绑定。 2.重复性。虽然我们都知道关于重复的两个原则(1.不要重复,2.不要自己重复),但是有时重复看上去无法避免,那么就是判断这个重复性带来的问题有多大。 3.扩展性。即架构提供何种条件下的何种扩展和变化能力,及其成本。 4.平稳性。在业务或技术扩展时的,架构所呈现的发展态性。 5.抽象性。即可视性,并包括了概念完整性。系统是否完整以及层次化的反映应用问题,能否明确的呈现和表达。 6.修改性。包括了可重构性,代码级别的侵入性以及单元测试能力。 7.诊断性。系统提供的实时观测能力。 B.外部指标 1.性能。 2.可靠度。 3.可用度。 3. 组织角度 组织角度涉及两个方面:人和流程。 人的方面,架构需要组织的角色参与(业务专家,技术专家)及其参与度,以及涉及到人力资源匹配情况。若架构所需的技术如果太新或者太窄,将面临人力资源的困境。 流程上,要看架构是否与流程匹配。架构原则指导下不同角色在不同阶段关注点不同,而工程实践中,不同流程阶段需要提交的产出物也不同,此时就可能存在二者不匹配的情况。 四、架构的原则和方法论 1. 原则 总原则是:关注点隔离。 在解决各类问题都应以此原则为指导。但针对于不同层面该原则的变化不同。针对于高层设计(概要设计):合理划分逻辑边界;针对于详细设计层面是:任何改动最多涉及一个接口和一个实现类(简单类职责的变体)。
2. 方法论 方法论有两个:自上而下,由内而外。 其对应的完整理论体系为:面向对象/面向方面,领域驱动设计以及测试驱动设计。
3. 发展与演化 A.总结归纳型 这个方式最常见。程序员所需要面对的问题是:在有限的时间、资源,面对有限的需求,在容错范围内的做出一定的产品。在这种有限条件下反复训练出来的决策机制,使得程序员对归纳法有着特殊的偏好。它对于程序员开发的大部分工作都是行之有效的。 B. 技术思辨型 通过更广泛的分析,获取深刻的理解和普遍的关联,以创造新颖的技术。所谓大牛们正是如此。例如GC算法,例如AOP技术。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-06
潜力贴。可惜我没有这么高的层次,学习了
|
|
返回顶楼 | |
发表时间:2009-05-06
看不懂,看不懂
|
|
返回顶楼 | |
发表时间:2009-05-06
最后修改:2009-05-06
不经意间,以为翻开了上学时的课本。必须承认,我没看完
|
|
返回顶楼 | |
发表时间:2009-10-21
写的非常好,如果你是原版,那么你肯定从事了多年的开发,有丰富的经验
|
|
返回顶楼 | |
发表时间:2009-10-21
做伟大的事业,不是说说就能起来的。
|
|
返回顶楼 | |
发表时间:2009-10-21
楼上初步总结了一些,我本来有想法打算写一个架构师之路系列的文章,总是难得动笔。
今天太晚了,改天我写一些comment,愿和楼主做些交流。 |
|
返回顶楼 | |
浏览 4924 次