写点什么

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

  • 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:1548514

评论

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

PyTorch从精通到入门02:多项式回归

王玉川

人工智能 神经网络 深度学习 PyTorch 多项式回归

PyTorch从精通到入门04:CNN实现图像分类

王玉川

人工智能 神经网络 深度学习 CNN PyTorch

图形工作站out?云电脑成设计师新宠

青椒云云电脑

云电脑

青椒云桌面云一体机的优势在哪里?

青椒云云电脑

桌面云一体机

使用 promise 重构 Android 异步代码

巫山老妖

android 异步编程

这就是访问者模式

千羽

Java 面试 后端 设计模式 实际应用

厌恶不确定风险?这款轻量云服务器助力企业稳中向好

平平无奇爱好科技

产品化的GPT,能否为“百模大战”照亮未来?

脑极体

AI

小程序游戏创业大热,找对入局方式方能出奇制胜

平平无奇爱好科技

Kyligence Copilot 亮相第六届进博会,增添数智新活力

Kyligence

数据智能 决策智能

PyTorch从精通到入门01:线性回归

王玉川

人工智能 神经网络 机器学习 线性回归 PyTorch

云电脑与5G网络的结合将会带来什么

青椒云云电脑

云电脑

如何利用华为云耀云服务器L实例搭建个人博客网站?

平平无奇爱好科技

T2T2撸毛攻略,以Bitget Wallet为例

股市老人

Mac电脑备份软件 BeLight Get Backup Pro 3激活最新版

胖墩儿不胖y

Mac软件 备份软件 备份工具

什么是云电脑?云电脑怎么实现安全的远程办公环境?

青椒云云电脑

云电脑

BRC-20代币sats和ORDI为什么突然火起来了

币离海

SATS Ordinals BRC20

为什么明道云不提供原厂实施服务

明道云

ERP管理屡不见效?记住这些秘诀助企业拨云见日

平平无奇爱好科技

Bitget Wallet:使用 Base 链购买 ETH 的简明教程

石头财经

Amazon CodeWhisperer(亚马逊云AI大模型下应用创新——自动代码生成插件:AWS toolkit)以IntelliJ IDEA 2023.1为例的实测使用

淼.

AWS

PyTorch从精通到入门03:全连接层实现图像分类

王玉川

人工智能 神经网络 深度学习 图像识别 PyTorch

2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 “ 3 1 2 5 6 ...“ 0 1 2 3 4 hash[0] = 3 * p的0

福大大架构师每日一题

福大大架构师每日一题

不止于“初见成效”,阿斯利康要让数据流转,以 AI 带动决策智能

Kyligence

数据智能

康士柏新能源汽车检测解决方案走向市场化

Geek_2d6073

新手必看:Bitget Wallet 上购买 ETH 的步骤解析

BlockChain先知

什么是云电脑?云电脑为何被企业青睐?

青椒云云电脑

云桌面 云电脑

Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector

小万哥

Python 程序员 软件 后端 开发

Linux tail命令:显示文件结尾的内容

芯动大师

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

GPU算力

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