作者: Anders小明
一、 架构是什么
通常关于架构的第一个问题是架构是什么,很自然也很正常,本文也不能免俗。然而关于这个问题却没有一致性答案,同时也要注意到不同应用的架构实质上存在不同差异性。
(一) 架构的定义
架构,虽然人们一直在讨论它,甚至于每天都在同其工作,然而这个词并没有一个被业界广泛认可的定义。
大致而言,架构的定义分为三类:
类别
|
定义
|
结构论
|
牛津高阶词典: The design an structure of a computer system
|
韦氏大辞典: The way in which the parts of a computer are organized
|
IEEE: The fundamental organisation of a system embodied in its components, their relationships to each other, and to the environment,and the principle guiding its design and evolution
|
关键论
|
架构是系统中最关键的20%,关注在系统非功能性需求
|
文化论
|
架构是关于系统一些的决策
|
(二) 架构的分类
架构由于应用的不同而存在不同。大体而言,我们可以将当前的应用分为如下四种:互联网应用、企业应用、桌面/移动应用和游戏。
需要一提的是,虽然几种应用的存在一定的模糊性,某种技术为多种应用所共用,例如很多的企业应用基于互联网技术SaaS,以及移动设备的支持。但依然存在很大的不同。
特别的,对于企业架构,大体存在如下几种流派:
1. TOGAF, OpenGroup组织提出,围绕业务、应用、技术和数据四个方面描述架构;
2. DoDAF/MoDAF,美国和英国国防部提出的架构方案;
3. Zachman Framework, 根据不同角色的5W1H来审视架构;
4. 4+1视图,由Philippe Kruchten提出,并被RUP采纳;
(三) 架构的关键非功能指标
通常来讲,架构所关注的非功能需求可以分为三个角度5个特性,如下:
角度
|
特性
|
说明
|
运营角度
|
伸缩性
|
主要为水平扩展能力
|
可靠性
|
包括容错性、可用性和安全性等;
|
开发角度
|
维护性
|
|
扩展性
|
能否快速应对业务的变化
|
应用角度
|
易用性
|
对最终用户是否友好
|
非功能性指标当然不止这些,如下是一些参考:
1. ISO 9126提出的质量特性:
2. 或者通过如下三个视图来进行:
i. 业务视角
Time To Market、Cost and Benefits、Projected life time、Targeted Market、Integration with Legacy System、Roll back Schedule
ii. 最终用户视角
Performance、Availability、Usability、Security
iii. 开发视角
Maintainability、Portability、Reusability、Testability
3. 也可以通过诸如:简洁性、清晰和一致性等指标。
不同类型的应用关注点会有很大不同,例如:互联网应用由于面临大量的最终用户,会特别关注于伸缩性、可靠性和易用性,这并不是说互联网应用不关注维护性和扩展性,只是会更加强调另外三个特性;而企业应用由于关注于数据、流程以及业务的适应性,会更多得强调维护性和扩展性,而其他特性如易用性相对弱化(面对内部用户,强制使用),伸缩性(内部用户访问量少,大部分情况下通过现有硬件即可支持)。同时,企业应用对数据一致性和准确性要求非常高,而互联网应用相对可以容忍一定的不一致性和错误。因此,一个企业应用的架构师可能无法设计互联网应用的架构。
二、 架构有什么
架构有什么,通常会来一张或者一堆好看的图画。既然本篇不讨论具体应用,故而也拿不出啥图了,也不想讨论这些。因为不同的应用存在的差异,非本文所能涵盖。这里就想讨论下形形色色架构图的背后的内容,以及隶属架构但未在架构图表达的内容。
《易经·系辞》有云:“形而上者谓之道,形而下者谓之器”,将架构分为“形而上”和“形而下”两个部分,如下图:
(一) 形而上
形而上体系中,除去前置内容,分为文化和支撑两大块。
其中,文化部分里最重要的就是原则和方法论,例如:关注点分离原则(SoC),面向对象分析设计和领域驱动设计等等。在此之下,就是架构模式和算法,常见架构模式为:结构化(分层、管道流、黑板)、分布式(代理和管道流)、交互系统(MVC和PAC)和适配系统(微内核、元数据)。当然还有更低一层次的设计模式(创建、结构和行为)。
(二) 形而下
形而下分为三个部分,运行时、工具和文档。
其中,运行时的内容按照重要性依次为:语言、平台/中间件、框架、类库和工具,具体在企业应用中就是:Java/C#、Windows/Linux、Application Server/Database、Spring/Hibernate等等。
如果说运行时决定最终能力,则工具就事关效率。工具中最常见的是集成开发环境了,此外还有配置、部署和测试工具。
文档部分是另一个重要的内容,应包括:视图(从不同角色出发,可以参考4+1),范例和各种指导参考文档。
三、 架构如何设计
如果把“形而下”当成架构设计的产出,那么架构设计往前追溯,就有输入和加工过程。
(一) 架构的输入
架构的输入包括三个部分:目标、需求和相应约束。其中:目标是大方向内容,需求关注在细节,而约束对目标的达成提供了限定。特别的,关注在非功能性指标上。
(二) 架构的设计过程
架构的设计从需求分析开始,结合参考模型或者已有架构体系,结合原则、方法论等等作料。其主要活动有:技术选型、脚手架/框架/平台搭建等等。
关于具体过程的描述,可见《如何定义和建立架构》。
四、 架构如何评估
架构设计出后一个重要的工作是对架构(形而下部分)进行评估,进行架构评估的必要性在:使得架构设计工作形成闭环,确保当前架构是合适和正确的。
大体上,架构评估有三种方法:
· ATAM: Architecture Tradeoff Analysis Method
· SAAM: Software Architecture Analysis Method
· ARID: Active Reviews for Intermediate Designs
在进行架构评估工作时,首先要确定架构评估的参与人,包括相应的干系人和独立的评估队伍;然后是确定评估的时机:早期(在架构设计期间就参与评估)和晚期(传动的,在架构设计完成后)。
评估内容包括如下:
1. 首先是要满足其输入:目标、需求和约束;
2. 各项的非功能性指标;
五、 小结
以如下思维导图作为本文的小结:
分享到:
相关推荐
区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考
在编程领域,架构思考是构建高效、稳定和可扩展系统的关键。姚钢强在其讲座“编程语言中的架构思考”中,分享了他在不同项目中积累的经验,特别是在优化系统性能、提高稳定性以及资源利用效率方面的实践。 首先,姚...
前端团队管理与前端基础架构的实践和思考 前端团队管理是指在软件开发过程中,负责前端开发的团队如何更好地发挥职能作用,提高团队的效率和质量。本文将探讨前端团队的职能转变、前端基础架构的构建和实施,以及...
ERP技术架构发展,台湾版,对做ERP整体技术架构思考有概览好处
#### 六、高层领导对于IT架构转型的思考 - **中国工商银行行长谷澍的观点:** - IT架构作为企业架构的基础,是实现业务发展目标的重要支撑。 - 随着金融服务的多元化和数据量的爆发式增长,IT系统需要在数据处理...
大型网站系统架构思考,针对于大型网站系统开发架构做出详细解析
软件架构设计分层模型和构图思考 软件架构设计是一个复杂的问题,需要架构师具备系统思维、结构化思维、编程思维等多种思维模式。架构设计的核心作用是建立业务现实世界和抽象的 IT 实现之间的一道桥梁,要求架构师...
《思考软件,创新设计——A段架构师的思考技术》介绍当今全球正蔚为风潮的设计思考(Design Thinking)技术,陪伴你从目前的编程或设计岗位进入架构设计(A段和B段),踏上灿烂的软件(程序)生涯的新旅程。...
在规划架构或框架的阶段,还没开始动工撰写Android 程序码,那么架构师如何进行创意思考呢? 又如何将创意设计表达出来,争取自己公司老板和业主的支持(例如投资)呢? 大家都知道,像举世公认的创意天才:达芬奇...
宋宝华在MDCC 2015中国移动开发者大会上发表的主题演讲“Linux驱动的架构思考”中,深入探讨了Linux驱动架构的设计理念与实践。 演讲首先强调了Linux支持的众多体系架构,目前已有大约30种不同的体系架构得到支持。...
根据提供的标题、描述以及部分文档内容,我们可以提炼出关于架构设计的重要知识点,主要涉及存储、分布式、服务和计算模型等方面。 ### 架构设计的重要考量因素 #### 1. **存储设计** - **数据布局**:数据如何在...
中国跨国公司经营模式架构思考.doc
5G 移动网络新技术及核心网架构思考 本文主要探讨了 5G 移动网络新技术及核心网架构的思考,涵盖了 5G 网络通信新技术概述、5G 网络核心架构等方面的内容。文章首先对 5G 网络通信新技术进行了概述,包括 Small ...
最近转岗到架构部,对软件、系统,和软件架构系统性的看了一些书,做了简单的整理
### 现代架构设计需求和方案思考 #### 传统稳定架构设计方案的局限性 在传统的架构设计中,人们往往采用一种稳定不变的设计方案来应对不断变化的业务需求。这种设计通常包括分层架构(如数据层、服务层、中间件层...
"架构师能力模型解析" 架构师是一个职业名称,而不是一个技术高下的职位名称。要想成为一个优秀的架构师,需要具备“个人特性”和“技术技能”两个方面的能力。“个人特性”包括人际关系的能力和业务能力,而“技术...
安全多方计算体系架构及应用思考.docx
【SilverlightQQ项目实践与架构思考】 SilverlightQQ是一个基于微软的Silverlight技术开发的即时通讯应用程序,它展示了Silverlight在构建富互联网应用(RIA)方面的潜力。Silverlight,作为.NET Framework的一部分...
### Java框架研发思考 #### 背景与动机 在软件工程领域,特别是在Java平台下进行应用开发时,框架的研发不仅是技术挑战的体现,更是对未来技术趋势的一种预测和引导。本文作者彭晨阳分享了他在开发Jdon框架过程中...