猿猿趴架构实战--03 什么是架构

article/2025/8/18 0:41:33

3 什么是架构?

3.1 官方定义

“组成”论:程序或计算系统的软件架构是系统的一个或多个结构,它包括软件元素、这些元素的外部可见属性以及它们之间的关系。
“决策”论:软件架构是一系列重要决策的集合,这些决策与以下内容有关:软件系统的组织;选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;如何组合这些元素,使它们逐渐合成为更大的子系统;用于指导这个系统组织的架构风格。
综合两者:架构是一个系统在其组件层面的基本组织结构表现,包括系统内部组件之间的关系、组件与外部的关系以及决定其设计和演进的原则。

不知道大家第一眼看到这些官方定义会有什么感觉?反正作为一个非科班出身的程序员,我记得很清楚,这个架构定义是唯一一个我看了几年都还是觉得不明觉厉的定义。到现在不知不觉自己也做了十多年的架构,回头再看这个定义时,猛然才发现之前之所以一直不得要领,是因为我太过于执着于这个定义所包含的文字本身,而忽略了架构存在的根本原因和目的。为了帮助和我当初一样的小白同学快速地体会到架构的精髓,在此我把我对架构的理解和大家分享。

3.2 我的理解

架构存在的根本原因在于:目前的软件系统过于庞大复杂,参与方众多,投入巨大,因此如何在项目初期、在概要设计、详细设计之前便能协调各方关注,确保项目成功实施,以避免后续因项目实施失败而产生的巨大人力、物力、时间的浪费,就成为了一个必不可少的工作,而这个工作就是架构设计,而该工作产生的结果即为架构

与面向具体业务模块实施的概要设计、详细设计不同,架构设计的目的更多的是通过架构控制项目整体的可实施性及其后续的运营风险。他在整个项目实施的初期就应成型,他面向的是整个系统,是比概要设计更高级别的设计,它不会也不应面面俱到,它关注的是系统的核心功能与核心特质,因此常常通过一些顶层结构及关键决策来表述。顶层结构自然而然地被描述为组件和组件之间的关系,以及组件与外界之间的交互;而关键决策往往来源于为了保证核心功能和核心特质权衡取舍后得到的定论

综上所述,我对架构的理解如下:

架构就是确保系统核心功能,核心特质不受侵扰、自由生长的一系列顶层结构及关键决策。

近一步解释:
1、功能与特质指代系统的功能性需求与非功能性需求
2、不受侵扰、自由生长指的是边界、职责清晰、可用、预测并响应变化,
3、一系列代表针对同一个系统、不同的关切会有不同的顶层结构(如业务架构、逻辑架构、数据架构、物理架构等等)及关键决策(分别针对安全、性能、高可用、可维护性等等)。
4、顶层结构即是组件和组件之间的关系,以及组件与外界之间的交互(如猿猿趴-物理架构);
猿猿趴物理架构

5、关键决策为了保证核心功能和核心特质,权衡取舍后得到的定论(如为了保证数据可信核心特质,猿猿趴允许适当降低用户的交互体验;为保证用户访问速度并控制网络带宽成本,猿猿趴前端实现动静分离,并引入OSS及CDN加速,但这其实增加了系统实施的工作量和复杂度);

3.3 总结

官方的定义更多的是描述架构最终的表现形式,而隐藏了架构产生的前因后果,所以对于小白用户有些过于高深莫测,但如果从架构存在的根本原因和目的出发,自然而然的推导出架构落地时的表现形式,这样理解应该更容易把握架构的精髓。


http://chatgpt.dhexx.cn/article/IpkS1VrI.shtml

相关文章

猿来代理模式如此esay~

文章目录 代理为什么要使用代理静态代理动态代理有了静态代理为什么还要有动态代理JDK动态代理 代理 为什么要使用代理 简化代码开发,应用场景例如:Spring中的AOP就使用了动态代理的思想,进一步降低了代码的耦合性 设想这样一个业务需求&am…

名师为何离开猿辅导?

来源|盒饭财经 编辑|谭丽平 有名师正跳下猿辅导这辆高速奔跑的列车。 “猿辅导数学老师邓诚去哪了?”“如何看待邓诚老师离开猿辅导”近期,在知乎上,出现了类似网友提问。 邓诚是一位明星讲师,因“跟着坑神…

猿猿

大家好,刚刚开通博客,欢迎各位多踩踩,以后还有很多学习上的问题还得多多劳烦各位大神指点。

老猿说说-Thread

引导语 从本章开始我们开始学习线程的知识,线程是非常有趣的一个章节,大多数同学对于线程 API,属于不用就忘,到用时需要百度的情况,希望通过本小节的源码阅读,能够加深对线程的印象。 本小节主要三章&…

先进计算成趋势,猿代码助力科学之梦|猿代码科技

计算,是社会发展各个环节都存在的名词,无论是科学研究,或者是生产制造,甚至于每天的睁眼闭眼,只要有思考就会有计算。在全球经济一体化的当下,经济社会对于“计算”的依赖日益凸显,“计算”早已…

猿辅导获国际科研大奖:深度解析它为何在科研界“混得”风生水起

近年来,随着新一代人工智能在全球范围内的蓬勃兴起,人们的生产和生活方式也发生了巨大的变化。人工智能作为引领新一轮科技革命和产业变革的战略性技术之一,正在各领域落地应用。为了进一步推动人工智能与教育深度融合,发挥人工智…

猿来如此java系统_2020年最新 猿来如此springboot基础脚手架(资料完整)

『视频截图』: 98.jpg (78.82 KB, 下载次数: 0) 2020-5-29 10:44 上传 97.jpg (20.2 KB, 下载次数: 0) 2020-5-29 10:43 上传 『课程目录』: 目录:/6、2020年最新 springboot基础脚手架(笔记、源码、素材 完整) ┣━━课堂笔记 ┃ ┗━━springboot基础脚手架课堂…

猿来绘Java-31-为什么子类重写的方法抛出的异常类型小于等于父类被重写的方法抛出的异常

来一个例子 //OverrideTest.java package com.ylaihui.exception;import java.io.FileNotFoundException; import java.io.IOException;public class OverrideTest {public static void main(String[] args) {OverrideTest test new OverrideTest();test.display(new SubClas…

写在 2023 年初的后端社招面试经历(四年经验):字节 米哈游 富途 猿辅导

目录 背景面试准备面试 字节跳动米哈游富途牛牛猿辅导 总结 一些推荐 1. 背景 距离上一次面试[1]已经过去快 3 年了,又碰上 2022 年互联网行业大动荡,很多企业都做出了裁员决定。 身为互联网人要时刻关注自身成长,所以会对 “跟面试官切磋” …

猿人学第一题

** 猿人学系列保姆级教程 ** 第一题* 链接:http://match.yuanrenxue.com/match/1 1 分析所需参数请求来源及获取请求索要参数 上图我们可以分析出我们所需数据请求的url为http://match.yuanrenxue.com/api/match/1?me1c053a7e2130d440b11196035803350%E4%B8%A81608486311…

猿来你也在这里,北京上海无聊猿线下见面会成功举办

由Angry Rabbit暴躁兔社区、男士理容生活潮牌公司dearBOYfriend、REVO联合众多无聊猿NFT玩家举办的无聊猿聚会活动于8月7日下午在北京与上海两地同期正式举行。 本次下线活动在北京的举办地为海淀区荷清路东升园公寓Meta Space咖啡厅,参与者16人,上海举办…

猿创征文|那一年

猿创征文|那一年 那一年,因为游戏我与开发结缘那一年,我选了软件技术专业那一年,我实习了那一年,我去了一家培训外包公司那一年,我大学毕业那一年,我去了济南工作那一年,再就业那一年…

猿创征文 | Python 开发工具进化之旅

​ 前言 我为什么会接触Python? 小元是开发驱动底层的,比驱动还底层,没错就是底层设备内部程序。驱动层以下都是 C 的天下, 我为什么会接触到 Python? 2010 年的时候, 那时候 python 还没火, 那时候我就…

猿人学第1题(一天搞一个)

文章目录 前言 1. 加密方法1.1 加密寻找准备1.1.2 抓包分析1.1.3 调用堆栈前期试验理解中期操作 1.2 加密内容 2. 代码实现2.1 完整版代码2.2 python函数总结2.3 注意 前言 对js的基础一窍不通,最近才开始看。所以本文只是复现,别人的操作的逻辑。 如果…

猿人学 第一题

地址:http://match.yuanrenxue.com/match/1 思路: 1.找到传输加密地址,发现加密字段m,,通过全局搜索没有找到m值 2.通过该地址访问过的js文件排查到request,再通过断电发现m加密地方 3.找到对应的加密方…

JAVA保姆级教学(一)[安装及使用]

一.首先我们常用编写java的是idea和eclipse,在这里呢我们主要讲解的是eclipse,它的安装及配置比较复杂,小伙伴们耐心看完这篇文章,少迷路~ 二.首先,我们去官网自行下载eclipse和jdk,有的人刚接触java可能不会下载,那么…

常用服务和开放端口对照表

常用服务和开放端口对照表 代理服务器常用以下端口: (1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080 (2). SOCKS代理协议服务器常用端口号:1080 (3). FTP&am…

常用端口号\协议\服务对照表

转载于:https://blog.51cto.com/networktech/291211

常用端口号与对应服务

1、端口号 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意…

HTTP,TCP,UDP常见端口对照表大全

HTTP,TCP,UDP常见端口对照表,下面罗列了包括在Linux 中的服务、守护进程、和程序所使用的最常见的通信端口小贴士:CtrlF 快速查找 Http端口号(点标题可收缩或展开) No1.最常用端口 端口号码/层名称注释1tcpmuxTCP端口服务多路复用5rje远程作…