写点什么

架构漫谈(一):什么是架构?

  • 2016-02-17
  • 本文字数:3141 字

    阅读完需:约 10 分钟

架构漫谈是由资深架构师王概凯 Kevin 执笔的系列专栏,专栏将会以 Kevin 的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。专栏的目的是希望能抛出一些观点,并引发大家思考,如果你有感触或者新的感悟,欢迎联系专栏负责人 Gary(微信 greenguolei)深聊。

本文是漫谈架构专栏的第一篇,作者将会通过类比的方式来介绍什么是架构以及为什么会产生架构。

缘起

一直以来,在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。甚至于很多架构师一说架构,就开始谈论什么应用架构、硬件架构、数据架构等等。我曾经也到处寻找过架构的定义,请教过很多人,结果发现,没有大家都认可的定义。套用一句关于 big data 流行的笑话,放在架构上也适用:

Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。

事实上,架构在软件发明时的 N 多年以前,就已经存在了,这个词最早是跟随着建筑出现的。所以,我觉得有必要从源头开始,把架构这个概念先讨论清楚,只有这样,软件行业架构的讨论才有意义。

什么是架构?

架构的英文是 Architecture,在 Wikipedia 上,架构是这样定义的:

Architecture (Latin architectura, from the Greek ἀρχιτέκτων arkhitekton"architect", from ἀρχι- “chief” and τέκτων “builder”) is both the process and the product of planning, designing, and constructing buildings and other physical structures。

从这个定义上看,架构好像是一个过程,也不是很清晰。为了讲清楚这个问题,我们先来看看为什么会产生架构。

为什么会产生架构?

想象一下,在最早期,每个人都完全独立生活,衣、食、住、行等等全部都自己搞定,整个人类都是独立的个体,不相往来。为了解决人类的延续的问题,自然而然就有男女群居出现,这个时候就出现了分工了,男性和女性所做的事情就会有一定的分工,可是人每天生活的基本需求没有发生变化,还是衣食住行等生活必须品。

但是一旦多人分工配合作为生存的整体,力量就显得强大多了,所以也自然的形成了族群:有些人种田厉害,有些人制作工具厉害,有些地方适合产出粮食,有些地方适合产出棉花等,就自然形成了人的分群,地域的分群。当分工发生后,实际上每个人的生产力都得到了提高,因为做的都是每个人擅长的事情。

整个人群的生产力和抵抗环境的能力都得到了增强。为什么呢?因为每个人的能力和时间都是有限的,并且因为人的结构的限制,人同时只能专心做好一件事情,这样不得已就导致了分工的产生。既然分工发生了,原来由一个人干生存所必需的所有的事情,就变成了很多不同分工的角色合作完成这些事情,这些人必须要通过某些机制合在一起,让每个人完成生存所必需的事情,这实际上也导致了交易的发生(交易这部分就不在这里展开了,有机会再讨论)。

在每个人都必须自己完成所有生活必须品的生产的时候,是没有架构的(当然在个人来讲,同一时刻只能做有限的事情,在时间上还是可能会产生架构的)。一旦产生的分工,就把所有的事情,切分成由不同角色的人来完成,最后再通过交易,使得每个个体都拥有生活必须品,而不需要每个个体做所有的事情,只需要每个个体做好自己擅长的事情,并具备一定的交易能力即可。

这实际上就形成了社会的架构。那么怎么定义架构呢?以上面这个例子为例,把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。由以上的例子,也可以归纳出架构产生的动力:

  1. 必须由人执行的工作(不需要人介入,就意味着不需要改造,也就不需要架构了)
  2. 每个人的能力有限(每个人都有自己的强项,个人的产出受限于最短板,并且由于人的结构限制,同时只能专注于做好一件事情,比如虽然有两只眼睛,但是只能同时专注于一件事物,有两只手,无法同时做不同的事情。ps. 虽然有少部分人可以左手画圆右手画框,但是不是普遍现象)
  3. 每个人的时间有限(为了减少时间的投入,必然会导致把工作分解出去,给擅长于这些工作的角色来完成,见 2,从而缩短时间)
  4. 人对目标系统有更高的要求(如果满足于现状,也就不需要进行架构了)
  5. 目标系统的复杂性使得单个人完成这个系统,满足条件 2,3(如果个人就可以完成系统的提高,也不需要别的人参与,也就不需要架构的涉及,只是工匠,并且一般这个工作对时间的要求也不迫切。当足够熟练之后,也会有一定的架构思考,但考虑更多的是如何提高质量,提高个人的时间效率)

有人可能会挑战说,如果一个人对目标系统进行分解,比如某人建一栋房子,自己采购材料,自己搭建,难道也不算架构嘛?如果对于时间不敏感的话,是会出现这个情况的,但是在这种情况下,并不必然导致架构的发生。如果有足够的自觉,以及足够的熟练的话,也会产生架构的思考,因为这样对于提高生产力是有帮助的,可以缩短建造的时间,并会提高房子的质量。事实上建筑的架构就是在长期进行这些活动后,积累下来的实践。

当这 5 个条件同时成立,一定会产生架构。从这个层面上来说,架构是人类发展过程中,由懵懵懂懂的,被动的去认识这个世界,变成主动的去认识,并以更高的效率去改造这个世界的方法。以下我们再拿建筑来举例加强一下理解。

最开始人类是住在山洞里,住在树上的,主要是为了躲避其他猛兽的攻击,以及减少自然环境的变化,对人类生存的挑战。为了完成这些目标,人类开始学会在平地上用树木和树叶来建立隔离空间的设施,这就是建筑的开始。但是完全隔离也有很多坏处,慢慢就产生了门窗等设施。

建筑的本质就是从自然环境中,划出一块独占的空间,但是仍然能够通过门窗等和自然环境保持沟通。这个时候架构就已经开始了。对地球上的空间进行切分,并通过门窗,地基等,保持和地球以及空间的有机的沟通。当人类开始学会用火之后,茅棚里面自然而然慢慢就会被切分为两部分,一部分用来烧饭,一部分用来生活。当人的排泄慢慢移入到室内后,洗手间也就慢慢的出现了。这就是建筑内部的空间切分。

这个时候人们对建筑的需求也就慢慢的越来越多,空间的切分也会变成很多种,组合的方式也会有很多种,比如每个人住的房子,群居所产生的宗教性质的房子,集体活动的房子等等。这个时候人们就开始有意识的去设计房子,架构师就慢慢的出现了。一切都是为了满足人的越来越高的需求,提升质量,减少时间,更有效率的切分空间,并且让空间之间更加有机的进行沟通。这就是建筑的架构以及建筑的架构的演变

总结一下,什么是架构,就是:

  1. 根据要解决的问题,对目标系统的边界进行界定。
  2. 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
  3. 并对这些切分出来的部分,设立沟通机制。
  4. 根据 3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

同样这个思考可以展开到其他的行业,比如企业的架构,国家的架构,组织架构,音乐架构,色彩架构,软件架构等等。套用三国演义的一句话,合久必分,分久必合。架构实际上就是指人们根据自己对世界的认识,为解决某个问题,主动地、有目的地去识别问题,并进行分解、合并,解决这个问题的实践活动。架构的产出物,自然就是对问题的分析,以及解决问题的方案:包括拆分的原则以及理由,沟通合并的原则以及理由,以及拆分,拆分出来的各个部分和合并所对应的角色和所需要的核心能力等。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-02-17 16:1548448

评论

发布
暂无评论
发现更多内容

Element Plus 和 Ant Design Vue 对比测评,哪个更好?

蒋川

Vue antd vue Element Plus Element UI Ant Design

高性能云桌面服务提供商酷栈科技加入龙蜥社区,共建开源新生态

OpenAnolis小助手

开源 云桌面 龙蜥社区 CLA 酷栈科技

Apache ShardingSphere 企业行|走进怪兽充电

SphereEx

开源 ShardingSphere SphereEx apache 社区 怪兽充电

java培训-不干程序员了还能干什么

@零度

JAVA开发

KubeEdge-Sedna边云协同终身学习:迈向次时代AI范式

华为云原生团队

人工智能 开源 AI 边缘计算 边缘技术

uni-app技术分享| uni-app转小程序_实时音视频

anyRTC开发者

小程序 音视频 WebRTC uniapp 实时通讯

云效·Insight(效能洞察)一款面向企业研发管理层的研发效能数字化度量服务

阿里云云效

阿里云 云原生 研发管理 研发效能 效能洞察

使用混合云平台企业,怎样才能做好运维?

行云管家

私有云 混合云 多云管理 云管平台

大数据培训-程序员坚持不断的学习能成大神吗

@零度

大数据开发

Ali266首次商用落地,助力优酷码率最高节省40%

阿里云CloudImagine

阿里云 音视频 优酷 编码器 视频云

我国将筹建工业元宇宙服务平台

CECBC

解读加密市场13种NFT类型

CECBC

做网工还是运维好?小白求解!

行云管家

云计算 运维 网络 IT运维

新手指南,带你启航:如何给OpenMLDB社区贡献代码

第四范式开发者社区

机器学习 数据库 开源 开源社区

浅谈Vue开发小程序

Speedoooo

小程序 Vue 开发框架 小程序容器

Flink on K8s 在京东的持续优化实践

Apache Flink

大数据 flink 编程 流计算 实时计算

Flink 在 B 站的多元化探索与实践

Apache Flink

大数据 flink 编程 流计算 实时计算

有了这款工具,定位线上问题事半功倍|云效工程师指北

阿里云云效

云计算 阿里云 程序员 云原生 开发

Linux驱动开发-编写FT5X06触摸屏驱动

DS小龙哥

4月月更

虚拟货币网络犯罪愈演愈烈 安全防护更要“多管齐下”

CECBC

jackson学习之二:jackson-core

程序员欣宸

4月月更

分享回顾|木兰技术开放日,建木团队与你一同畅聊「云原生」

Jianmu

ci 开源 云原生 开发运维

Zadig 构建缓存如何配置才好用?

Zadig

云原生 CI/CD 软件交付 Zadig

Element Plus for Vue 3 入门教程

蒋川

Element Element Plus Element UI

vulnhub靶场解题笔记——THE PLANETS:EARTH

L0kt4r

渗透测试

好代码和坏代码

博文视点Broadview

为什么要做网站SEO优化?

源字节1号

SEO优化

直播回顾| Apache Pulsar 2.10.0 新特性概览

Apache Pulsar

开源 架构 云原生 Apache Pulsar Apache Pulsar 社区

【课程汇总】OpenHarmony成长计划知识赋能第三期系列课程(附链接)

OpenHarmony开发者

OpenHarmony ETS Openharmony啃论文俱乐部

主流跨端开发技术方案对比

Speedoooo

跨端开发 跨端 降本增效 小程序容器 轻应用

使用APICloud开发多端短视频应用

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 多端开发 小程序开发

架构漫谈(一):什么是架构?_架构_王概凯_InfoQ精选文章