7月QCon广州站2022,关注Web 3.0、数据架构选型、数字化转型等热门话题,点击了解 了解详情
写点什么

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

  • 2016 年 2 月 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 年 2 月 17 日 16:1545858

评论

发布
暂无评论
  • 软件工程的宏观视角

    架构师的确是一个技术岗,但是架构师干的事情,并不是那么纯技术。

    2019 年 12 月 27 日

  • 架构设计原则的力量

    架构原则概括了架构的功能:为系统设计清晰地定义必需的约束,而不必按照惯例定义所有的设计细节。好的架构原则为设计决策提供支持并促进团队的合作和沟通。

  • 第 145 讲 | 李列为:技术人员的商业思维

    “劳心者治人,劳力者治于人。”

    2018 年 12 月 25 日

  • 架构师及其目标在软件项目中的挫折感

    软件架构在软件项目中是否经常做得糟糕,经常被忽视了呢?这是CodingTheArchitecture.com的创始人兼独立咨询师Simon Brown在近期一篇博文中提及的一种现象。Brown认为这是对架构的误解,是敏捷项目中随意的架构方法导致架构走到如此糟糕的境地。

  • 架构师作业 - 第四周 - 一个典型的大型互联网应用系统使用了哪些技术方案和手段

    这里我描述一下目前我们所用的架构吧

    2020 年 10 月 18 日

  • 架构 homework1

    系统中每个消费者都有一张卡,在管理中心注册缴费,卡内记着消费者的身份、余额。

    2020 年 6 月 10 日

  • 脑子不够怎么学架构

    头发越来越少,脑子越来越僵,我该怎么办?

    2020 年 6 月 10 日

  • 架构:需求分析 (上)

    需求分析的目标和最终结果,都是要形成清晰的产品定义。产品定义将明确产品元素,明确产品边界,与产业上下游、合作伙伴的分工。

    2019 年 6 月 11 日

  • 架构漫谈(五):什么是软件

    本文是漫谈架构专栏的第五篇,作者将会从自己的认知角度再次反思什么是软件,文中作者探讨了软件发展火热的根本原因以及软件扮演的角色等问题。如前几天一位架构师所说,我们并不缺架构实践,而是缺少对于架构的反思,希望这系列文章能帮你重新理解架构,重新认识软件。

  • 第 63 讲 | 未来组织形态带来的领导力挑战

    未来组织中,人才共享将成为新常态,而这需要人才能够拥抱变化,对人的环境适应性提出了很高的要求,也对领导者提出了更高的要求。

    2018 年 8 月 1 日

  • 架构漫谈(三):如何做好架构之识别问题

    本文是漫谈架构专栏的第三篇。接之前的第二篇,作者将会讨论如何做好架构,并根据实际经验分析如何找出实际工作中需要解决的问题。

  • 69 | 团队的共识管理

    共识有非常多的层次。不同层次的共识处于完全不同的维度。它们都极其重要,且相互不可替代。

    2019 年 12 月 31 日

  • 企业架构到底是什么?

    关于企业架构在企业中角色的讨论非常多,而且人们认为它应在企业内运行。然而,Jason Bloomberg和JP Morgenthal最近在博客中建议企业架构的新形式。

  • 架构与实现:它们的连接与分界?

    从编写代码“实现”到系统“架构”设计的这条路上,程序员们应先来看清楚和想明白实现与架构之间的交叉、连接与分界,可不能稀里糊涂“闷头”往前走。

    2018 年 8 月 13 日

  • 随笔,聊聊架构

    最近刚读完《聊聊架构》,我也多次在微信朋友圈推荐过本书;推荐的原因不是因为行文优美流畅,也不是因为它是什么名篇巨著,仅仅是因为它回答了很多困扰我许久的问题,让我重新思考软件工程、架构和软件本身。

发现更多内容

产品训练营·第三周作业 & 总结

tiu

车载操作系统 (28天写作 Day26/28)

mtfelix

28天写作 车载操作系统 AOS QNX

工业互联网的“第一高地”,在哪?

浪潮云

工业互联网

产品经理训练营第二章作业(二)

猫。

03- 抽奖小助手的那个「谁」

学习高手song轻松

机器学习笔记之:最熟悉的陌生阵

Nydia

产品训练营-第三次作业

Geek_娴子

浅谈OKR工作法

一笑

管理 OKR 28天写作

产品经理训练营第三周作业

happy-黑皮

产品经理训练营

VUCA时代-不敏捷就得死

Ian哥

28天写作

即兴演讲的几种实用脚本

熊斌

读书笔记 28天写作

如果创意也可以被设计「幻想短篇 26/28」

道伟

28天写作

【作业-03】解决方案的设计与积累

西西里奇

开发质量提升系列:日常重视好投产,运维拍肩也不怕

罗小龙

最佳实践 方法论 28天写作 2月春节不断更

产品训练营第三章-第一节小结

skylar

产品经理训练营--第三章作业

Lucas zhou

产品经理训练营

28天瞎写的第二百三十六天:emacs 党的没落

树上

28天写作

为您收录的操作系统系列-进程管理(上篇)

Arvin

操作系统 进程

熬夜肝了个IDEA插件整合程序员常用的工具,总有你能用上的

Silently9527

程序员 IDEA idea插件

关注产品的利益相关者,想想他们的问题,自己设定一些前提,做个简单的排序。

mas

offline app

lidaobing

28天写作 offline app

【CSS】css控制鼠标点击事件(pointer-events)

德育处主任

html/css CSS小技巧 28天写作 纯CSS 2月春节不断更

漫话递归与迭代

Justin

算法 方法论 成长 心灵鸡汤 28天写作

超好用的文件转换神器!拿走不谢~

白色蜗牛

程序员 软件工具 生产工具

产品经理训练营-第三周作业

玖玖

利益相关者的问题及方案

梁媛

考前复习必备MySQL数据库(关系型数据库管理系统)

我是哪吒

MySQL 程序员 面试 后端 2月春节不断更

「产品经理训练营」作业 03

🌟

产品经理 产品经理训练营 产品经理训练

第 3 周作业

老元宵

手机里什么APP都没有,一个很无趣的人 | 视频号28天(27)

赵新龙

28天写作

深入理解 ProtoBuf 原理与工程实践(概述)

vivo互联网技术

数据结构 序列化 protobuf

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