惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
V
Visual Studio Blog
C
Check Point Blog
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
博客园 - 聂微东
量子位
T
Tailwind CSS Blog
罗磊的独立博客
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
L
LangChain Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
V
Vulnerabilities – Threatpost
Martin Fowler
Martin Fowler
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
GbyAI
GbyAI
Latest news
Latest news
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
Lohrmann on Cybersecurity
博客园 - Franky
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
美团技术团队

博客园 - Anders小明

如何定义和建立架构 企业应用下的业务组件开发实践 浅谈领域驱动设计 浅谈基础平台 浅谈企业应用架构(二) 浅谈企业应用架构(一) 技术书籍推荐 AOSD的实践冲动——Use Case的实现 业务流程的层次和内容 Domain Model的三种类型及其级别 基于业务模块组件的系统架构 小议领域模型(Domain Model)补充以及更新 软件架构乱弹——问题域及其解决方法 软件工程中的经济行为与软件架构师的工作 Web框架比较 AspectJ应用--软件产品化的新方法 Interface plays as Placeholder, without any class implement it [转贴]做好个人时间管理 基于抽象的分层结构
关于架构的思考
Anders小明 · 2011-07-01 · via 博客园 - Anders小明

  作者: 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 MarketCost and BenefitsProjected life timeTargeted MarketIntegration with Legacy SystemRoll back Schedule

                             ii.        最终用户视角

PerformanceAvailabilityUsabilitySecurity

                            iii.        开发视角

MaintainabilityPortabilityReusabilityTestability

3.         也可以通过诸如:简洁性、清晰和一致性等指标。

不同类型的应用关注点会有很大不同,例如:互联网应用由于面临大量的最终用户,会特别关注于伸缩性、可靠性和易用性,这并不是说互联网应用不关注维护性和扩展性,只是会更加强调另外三个特性;而企业应用由于关注于数据、流程以及业务的适应性,会更多得强调维护性和扩展性,而其他特性如易用性相对弱化(面对内部用户,强制使用),伸缩性(内部用户访问量少,大部分情况下通过现有硬件即可支持)。同时,企业应用对数据一致性和准确性要求非常高,而互联网应用相对可以容忍一定的不一致性和错误。因此,一个企业应用的架构师可能无法设计互联网应用的架构。

二、             架构有什么 

架构有什么,通常会来一张或者一堆好看的图画。既然本篇不讨论具体应用,故而也拿不出啥图了,也不想讨论这些。因为不同的应用存在的差异,非本文所能涵盖。这里就想讨论下形形色色架构图的背后的内容,以及隶属架构但未在架构图表达的内容。

《易经·系辞》有云:“形而上者谓之道,形而下者谓之器”,将架构分为“形而上”和“形而下”两个部分,如下图:

    

(一) 形而上

形而上体系中,除去前置内容,分为文化和支撑两大块。

其中,文化部分里最重要的就是原则方法论,例如:关注点分离原则(SoC),面向对象分析设计和领域驱动设计等等。在此之下,就是架构模式算法,常见架构模式为:结构化(分层、管道流、黑板)、分布式(代理和管道流)、交互系统(MVCPAC)和适配系统(微内核、元数据)。当然还有更低一层次的设计模式(创建、结构和行为)。

(二) 形而下

形而下分为三个部分,运行时、工具和文档。

其中,运行时的内容按照重要性依次为:语言、平台/中间件、框架、类库和工具,具体在企业应用中就是:Java/C#Windows/LinuxApplication Server/DatabaseSpring/Hibernate等等。

如果说运行时决定最终能力,则工具就事关效率。工具中最常见的是集成开发环境了,此外还有配置、部署和测试工具。

文档部分是另一个重要的内容,应包括:视图(从不同角色出发,可以参考4+1),范例和各种指导参考文档。

三、             架构如何设计 

如果把“形而下”当成架构设计的产出,那么架构设计往前追溯,就有输入和加工过程。

(一) 架构的输入

架构的输入包括三个部分:目标、需求和相应约束。其中:目标是大方向内容,需求关注在细节,而约束对目标的达成提供了限定。特别的,关注在非功能性指标上。

(二) 架构的设计过程

架构的设计从需求分析开始,结合参考模型或者已有架构体系,结合原则、方法论等等作料。其主要活动有:技术选型、脚手架/框架/平台搭建等等。

       关于具体过程的描述,可见《如何定义和建立架构》。

四、             架构如何评估

架构设计出后一个重要的工作是对架构(形而下部分)进行评估,进行架构评估的必要性在:使得架构设计工作形成闭环,确保当前架构是合适和正确的。

大体上,架构评估有三种方法:

·           ATAM: Architecture Tradeoff Analysis Method

·           SAAM: Software Architecture Analysis Method

·           ARID: Active Reviews for Intermediate Designs

在进行架构评估工作时,首先要确定架构评估的参与人,包括相应的干系人和独立的评估队伍;然后是确定评估的时机:早期(在架构设计期间就参与评估)和晚期(传动的,在架构设计完成后)。

评估内容包括如下:

1.         首先是要满足其输入:目标、需求和约束;

2.         各项的非功能性指标;

五、             小结

以如下思维导图作为本文的小结: