系统架构(01架构的特点,本质...)

目录

学习前言

一、软件架构简介

二、系统复杂性的来源与应对

三、大型网站的特点

四、大型网站架构目标

五、参考文献


学习前言

本节总结下架构相关的基础知识:概述,特点,目标,本质...

一、软件架构简介

所谓架构,见仁见智,很难有一个明确或标准的定义;但架构并非镜花水月或阳春白雪,有系统的地方就需

要架构,大到航空飞机,小到一个电商系统里面的一个功能组件,都需要设计和架构。

抽象而言,架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是对物/信息的功能与形式元素

之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。

架构能将目标系统按某个原则进行切分,切分的原则,是要便于不同的角色进行并行工作,结构良好的创造

活动要优于毫无结构的创造活动。

软件架构的核心价值,即是控制系统的复杂性,将核心业务逻辑和技术细节的分离与解耦。软件架构是系统

的草图,它描述的对象是直接构成系统的抽象组件;各个组件之间的连接则明确和相对细致地描述组件之间的通

信。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间

的连接通常用接口来实现。

架构师的职责是努力训练自己的思维,用它去理解复杂的系统,通过合理的分解和抽象,理解并解析需求,

创建有用的模型,确认、细化并扩展模型,管理架构;能够进行系统分解形成整体架构,能够正确的技术选型,

能够制定技术规格说明并有效推动实施落地。

二、系统复杂性的来源与应对

在软件开发中,程序员往往能够脱离现实规律的束缚,创造出天马行空的世界,其也是最具有创造力的活动

之一。编程唯一需要的是创造力思维和思维组织能力,这意味着在软件开发过程中最大限制是理解我们正在创建

的对象。

随着软件的演进,加入更多的功能点,系统变得越来越复杂:各个模块(Module)间存在着各种微妙的依

赖关系。系统的复杂性随着时间积累,对于程序员来说,修改系统时考虑周全所有的的相关因素变得越来越困

难。这就会使软件开放进度变缓慢,并且引入 Bug,而导致会进一步延缓开发进度,增加开发成本。

在任何一个系统的生命周期中,复杂性不可避免会增加;系统越大,需要更多的人开发,管理系统复杂性的

工作就越困难。

Eric Evans 在 Domain‐Driven Design 一书中吐槽了所谓的意大利面式架构,即代码确实做了有用的事,但

很难解释它是如何去执行的;他认为造成这种窘境的主要原因是,将领域问题的复杂度与技术细节的复杂度混合

在了一起,最终导致整体复杂度的指数级增长。

复杂性不是凭空而来,很多时候也不是刻意为之,这也就意味着复杂性的增加往往不会以我们的主观意志为

转移。就像房间里的大象,我们无法逃避,也不能视而不见。复杂性的来源可能是:

  • 吸积与持续迭代:增量式设计意味着软件设计永不结束,设计在系统的生命周期中持续发生,程序员要时刻

考虑设计问题。增量开发也意味着持续重构。一个系统的初始设计几乎从来都不是最好的方案。随着经验的

增加,必然会发现更好的设计方案。

  • 交互且无扩展性设计:当吸积效应导致的大规模系统,结合了交互这个特性,会使技术系统更加复杂。一

个技术系统除了作用于自身,还会与其它大量系统产生交互。比如下单购买一件商品,那么订单系统,商品

系统,支付系统,物流系统,卡券系统就会交互协作。这样吸积的复杂性,由于交互特性的出现,会呈现几

何级数上升。

  • 不合理的业务封装:不合理的业务封装是一个相对宽泛的概念,其具体的表现譬如面向过程而不是对象、分

层不合理等。

  • 缺乏统一语言:典型的敏捷开发的结构,流水线上的各个角色往往会专注于自己负责的环节,精细化的分工

也限制了每个角色的全局视角;虽然我们经常提倡所谓的主人翁意识,但是在落地时又很难去推进。

  • 缺乏约束与规范:在团队协作开发的背景下,缺少规范和约束会严重损害架构的一致性(Consistency),代

码的可维护性将急剧下降。可能规范在实现层面就是命名、分包等不影响代码运行的小问题,但是千里之

堤,溃于蚁穴,正是这些微末的不注意导致了整体复杂性的雪崩。

复杂性的应对永远不会是一劳永逸,我们需要不断地推陈出新,是动态、渐进的重塑自己对软件系统的认识,不

断认识问题和寻找更优解的持续迭代。

第一个控制复杂性的途径是代码简单,意图清晰(Obvious)。例如: 减少特殊场景的处理,或变量命名一致性都

能降低系统复杂性。

另一种方式就是对复杂问题的抽象然后分而治之。

三、大型网站的特点

  • 用户多,分布广泛
  • 大流量,高并发
  • 海量数据,服务高可用
  • 安全环境恶劣,易受网络攻击
  • 功能多,变更快,频繁发布
  • 从小到大,渐进发展
  • 以用户为中心
  • 免费服务,付费体验

四、大型网站架构目标

  • 高性能:提供快速的访问体验。
  • 高可用:网站服务一直可以正常访问。
  • 可伸缩:通过硬件增加/减少,提高/降低处理能力。
  • 安全性:提供网站安全访问和数据加密,安全存储等策略。
  • 扩展性:方便的通过新增/移除方式,增加/减少新的功能/模块。
  • 敏捷性:随需应变,快速响应;

五、参考文献

软件架构概念

  • 软件架构概念 - 简书

框架设计原则(梁飞)

  • 框架设计原则(梁飞) - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10088.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

飞凌嵌入式FET527N-C核心板现已适配Android 13

飞凌嵌入式FET527N-C核心板现已成功适配Android13,新系统的支持能够为用户提供更优质的使用体验。那么,运行Android13系统的FET527N-C核心板具有哪些突出的优势呢? 1、性能与兼容性提升 飞凌嵌入式FET527N-C核心板搭载了全志T527系列高性能处…

如何借助AI 来提高开发效率

前言 随着人工智能(AI)技术的快速发展,特别是大规模语言模型(如 GPT 系列)的崛起,软件开发领域正在经历一场革命。AI 大模型不仅在代码生成方面展现出强大的能力,还在测试、维护和创新等多个环…

C++ 高效率整型大数运算项目优化——内置类型存储与计算

C 高效率整型大数运算项目优化——内置类型存储与计算 一、前言二、优化设计分析类的设计 三、设计实现加法减法乘法对于 lint:对于 iint: 左移与右移左移右移 除法基本除法借用内置类型计算第一种情况第二种情况其他情况区间定位二分计数内置类型求近似…

Qt教程(007):资源文件添加

文章目录 7.1 创建新的项目7.2 添加资源文件7.2 设置页面7.1 创建新的项目 选择创建项目类型 输入项目名称 勾选UI界面 7.2 添加资源文件 选中项目名称,右键,选择【Add New】 添加资源文件 选择Qt Resource File文件

利用轻易云高效集成旺店通与金蝶云星空销售出库单

重跑数据—分销旺店通销售出库单>金蝶销售出库单(正常销售&刷单)(ok) 在企业信息化管理中,数据的准确性和及时性至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将旺店通企业奇门的数据高效…

CAN总线协议

电气特性 高速CAN:电压差为0V时表示逻辑1(隐性电平),电压差为2V时表示逻辑0(显性电平),速率:125Kbps~1Mbps。低速CAN:电压差为-1.5V时表示逻辑1(…

Nginx简易配置将内网网站ssh转发到外网

声明:本内容仅供交流学习使用,部署网站上线还需要根据有关规定申请域名以及备案。 背景 在内网的服务器有一个运行的网页,现使用ssh反向代理,将它转发到外网的服务器。 但是外网的访问ip会被ssh反向代理拦截 所以使用Nginx进行…

决策树算法

决策树算法对数据进行分类的一种算法,根据数据的属性进行分类,例如对鸢尾花进行分类,可以根据花瓣大小进行分类。决策树可以使用信息熵和基尼指数进行数据分类。 信息熵:信息熵越低,样本不确定性越小,对应…

程序员学长 | 最强总结,机器学习中处理不平衡数据集的五种方法!!

本文来源公众号“程序员学长”,仅用于学术分享,侵权删,干货满满。 原文链接:最强总结,机器学习中处理不平衡数据集的五种方法!! 今天给大家分享处理不平衡数据集的常用方法。 在开始之前&…

08 Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法

文章目录 Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法一、故障场景及恢复策略1.1 实例失败1.2 介质故障1.3 数据丢失 二、RMAN恢复方法详解2.1 全库恢复2.2 增量恢复2.3 时间点恢复 三、实践与总结 Oracle数据库故障应对与恢复策略:全面掌握RM…

线段树专题(1)

线段树 线段树可维护的信息类型 线段树可以维护的信息类型,父范围上的某个信息,可以用O(1)的时间,从子范围的信息加工得到,例如求某个范围的最大最小值,给某个范围每个位置加相同的数字,进行求和。 0到2范…

Linux应用开发基础知识——tslib应用编程(十一)

文章目录 一、tslib是啥?二、tslib 框架分析三、交叉编译、测试 tslib3.1、交叉编译tslib(1)设置交叉编译工具链(2)进入tslib目录(3)安装工具链(4)确定工具链中头文件、库…

MySQL必会知识精华6(组合WHERE子句)

我们的目标是:按照这一套资料学习下来,大家可以完成数据库增删改查的实际操作。同时轻松应对面试或者笔试题中MySQL相关题目。 上篇文章我们先做一下数据库的where条件过滤的方法,都是单个条件的过滤。本篇文章主要介绍查询的组合WHERE子句的…

系统架构师2023版:习题

架构设计基础 计算机基础 目前处理器市场中存在 CPU 和 DSP 两种类型的处理器,分别用于不同的场景,这两种处理器具有不同的体系结构,DSP采用()。 A.冯诺依曼结构 B.哈佛结构 C.FPGA 结构 D.与 GPU 相同的结构 解析:…

企微SCRM价格解析及其性价比分析

内容概要 在如今的数字化时代,企业对于客户关系管理的需求日益增长,而企微SCRM(Social Customer Relationship Management)作为一款新兴的客户管理工具,正好满足了这一需求。本文旨在为大家深入解析企微SCRM的价格体系…

RocketMQ学习笔记

RocketMQ笔记 文章目录 一、引言⼆、RocketMQ介绍RocketMQ的由来 三、RocketMQ的基本概念1 技术架构2 部署架构 四、快速开始1.下载RocketMQ2.安装RocketMQ3.启动NameServer4.启动Broker5.使⽤发送和接收消息验证MQ6.关闭服务器 五、搭建RocketMQ集群1.RocketMQ集群模式2.搭建主…

基于AI大模型开发应用层产品经典解决方案:ASR+LLM+TTS

在 AI 大模型开发领域,ASR(自动语音识别)LLM(大语言模型)TTS(语音合成)的解决方案是一种将语音输入、语言理解和语音输出整合在一起的技术架构,能够实现智能的语音交互应用。 方案介…

tree-transfer-vue3插件(树形数据穿梭框)

tree-transfer-vue3 效果图 简介 tree-transfer-vue3 是一个基于 VUE 和 element-plus 的树形穿梭框组件,使用前请确认已经引入element-plus! 此组件功能类似于element-plus的transfer组件,但是里面的数据是树形结构! 实际上&am…

临床检验方法与仪器 第一部分作业:光谱分析仪器与技术的总结与归纳+新型光谱仪的调研

临床检验方法与仪器 第一部分作业 列表归纳紫外-可见分光光度计、荧光光谱分析仪、原子吸收光谱仪、原子发射光谱仪的原理、特点、技术优势和主要应用对象;调研新型光谱仪,每一类至少提供1个例子,列出图片、厂家、型号、主要技术特点和优势。…

Linux系统编程-多线程线程属性

如何查看有那些多线程系统调用属性api 线程属性系统api举例 /* int pthead_attr_init(pthread_attr_t *attr); -对属性变量初始化int pthread_attr_destroy(pthread_attr_t *attr); -使用完毕需要销毁int pthread_attr_getdetachstate(const pthread_attr_t *attr, int*detach…