我们来了解下什么是架构

微服务技术分享 微服务技术分享     2023-04-04     472

关键词:

最近在思考架构方面一些最基本的问题,比如什么是架构?如何评价一个架构的好坏?是否有一些通用的基本原则指引架构设计?在面向对象设计方面,有单一职责、里氏替换、依赖倒置、接口隔离、迪米特、开闭原则等等基本原则;那么,在架构设计方面是否也有类似的基本原则呢?本文就先聊聊第一个问题。​

什么是架构

关于什么是架构,业界从来没有一个统一的定义。Martin Fowler在《企业应用架构模式》中也没有对其给出定义,只是提到能够统一的内容有两点:

  1. 最高层次的系统分解;
  2. 系统中不易改变的决定。

《软件架构设计》一书则将架构定义总结为组成派和决策派:

  • 组成派:架构=组件+交互:软件系统的架构将系统描述为计算组件及组件之间的交互。
  • 决策派:架构=重要决策集:软件架构是在一些重要方面所作出的决策的集合。

而架构的概念最初来源于建筑,因此,我想从建筑的角度去思考这个问题。Wikipedia中,对架构,即Architecture的定义如下:

Architecture is both the process and the product of planning, designing, and constructing buildings and other physical structures.

简单翻译就是:架构是规划、设计和构建建筑物或其他物理构筑物的过程和结果。

从上面的定义中可知,首先,架构的最终目标是为了产出建筑物或其他物理构筑物,构筑物可以只是一套房子,也可以是一栋楼盘,抑或是一个小区、商业区,甚至是一个城市。构筑物越大,其架构必然也越复杂。

其次,产出建筑物之前需要经过三个阶段:规划(planning)、设计(designing)和构建(constructing)。这三个阶段其实也是架构的核心了。比如,开发商要建一个住宅小区,首先肯定要对该小区有一个整体的规划吧:小区的建设选址、建设的规模、建设的内容、投资估算、建设周期等等。接着,就要对小区的各方面进行设计了,最高层次的应该是小区的总体布局设计,拆分开的话就是各楼盘的设计、绿化的设计、各种配套设施的设计等等,再细化下去就是各种户型的设计、楼盘内和小区内各种走道的设计等等。最后,构建阶段也就是施工阶段了,是将之前所有的想法转为实际的建筑物的阶段。

最后,架构包含了以上的过程和结果。也就是说,对小区总体规划的过程是架构,规划的结果方案也是架构,小区总体布局的设计、楼盘的设计、户型的设计等等的每个过程也都是架构,每个过程产出的设计方案也是架构,构建阶段的施工图也是架构,可以说,产出建筑物期间的每个过程和结果都是架构。

那么,如果将建筑物换成了软件,那就变成对软件架构的定义了:软件架构是规划、设计和构建软件的过程和结果。

相应地,软件架构的最终目标就是为了产出软件,可以是一个App,也可以是一个平台,如SaaS、PaaS、BaaS等等,甚至还可以是智慧城市这样庞大的生态系统,地球人都知道,越庞大复杂的系统,架构越难。规划阶段更多考虑的是软件的需求,包括业务上功能性需求和技术上的非功能性需求,如可靠性、可扩展性、可维护性等;此阶段的架构一般为系统架构。设计阶段的工作更多的就是拆分细化,以满足各种需求;此阶段的架构一般为逻辑架构。构建阶段主要就是对软件的实现和部署了;此阶段的架构一般为物理架构。

写在最后

其实,对架构的每种定义都没有错,就像《软件架构设计》一书也说过的,只是每个人所看的角度不同而已。从上面的定义中也可知,架构涵盖了软件研发的方方面面,很难有人能够全部都懂,大部分架构师懂得的只是其中的某些方面。一栋高楼大厦也不是一个人完成的。

思考完什么是架构之后,那接下来,就要思考架构怎么做了?这个问题留待后文继续思考。

软件架构师是如何工作的

    软件体系结构的第一节课,是要让我们了解如果要做一名软件架构师,我们应该做什么和怎么做。在课堂上,老师通过《梦想改造家》中王平仲对特殊房型的改造来让我们从一名建筑师去了解什么是软件架构师... 查看详情

你必须了解的「架构」小历史

做项目时我们一直在说框架、架构,那它到底是什么呢?什么是架构从dubbo官网我们可以看到架构设计的发展演变史。这里把架构分成四类:单一应用架构垂直应用架构分布式服务架构流动计算架构刚开始时PHP+MySQL就可以形成网... 查看详情

简单了解flux,注意这是一个设计思想,是一个架构!!!!!

在RN开发中,我们总是需要去更改一个组件个数据(也就是所谓的状态),我们一般是采用是在初始化的函数constror()(好像拼错了)在这个函数里面申明我们的初始化数据(状态)eg:this.state={xxxxx},而后,当我们需要去改变... 查看详情

十张图让你了解阿里公司架构设计的发展变化史

...么协议等等开头,我认为大可以不必先着急去谈论技术,我们不妨来 查看详情

手机服务器微架构设计和实现专题

...p;然后,就是我需要了解的是http的实现原理。据说这个是我们面试时有可能需要考到的,其实,我需要的是弄清楚request和accept需要做的是什么 最后 查看详情

了解这些信息,你会知道在esxi5.0的虚拟化系统下文件出现故障时,我们能做些什么?

【ESXi5虚拟化系统情景概述】用户使用的存储模式是通过iSCSI方式来实现FCSAN的功能。同时利用DELL服务器做的物理存储架构,利用FreeNAS来实现iSCSI。并另外通过两台DELL服务器做ESXi5.0的虚拟化系统。1、FreeNAS层为UFS2文件系统,整个... 查看详情

elasticsearch分词器,了解一下

...转化成了小写的。再简单了解了Analysis与Analyzer之后,让我们来看下分词器的组成:分词器是专门处理分词的组件,分词器由以下三部分组成:同时Analyzer三个部分也是有顺序的,从图中可以看出,从上到下依次经过CharacterFilters... 查看详情

探索abp基础架构

...始化,本文将探讨ASP.NETCore和ABP框架最基本的构建模块。我们将从ASP.NETCore的Startup类开始了解为什么我们需要模块化系统,以及ABP如何提供模块化方式来配置和初始化应用程序。然后我们将探索ASP.NETCore的依赖注入,希望以上分... 查看详情

我们来谈谈什么是架构

最近在思考架构方面一些最基本的问题,比如什么是架构?如何评价一个架构的好坏?是否有一些通用的基本原则指引架构设计?在面向对象设计方面,有单一职责、里氏替换、依赖倒置、接口隔离、迪米特... 查看详情

了解什么是架构基本概念和架构本质

...解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然... 查看详情

serverless架构与事件规范

...讨论的是Serverless架构与其事件规范的基础原则。首先,我们先来了解下在HTTP/Web场景下我们的典型的WEB场景是怎样的:这里,我们不难看出典型的Web场景其实是由三大块内容,客户端,服务器,数据库组成。客户端在服务器侧通... 查看详情

《架构之美》阅读笔记一

   对于我们学习软件工程的学生来说,怎样来设计软件是一个非常重要的问题,通过阅读《架构之美》这本书,了解到了什么是架构,什么样的架构能够使软件更加的合理。   架构是系统设计的一部分,它... 查看详情

架构师必须了解的30条设计原则

...功倍,或许还可帮你避免很多无用的加班!  我们在设计软件的过程中,把握的一个关键点是:软件架构并非由架构师负责设计。我们的架构不是由架构师制定,然后交给其他人来实施。  相反,架构... 查看详情

快速了解链码是什么?

...,也就是说所有对账本的操作都是由智能合约来完成的。我们可以认为它是生成交易的唯一来源。我们的账本是由不同的区块组成,而每一个区块又包含了一条到多条的交易。那么就是说通过智能合约来完成每一条交易,最终通... 查看详情

架构之美阅读笔记四

...什么限制条件下工作,这样也就确定了问题空间。接下来我们要了解事实,重要问题和架构的关注点。确定工作流也是一个极为重要的步骤,来自于我们对于如何划分系统的考虑。  系统架构常见的关注点有,功能性:产品向... 查看详情

微服务认知(代码片段)

...践1,为何选择微服务?现在,在我介绍微服务之前,让我们看看在微服务之前流行的架构,即单体架构。通俗地说,您可以说它类似于一个大容 查看详情

跟阿里云技术专家阙寒一起深度了解视频直播cdn技术

...直播平台都采用了阿里云直播CDN来搭建自身业务。今天,我们请来了阿里云CDN团队技术专家阙寒,来介绍下视频的一些基础知识和视频直播的架构。 在进入正题之前,我们先来了解视频直播相关的名词含义是什么?扫个盲通... 查看详情

mqjms以及activemq的了解和认识

新加入的公司中,架构用到了activeMq,对于以前只了解nginx、tomcat的我有点懵逼,所以在网上找点资料看看,了解下什么是MQ,activemq。具体作用是什么 MQMQ简介:MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通... 查看详情