首页 > 其他分享 >架构设计理解

架构设计理解

时间:2023-12-26 19:35:37浏览次数:20  
标签:架构设计 架构 复杂度 系统 理解 软件架构 组件

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

架构的定义

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

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

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

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

架构设计的目的

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

架构复杂度来源

软件架构的复杂度主要来自于高可用、高性能以及可扩展性,除此之外,还需要考虑低成本性、安全、规模效应等方面的因素。

标签:架构设计,架构,复杂度,系统,理解,软件架构,组件
From: https://www.cnblogs.com/wyjKeepMoveOn/p/17929066.html

相关文章

  • MySQL 8.0.12 深入理解bit类型
     背景:在阿里巴巴推荐的MySQL建表规范里要求如下:表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)。解释:在MySQL里表示是和否的概念可以使用如下三种方案:1.使用bit(1)类型,此时bit允许存储的是ASCII中的0和1.0表示否1表示是的概念。2......
  • C#深度理解:数组、集合、哈希、字典、堆、栈 优缺点
    一、数组1、Array固定数组优点:1).快速访问:数组通过索引来访问元素,访问速度非常快,因为可以通过索引进行直接定位。2).内存连续存储:数组在内存中以连续的方式存储元素,这样有助于提高数据的读取和写入效率。3).多维支持:C#中的数组支持多维(二维、三维等)数据结构,可以用于表示......
  • HTML学习第五天:深入理解CSS与样式
    在今天的HTML学习中,我深入了解了CSS和样式的重要性。早上,我开始学习CSS的基础知识。CSS是一种用于描述网页样式的语言,它可以使网页更加美观和易于阅读。通过使用CSS,我可以控制网页中元素的布局、颜色、字体和许多其他样式属性。我学习了如何将CSS与HTML结合使用,以及如何使用不同的......
  • Java变量再次理解
    Java变量共分为三类,分别为成员变量,局部变量,静态变量希望这次可以理解的透彻并记住成员变量(也叫实例变量,对象变量):其实通俗理解就是当每个对象都想有自己的变量值时就是声明成员变量,比如班级里的每个人都有自己的name,我们创建类的时候声明的成员变量的名字是name,这样大家都有自......
  • 自然语言理解与语言模型:结合的力量
    1.背景介绍自然语言理解(NaturalLanguageUnderstanding,NLU)和自然语言模型(LanguageModel,LM)是人工智能领域中的两个重要概念。NLU涉及到从自然语言文本中抽取出有意义的信息,以便于进行进一步的处理和分析。而自然语言模型则是一种用于预测给定上下文中下一个词的统计模型。在这......
  • 自然语言处理的未来:语义理解与知识图谱
    1.背景介绍自然语言处理(NLP)是人工智能领域的一个重要分支,其主要研究如何让计算机理解和生成人类语言。随着大数据、深度学习等技术的发展,NLP领域取得了显著的进展。然而,目前的NLP技术仍然存在一些局限性,如无法理解语境、无法处理多义性等。因此,语义理解和知识图谱等技术成为了未......
  • Dart mixin 的一些理解
    本文主要介绍关于Dartmixin的一些理解。理解mixin概念的关键在于理解中间类。Mixinsareawayofreusingcodeinmultipleclasshierarchies先来看一个简单例子:classPiloted{intastronauts=1;voiddescribeCrew(){print('Numberofastronauts:$astrona......
  • 【电压和电流基础知识学习理解】
    电压:表示电路中某两个节点的电势差(电场中两点之间电势的差值)。电流:表示单位时间内通过导体的电荷的量,电荷定向移动形成电流(从高电势流向低电势)。电压电流关系:有了电压,才有可能产生电流,但是有电压,未必就会产生电流。电压必须加在导体的两端,这样导体中才会产生电流,如果加在......
  • 神经网络优化篇:如何理解 dropout(Understanding Dropout)
    理解dropoutDropout可以随机删除网络中的神经单元,为什么可以通过正则化发挥如此大的作用呢?直观上理解:不要依赖于任何一个特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传播下去,并为单元的四个输入增加一点权重,通过传播所有权重,dropout将产生收缩权重的平方范数的......
  • 深入理解 Docker 核心原理:Namespace、Cgroups 和 Rootfs
    通过这篇文章你可以了解到Docker容器的核心实现原理,包括Namespace、Cgroups、Rootfs等三个核心功能。如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。搜索公众号【探索云原生】即可订阅后续文章会演示如何从零实现一个简易的Docker,......