一、
架构是什么
通常关于架构的第一个问题是架构是什么,很自然也很正常,本文也不能免俗。然而关于这个问题却没有一致性答案,同时也要注意到不同应用的架构实质上存在不同差异性。
(一)
架构的定义
架构,虽然人们一直在讨论它,甚至于每天都在同其工作,然而这个词并没有一个被业界广泛认可的定义。
大致而言,架构的定义分为三类:
类别
|
定义
|
结构论
|
牛津高阶词典: 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框架过程中...