架构设计理解

发布时间 2023-12-26 19:25:26作者: Nora_Wu

作为一个开发人员,经常会听到架构一词,那么架构到底是什么呢?又为什么需要架构呢?以及架构设计的要点在哪?目前我作为一年级新生(工作经验一年),希望能以自己的了解浅显的回答下这个问题。

架构的定义

架构是什么?维基百科给出的解释是:架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。这个回答比较宽泛,实际理解时可能难以和日常工作关联起来。我的理解是,架构是一套开发规范和体系下(如公司、部门规定的开发规范)的具体落地方案,包括了各个模块之间的关系,以及它们协同起来完成功能的具体运作规则。
例如我从网上找到的微博架构:

其中就介绍了容器调度系统包含了决策层、内核调度层等模块,以及这些模块之间的依赖关系、运作规则。
极客时间《从零开始学架构》里,将架构定义为 4R 架构:

  • 软件系统的顶层(Rank)结构;
  • 系统由哪些角色(Role)组成;
  • 角色之间的关系(Relation);
  • 运作规则(Rule)。

结合上图来看,首先架构是分层(Rank)的,一般我们都是关注某一层的架构,而不是把每一层都杂糅在一起。架构设计时采用自顶向下、逐渐细化的方法。
而Role表示系统包含哪些角色,每个角色都会负责系统的一部分功能。而Relation就是指系统角色之间的关系。Rule即角色之间如何协调来完成系统功能。

架构设计的目的

那么为什么需要架构呢?从软件开发的历史来看,早在20世纪60年代,就有计算机大神提出过软件架构的概念。但直到20世纪90年代,随着微软等大公司开发的软件系统逐具规模,此时系统由许多部分组成,他们开始面临软件架构相关的问题,因此“软件架构”开始流行。
而架构设计的目的,简单来说,就是为了解决软件系统复杂度带来的问题
因此进行架构设计时,并不是盲目追求高性能、高可用、可扩展,而是通过熟悉和理解需求,识别本项目系统的复杂度所在之处,并评估这些复杂度,最后根据复杂点有针对性的设计出满足要求的架构。
作为新人,并不应该盲目追求高性能等指标,符合自己系统的要求即可,例如系统只有2000的TPS,那就没必要设计出可支持TPS每秒10万的系统,这样的系统当然可用,但会浪费成本,没有必要。

架构复杂度来源

软件架构的复杂度主要来自于高可用、高性能以及可扩展性。