架构02 - 架构的基础: 特点,本质...

news2024/11/17 3:25:37
  1. 软件架构简介:

    架构是对系统中各个实体以及它们之间关系的抽象描述,是对功能和形式元素之间对应关系的分配,也是对元素之间关系及与周边环境关系的定义。软件架构的核心价值在于控制系统的复杂性,实现核心业务逻辑和技术细节的解耦和分离。

    软件架构可以视为系统的草图,描述了直接构成系统的抽象组件,并明确和细致地描述了组件之间的通信。在实际实现阶段,这些抽象组件会被细化为具体的组件,比如特定的类或对象。在面向对象领域中,组件之间的连接通常通过接口来实现。

    作为架构师,主要职责是培养思维能力,通过合理的分解和抽象来理解复杂系统,理解并解析需求,创建有用的模型,确认、细化和扩展模型,并管理整个架构过程。同时,架构师还需要进行系统分解,形成整体架构,正确选择技术方案,制定技术规范,并有效推动实施和落地。

  2. 系统复杂性的来源与应对

    在软件开发中,程序员可以通过创造力思维和思维组织能力创造出天马行空的世界。然而,随着系统功能的增加,系统变得越来越复杂,各个模块之间存在微妙的依赖关系。这导致修改系统变得困难,并且容易引入Bug,从而延缓开发进度并增加开发成本。

复杂性的增加在很大程度上是不可避免的,而且往往不受我们主观意愿的影响。复杂性的来源可能包括:

1. 吸积与持续迭代:由于增量式设计和持续重构,软件设计永不结束,需要时刻考虑设计问题并找到更好的设计方案。

2. 交互且无扩展性设计:大规模系统结合了交互特性,使得技术系统更加复杂,并且各个系统之间的交互会增加系统的复杂性。

3. 不合理的业务封装:不合理的业务封装,例如面向过程而不是对象、分层不合理等,也会增加系统的复杂性。

4. 缺乏统一语言:团队成员专注于自己负责的环节,导致缺乏全局视角,影响沟通与理解。

5. 缺乏约束与规范:缺乏规范和约束会损害架构的一致性和代码的可维护性,导致整体复杂性的增加。

要应对复杂性,我们需要不断推陈出新,持续迭代,动态地重塑对软件系统的认识。控制复杂性的途径可以是编写简洁明晰的代码,减少特殊场景的处理,保持变量命名一致性等。另外,对于复杂问题,可以进行抽象和分解,采取分而治之的策略。

最后,需要注意的是,复杂性的应对是一个持续的过程,没有一劳永逸的解决方案。只有不断迭代和改进,才能有效控制和应对系统的复杂性。

大型网站的特点

1、用户多,分布广泛

2、大流量,高并发

3、海量数据,服务高可用

4、安全环境恶劣,易受网络攻击

5、功能多,变更快,频繁发布

6、从小到大,渐进发展

7、以用户为中心

8、免费服务,付费体验

大型网站架构目标

1、高性能:提供快速的访问体验。

2、高可用:网站服务一直可以正常访问。

3、可伸缩:通过硬件增加/减少,提高/降低处理能力。

4、安全性:提供网站安全访问和数据加密,安全存储等策略。

5、扩展性:方便的通过新增/移除方式,增加/减少新的功能/模块。

6、敏捷性:随需应变,快速响应;

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

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

相关文章

C++I/O流——(1)I/O流的概念

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 勤奋,机会,乐观…

小红书私信组件功能解读,商家如何使用

今年八月,小红书私信组件上新了两大新功能。新功能的出现,无疑为商家与消费者的沟通建联,提供了新的可能。今天我们来针对小红书私信组件功能解读! 一、小红书私信组件新功能 这次小红书私信组件上新的两大功能分别是,…

SQL-分页查询and语句执行顺序

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…

Inis博客系统本地部署结合内网穿透实现远程访问本地站点

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

011集:复制txt文件(编码:ANSI复制到UTF-8模式)—python基础入门实例

下面给出一个文本文件复制示例。 代码如下: f_name rD:\mytest2.txt with open(f_name, r, encodinggbk) as f:lines f.readlines()copyfile rD:\copytest2.txtwith open(copyfile, w, encodingutf-8) as copy_f:copy_f.writelines(lines)print(文件复制成功) …

YOLOv8改进 | 二次创新篇 | 在Dyhead检测头的基础上替换DCNv3 (全网独家首发)

一、本文介绍 本文给大家带来的改进机制是在DynamicHead上替换DCNv3模块,其中DynamicHead的核心为DCNv2,但是今年新更新了DCNv3其作为v2的升级版效果肯定是更好的,所以我将其中的核心机制替换为DCNv3给Dyhead相当于做了一个升级,效果也比之前的普通版本要好,这个机制我认…

【2023年度总结与2024展望】---23年故事不长,且听我来讲

文章目录 前言一、学习方面1.1 攥写博客1.2 学习内容1.3 参加比赛获得证书 二、生活方面2.1写周报记录生活 三、运动方面四、CSDN的鼓励五、24年展望总结 前言 时光飞逝,又是新的一年,遥想去年2023年我也同样在这个时间段参加了CSDN举办的年度总结活动&a…

数据库期末复习重点总结

数据库期末复习重点总结 本文为总结&#xff0c;如有不对的地方请指针 第2章 关系模型的介绍 名称符号选择σ投影∏笛卡儿积连接并∪集差-交∩赋值<-更名ρ 除操作 设R和S除运算的结果为T&#xff0c;则T包含所有在R中但不在S中的属性和值&#xff0c;且T的元组与S的元…

数据结构(三)堆和哈希表

目录 哈希表和堆什么是哈希表 &#xff1f;什么是堆 &#xff1f;什么是图 &#xff1f;案例一&#xff1a;使用python实现最小堆案例二 &#xff1a; 如何用Python通过哈希表的方式完成商品库存管理闯关题 &#xff08;包含案例三&#xff1a;python实现哈希表&#xff09; 本…

highlight.js 实现搜索关键词高亮效果

先看效果&#xff1a; 折腾了老半天&#xff0c;记录一下 注意事项都写注释了 代码&#xff1a; <template><div class"absolute-lt wh-full overflow-hidden p-10"><div style"width: 200px"><el-input v-model"keyword"…

OpenCV-Python(33):SURF算法

目标 SUFR 是什么OpenCV 中的SURF 原理 学习了解过SIFT 算法后我们知道&#xff0c;它是对图像关键点进行检测和描述的&#xff0c;具有尺度不变的特性&#xff0c;但是这种算法的执行速度比较慢&#xff0c;人们需要速度更快的算法。2006年Bay,H.,Tuytelaars,T. 和Van Gool,…

智能化项目管理平台:功能丰富、操作简单、降低成本、提高效率

华西建筑智能化团队打造的项目管理平台非常实用和便捷&#xff0c;为现场管理人员提供了极大的便利。以下是对该平台的详细分析&#xff1a; 一、功能丰富 该平台为现场管理人员提供了多种功能&#xff0c;包括工人打卡、材料检验入库、施工质量检查、施工日志编写、施工进度…

vue3dLoader Cannot read properties of null (reading ‘setCrossOrigin‘)“这个报错怎么解决?

默认情况下crossOrigin默认值是“anonymous” 如果出现报错的情况 请设置crossOrigin为空字符串即可。如&#xff1a; <vue3dLoader crossOrigin""> 相关阅读 推荐&#xff1a;vue-3d-loader支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json&#xff0c;并支…

书生·浦语大模型实战营-学习笔记1

目录 书生浦语大模型全链路开源体系数据集预训练微调评测部署多智能体 视频地址&#xff1a; (1)书生浦语大模型全链路开源体系 开源工具github&#xff1a; https://github.com/InternLM/InternLM 书生浦语大模型全链路开源体系 这次视频中介绍了由上海人工智能实验室OpenMMLa…

入选人民网2023普惠金融优秀案例,合合信息旗下启信宝赋能银行对公信贷数字化转型

普惠金融承载着改善民生、促进实体经济发展的重要职责&#xff0c;近十年来&#xff0c;普惠金融发展取得了长足进步&#xff0c;多层次普惠金融供给格局逐步确立。银行作为金融体系的重要组成部分&#xff0c;高效工作是构建普惠金融体系的重要推动力。 立足于十年的历史节点…

mmdet tools 使用指南

MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 OpenMMLab 项目的一部分。 主分支代码目前支持 PyTorch 1.8 及其以上的版本。 使用前提 (1)mmdet使用手册地址 https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/index.html#id2 (2)第一次运行前请…

观测云产品更新 | 日志、场景仪表板、监控器等

观测云更新 用户访问监测 &#xff08;RUM &#xff09; 公网 Dataway 支持 ip 转换成地理位置信息。 日志 > 查看器详情页 1、新增 BPF 网络日志采集及日志详情页&#xff0c;支持 Json 格式转化&#xff1b; 2、上述 1 中的日志详情页中新增可读的展示模式&#xff0c…

SpringBoot 把PageHelper分页信息返回给前端

第1步&#xff1a;定义线程容器收纳HttpHeaders和HttpStatus import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus;public class ResponseUtils {private static ThreadLocal<HttpHeaders> ThreadLocalHeaders new InheritableT…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

前端 TS 语法 接口(2)

介绍 TypeScript的核心原则之一是对值所具有的shape进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里&#xff0c;接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。 只读属性 readonly 一些对象属性只能在对象刚刚创建的…