`
yimlin
  • 浏览: 139460 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

如何定义和建立架构

阅读更多

作者: Anders小明  

在牛津高阶词典(第7版)中,架构(architecture)一词的解释是:the design an structure of a computer system。这个解释实际上已经描述了架构的本质:架构是关于怎么做(构成系统)的,而非做什么的。更进一步,架构是由人来设计实施,因此架构实际上是一个文化(culture)——我们怎么认识或理解系统/产品的,并且我们准备怎么做,在做的过程中我们认为什么是好的,什么是好的等等。

任何系统都有架构,无论多小的系统都有。区别在于其架构是否是经过明确设计并表达。一个合理的架构无疑是经过精心设计和维护的,而进行架构设计,或者说定义/建立一个架构可以分为如下几个步骤。

特别的,本文针对于企业应用架构,其他应用未必适用。

 

基线准备

如果建立第一版架构(即从零开始)可以跳过此步,但对于建立第n版(n>=2)架构,则需要进行基线准备。通常从上一个架构设计开始,去除不在必要的内容作为基线。

 

非功能性需求的收集、分析和细化

这步骤非常关键,本质上架构关注的是系统的非功能性需求,虽然不是系统的全部,但无疑是最重要的20%,而这也是不同公司/产品的架构差异性的根源。

一个完整的非功能性需求列表不仅仅来自业务部门(系统客户),还需要包括开发/研发管理层以及开发团队。实践中可以如下检查列表来帮助收集:

l         目标应用,企业应用和互联网应用就不太相同

l         目标环境,系统部署的硬件环境、网络环境等,更有云计算环境和传统服务器环境的差异。

l         常见技术指标

n         稳定性/可用性,主要是MTBFMTBR指标要求

n         性能,如Web应用下单次操作1/5/10原则,相关并发压力要求等

n         容量,主要是数据容量,此外有时还要考虑内存的限制

n         实时性,涉及到数据同步/复制/消息传播/异步操作

n         易用性,这个指标不容易衡量

l         系统/项目/产品自身,来自客户

l         管理指标,主要来自管理层

n         成熟度/培训招聘成本

n         产品化/定制化

n         组件化

n         领域化

n         标准性

n         平台化/小型中间件

n         集成性/兼容/迁移能力

涉及遗留系统,关于兼容需要明确的兼容方式和兼容模式。兼容方式包括:语义兼容/源代码(语言级/API级)兼容/运行时兼容(运行库/二进制);兼容模式:向前兼容/向后兼容。

n         1.4.6 容错性

包括速错能力和消除易错机制(error-prone mechanism

n         1.4.7 升级性

以上列表略显草根性,实际过程中也可以从架构评估角度反向进行非功能性需求收集,可以参考《Attribute Based Architectural Evaluation》。

一次性完整地收集非功能性需求并不是件容易的事,因此在架构发布后也要不停的进行改进。

 

架构定义

完成非功能性需求并明确后,就可以进行架构定义了。架构定义可以分为三个部分:设计、选型以及构建和评估。

 

架构设计

这个阶段相对务虚,但却是整个架构定义的基础,决定了所有的后续工作。主要包括如下三个工作内容:

l         确定架构手段,包括架构的原则、规范、模式、工具、框架/平台和语言,以及这些手段的适用范围,哪些问题应用工具来解决,而另一些问题采用哪个框架/平台完成,还有一些通过原则或规范处理。

l         确定组织分工和流程,不同的工作通过组织内不同角色完成。

l         确定结构化范围,区分系统内和系统外,并非所有非功能性需求都是通过系统的手段解决,适当采用系统外手段甚至更简单和准确。

 

技术选型/预研

纸面上的架构其约束性和可操作性非常低,为了让架构从三万英尺的高空落地有两种办法:流程和平台。其中,流程是由组件分工完成,而平台构建通常不会从零开始,实践中会尽可能利用已有成果:商业产品和开源产品。因此技术选型以及预研工作则显得非常重要。

进行技术选型需要注意两个关键点:

u       评估单项技术的有用性(技术功能)和可用性(非功能性需求,即使用成本)

有用性是指相应的技术功能点是否解决架构所面临的功能性和非功能性需求;

可用性是指是否满足整体的非功能性需求,如性能、容量和稳定性。以及管理层关注指标(使用成本),如技术成熟度、标准性、培训招聘成本以及产品的生命周期,以及License费用等。

u       保持全局视角

关注全局,木桶理论的再次应用,避免某项技术存在的缺陷影响整体。

主要的选型内容如下:

l         语言,不同语言所能提供的开发能力是不同。而且开发语言直接影响到后续技术的选型以及人员的招聘。

l         框架/平台,提供运行环境和集成环境。

l         工具,古话说:磨刀不误砍柴工。但要注意避免工具中心论,正确认识工具的用于——工具是帮助我们解决一些脏活累活的,除此外无它。在整个架构中,工具的作用是大大低于语言和框架/平台。

除去技术选型外,对于一些不确定的内容,还需开展预研工作,验证其可行性或者进行性能测试。

 

架构构建和评估

如前所述为了使架构落地,在技术选型后完成后进行架构构建,包括了定制化设计和开发,并进行质量保证。

架构构建的结果通常分为三个层次:

l         集成环境,提供一个开发的脚手架,这个是最低层次。

l         编程模型,提供一个统一的编程模型,包含了自定义框架和类库,并对底层技术提供了一定封装和隐藏。当前的趋势是:提供一个POJO一致性的编程模型。

l         运行平台,提供了一个运行平台,(勉强)可以算做一个中间件产品。

 

架构构建过程中应注意如下内容:

l         应用区分平台系统和应用开发接口

应用开发接口是给后续产品开发使用,接口一旦设计发布应当保持问题性和兼容性;而平台系统对后续系统开发不可见,避免兼容设计成本,有利后续升级和变化。

l         简单的API,强大的功能,类似于高级语言

l         可以扩展的SPI,另一种形式的API

l         消除易错机制(error-prone mechanism),避免当错误使用后的修正成本太高

l         适应变化和二八原则,避免在需求变化时后调整的成本过高

l         隔离具体技术,保持未来的迁移性和可升级性

l         提供调用接口和模型应具备一定抽象性

l         分离关注点,纵向的层次化抽象,以及横向的模块与切面

l         提供申明式定义(如XML),由反向解析映射到具体技术,关注于做什么而非怎么做。

 

架构完成构建后,进入架构评估。

架构评估是确保架构有效性的重要步骤,需要针对所收集到的非功能性需求——工作上形成一个闭环,确保工作的有效性——因为架构涉及系统中最重要的20%,应该尽早验证,而不是简单地希望一切都好。

架构评估包括两个工作:进行验证和协助。

可以根据非功能性需求列表来制定验证点,这里列举下主要的验证点:

l         技术点验证

l         性能压力验证

l         稳定性验证

更正规的评估方法可以参考《Attribute Based Architectural Evaluation》。

 

协助是架构评估的另一项工作。架构不是几个人关在一个房间里整出来的与世隔绝的东西。需要项目/系统/产品的等相关利益者理解它。这项工作不应是发布几份文档宣称架构如此如此(见后续《架构发布》),它应当在架构评估时进行(虽然可以在架构构建时进行,但是由于此时架构并未成形,此时的效果有限)。

 

 

架构发布

当架构构建完成并通过评估,架构就可以正式发布了。

框架/平台和工具

毫无疑问,框架/平台和工具是架构发布主要内容之一。

文档

除去框架框架/平台和工具,还有其他重要的内容需要发布,文档无疑必须的。但文档也存在尴尬的情况,已知的工程实践中已经发布了太多无用的文档、过期的文档。

应努力保证所发布文档的必要性和有效性,建议文档如下:

l         架构介绍,可以参考RUP4+1视图,部署视图、运行视图、开发视图等

l         快速入门

l         开发指南

l         服务配置和使用介绍

示例代码

完整可用的代码,运行脚本、注释。完整丰富的示例代码在很多时候比文档更直接,尤其在展示细节问题上。

培训和指导

很多时候,培训和指导被忽略了。相对于文档和示例代码,培训和指导更有互动性,可以更深入讨论,并可以深入到架构设计背后的故事。

 

架构改进

如前所述,通常无法一次收集完整地非功能性需求;而随着时间发展,更新更细节的非功能性需求会不断的涌现和被发现;还有一部分之前已识别但被暂时搁置的非功能性需求开始变得重要。因此架构需要不断发展,而此时的改进通常是以小步快跑的方式进行。

 

下一个周期

不能期望10年前的架构能够满足今天的需求(它可能依然可以工作)。架构发布后到一定阶段,已经无法通过小的改进满足新的要求,重新进行架构设计成为一个必然。而当前的架构设计可以转为下一次设计的基线。

 

 

常见的问题

l         试图创建一个私有的编程模型标准

很少有人这么干,不过有时还遇到这样的做法。通常在封装一些商业或开源产品,美名其曰——隔离实现,这是一个危险的做法,其实质是创建一个私有编程模型标准,如果业界没有纸上标准或实际标准,基于某个产品实现所建立的私有标准无法真正的迁移到别的产品实现;如果有,那就根本不需要建立私有标准。

另有一种封装,其目的是为了简化商业或开源产品,这种封装不打算屏蔽底层的实现——它只是让工作更简单。

如果一定要创建一个编程模型的话,应该是POJO

l         不那么正确的二八原理

二八原理通常很有效,然而它有缺陷——他是基于统计的,这意味着是事后应对。如果没有已有实践经验,那么在一开始很难做出正确判断。

而一旦做出错误的决策导致的问题,很可能出现“玻璃裂纹”现象——不断的扩散并破坏架构设计——直到玻璃碎掉。

更槽糕的是,很多时候所谓的二八划分,基于的是感觉而非统计。

l         过分关注在技术模型上

虽然架构针对的非功能性需求,关注在技术模型没有问题,但是实际上更应关注的是信息模型。而在多数情况下,信息模型是以层的形式来表示。

这里面最典型的是所谓的N层(n-tier)模型,实际上,N层(n-tier)模型就是一个技术模型,描述的一个分布式系统结构。

而真正的N层(n-layer)设计却被忽视,分层Layer模式才是一个架构模式(见POSA vol1),ISO-7层网络协议是一个典型示例。

0
0
分享到:
评论

相关推荐

    企业架构及典型设计.ppt

    设计过程中,需要对架构中的概念进行标准化定义,建立架构设计方法论,定义信息标准,设定审查机制,并不断改进和完善。此外,参考架构、模式和目标架构为设计提供了指导。 企业架构的实施需要跨部门协作,包括...

    系统架构设计(模板).pdf

    系统架构设计是软件开发的重要阶段,它定义了系统的总体架构、逻辑功能架构、物理网络架构、数据架构设计、核心模块组件概要描述、出错处理设计和安全保密设计等方面的设计思想和实现方案。 1. 系统的目的 系统的...

    软件架构和架构师

    为了更好地发挥软件架构师的作用,企业和组织需要重视其培养和任用,同时也要建立一套完善的评估体系,确保软件架构师能够在项目中发挥最大的价值。随着软件行业的不断发展,软件架构师的地位和作用将会越来越重要。

    TOGAF架构实战

    在这个过程中,需要进行架构准备和需求管理,架构开发阶段(B-D)建立逻辑架构,实现规划阶段(E-F)形成物理架构,最后项目实施和架构管控(G-H-A)确保架构的实际落地,并为下一次架构循环提供输入。 架构开发...

    软件系统架构师

    建立架构基线是迭代设计过程的起点,通过持续的优化和重构,确保架构的弹性和适应性。质量属性,如可靠性、可维护性和可集成性,是架构设计过程中不可忽视的因素。架构设计必须考虑到这些质量属性,并采取相应的设计...

    TOGAF总体架构_

    1. **预备阶段(Preparation Phase)**:建立架构开发的原则、政策和标准。 2. **架构愿景(Architecture Vision)**:确定项目的目标、范围和架构原则。 3. **业务架构(Business Architecture)**:定义业务战略、业务...

    数据架构 pdf 资料 hhh

    同时,需要建立数据项和业务功能间的联系,并发布、使用、管理数据架构的成果。 数据架构是企业架构的核心,旨在描述企业的数据类型、来源、逻辑和物理数据资产、数据资源的结构和交互关系。数据架构的设计需要关注...

    企业级架构入门

    15. **架构能力框架**:定义和建立企业进行架构工作的能力和资源,包括技能、工具和方法论。 以上就是企业级架构入门的关键概念和知识点。学习和实施企业级架构,能够帮助企业更好地规划和管理其IT资源,提高运营...

    java 架构设计示例文档

    这一步骤包括对目标市场的研究,用户画像的建立,以及对业务流程的梳理。需求分析是整个架构设计的基石,它直接影响到后续的技术选型和系统设计。需求分析需要明确系统的非功能性需求,如性能、可靠性、可用性和安全...

    系统架构方法 系统架构设计师

    DDD的核心思想是通过建立统一的语言和模型来消除业务与技术之间的鸿沟,提高软件产品的质量和适应性。 ### 四、总结 系统架构设计对于软件项目的成功起着决定性的作用。作为一名优秀的系统架构设计师,不仅需要掌握...

    基于企业架构的信息化规划

    架构定义阶段包括定义企业整体的架构蓝图,包括业务架构、信息系统架构和技术架构;迁移规划阶段包括根据蓝图,制定迁移实施计划。 在信息化规划中,企业需要明确信息化战略,分析企业需求与业务架构,进行IT架构...

    TOGAF企业架构 8.1英文版

    2. **架构愿景**:定义架构的愿景和目标,建立利益相关者的共识。 3. **业务架构**:分析和设计业务架构,确保其与业务战略的一致性。 4. **信息系统架构**:包括数据架构和应用架构的设计。 5. **技术架构**:关注...

    2小时初探企业架构TOGAF

    3. **建立原则**:定义架构工作的基本原则。 4. **建立治理结构**:确立管理架构工作的组织结构和流程。 5. **团队组成**:组建一个跨职能的团队,包括企业架构师和其他关键角色。 6. **确定范围和限制**:定义架构...

    《架构之美》

    1. **软件架构的定义与重要性** 2. **优秀架构的特征** 3. **架构设计的原则** 4. **Facebook架构设计案例分析** 5. **现代软件系统面临的挑战及解决方案** #### 详细知识点解析 ##### 1. 软件架构的定义与重要性 ...

    系统架构设计师教程(第4版)pdf.zip

    系统架构是构建大型、复杂软件系统的核心部分,它定义了系统的组织结构和交互方式。在第四版中,作者深入探讨了系统架构的多个关键知识点: 1. **架构模式与原则**:书中详细讲解了常见的架构模式,如分层架构、...

    高级系统架构师培训.pdf

    - **建立架构基线的步骤**:分步骤说明如何构建稳定的架构基线。 - **从质量属性及其应对策略的视角优化架构**:根据质量属性的不同,采取相应的优化策略。 - **从模块划分的视角优化架构**:通过合理的模块划分...

    软件架构师入门教程,成功架构你的软件

    - 软件架构定义:它是软件系统的主要组成部分、它们之间的关系以及指导其设计和演化的原则。 - 关键元素:包括模块、组件、接口、数据流、控制流程等。 - 基本原则:模块化、抽象、信息隐藏、分层等。 2. **架构...

    bizbok-业务架构

    9. **变更管理和治理**:业务架构师需要考虑如何管理变革,以及建立有效的治理机制来确保架构的一致性和合规性。 10. **工具和技术**:业务架构实践中使用的各种工具,如建模工具、协作平台和数据分析工具,帮助...

Global site tag (gtag.js) - Google Analytics