当前位置: 首页 > news >正文

软件架构知识2-系统复杂度

架构设计的真正目的:是为了解决软件系统复杂度带来的问题,一个解决方案。

系统复杂度,如何入手:
1、通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。
2、架构设计并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而 是要识
别出复杂点然后有针对性地解决问题。
3、理解每个架构方案背后所需要解决的复杂点,然后才能对比自己的业务复杂点,参考复杂 点相似
的方案。

架构即(重要)决策:是 在一个有约束的盒子里去求解或接近最合适的解。这个有约束的盒子是团队经验、成本、资 源、进度、业务所处阶段等所编织、掺杂在一起的综合体(人,财,物,时间,事等)。架构无优劣,但是存在恰当的架构用在合适的软件系统中,而这些就是决策的结果。需求驱动架构,如下几点:
1、架构是为了应对软件系统复杂度而提出的一个解决方案;
2、架构即(重要)决策 ;
3、需求驱动架构,架起分析与设计实现的桥梁 ;
4、架构与开发成本的关系。
在分析设计阶段,需要考虑一定的人力与时间去"跳出代码,总揽全局",为 业务和IT技术之间搭建一座"桥梁"。
架构设计处于软件研制的前期,一方面,越是前期,如有问题,就能够越早发现,修改的代价也就越低;另外一方面,也意味着,软件实施后期若有架构上的修改,也需要付出更多的价。

复杂度来源:高性能

1、单机复杂度-单台计算机内部为了高性能带来的复杂度;
2、集群的复杂度-多台计算机集群为了高性能带来的复杂度。

单机复杂度

计算机内部复杂度有个重要关键点:操作系统。硬件是操作系统的保证
操作系统和性能最相关的就是进程和线程,
进程是操作系统分配资源最小单位,与其他进程资源互相独立。
线程是操作系统调度的最小单位,共用进程内的资源。

集群的复杂度

主要是通过大量机器来提升性能,并不仅仅是增加机器这么简单,让多台机器配合起来达到高性能的目 的,是一个复杂的任务,针对常见的几种方式简单分析一下。

1、任务分配
任务分配的意思是指每台机器都可以处理完整的业务任务,不同的任务分配到不同的机器上执行。
在这里插入图片描述

如图1 台服务器演变为 2 台服务器后,架构上明显要复杂多了,主要体现在:
1、需要增加一个任务分配器,这个分配器可能是硬件网络设备(例如,F5、交换机等),可能 是软件网络设备(例如,LVS),也可能是负载均衡软件(例如,Nginx、HAProxy),还可 能是自己开发的系统。选择合适的任务分配器也是一件复杂的事情,需要综合考虑性能、成 本、可维护性、可用性等各方面的因素。
2、任务分配器和真正的业务服务器之间有连接和交互(即图中任务分配器到业务服务器的连接 线),需要选择合适的连接方式,并且对连接进行管理。例如,连接建立、连接检测、连接 中断后如何处理等。
3、任务分配器需要增加分配算法。例如,是采用轮询算法,还是按权重分配,又或者按照负载 进行分配。如果按照服务器的负载进行分配,则业务服务器还要能够上报自己的状态给任务 分配器。

假如继续提高性能,那么任务分配器由于瓶颈问题也需要增多,如图:
在这里插入图片描述

1、任务分配器从 1 台变成了多台(对应图中的任务分配器 1 到任务分配器 M),这个变化带来 的复杂度就是需要将不同的用户分配到不同的任务分配器上(即图中的虚线“用户分配”部 分),常见的方法包括 DNS 轮询、智能 DNS、CDN(Content Delivery Network,内容 分发网络)、GSLB 设备(Global Server Load Balance,全局负载均衡)等。
2、任务分配器和业务服务器的连接从简单的“1 对多”(1 台任务分配器连接多台业务服务 器)变成了“多对多”(多台任务分配器连接多台业务服务器)的网状结构。
3、 机器数量从 3 台扩展到 30 台(一般任务分配器数量比业务服务器要少,这里我们假设业务 服务器为 25 台,任务分配器为 5 台),状态管理、故障处理复杂度也大大增加。

上面这两个例子都是以业务处理为例,实际上“任务”涵盖的范围很广,可以指完整的业务处 理,也可以单指某个具体的任务。例如,“存储”“运算”“缓存”等都可以作为一项任务,因 此存储系统、运算系统、缓存系统都可以按照任务分配的方式来搭建架构。此外,“任务分配 器”也并不一定只能是物理上存在的机器或者一个独立运行的程序,也可以是嵌入在其他程序中 的算法,例如 Memcache 的集群架构。
在这里插入图片描述

2、任务分解
在这里插入图片描述

通过任务分配的方式,我们能够突破单台机器处理性能的瓶颈,通过增加更多的机器来满足业务 的性能需求,但如果业务本身也越来越复杂,单纯只通过任务分配的方式来扩展性能,收益会越 来越低。

1、提升任务性能关键点:
简单的系统更加容易做到高性能
系统的功能越简单,影响性能的点就越少,就更加容易进行有针对性的优化。而系统很复杂的情 况下,首先是比较难以找到关键性能点,因为需要考虑和验证的点太多;其次是即使花费很大力 气找到了,修改起来也不容易,因为可能将 A 关键性能点提升了,但却无意中将 B 点的性能降 低了,整个系统的性能不但没有提升,还有可能会下降。
2、可以针对单个任务进行扩展
当各个逻辑任务分解到独立的子系统后,整个系统的性能瓶颈更加容易发现,而且发现后只需要 针对有瓶颈的子系统进行性能优化或者提升,不需要改动整个系统,风险会小很多。以微信的后 台架构为例,如果用户数增长太快,注册登录子系统性能出现瓶颈的时候,只需要优化登录注册 子系统的性能(可以是代码优化,也可以简单粗暴地加机器),消息逻辑、LBS 逻辑等其他子系 统完全不需要改动。

总结:

硬件角度-垂直维度可包括以下措施:
增大内存减少I/O操作
更换为固态硬盘(SSD)提升I/O访问速度
使用RAID增加I/O吞吐能力
置换服务器获得更多的处理器或分配更多的虚拟核
升级网络接口或增加网络接口

操作系统-水平维度可包括以下措施:
功能分解:基于功能将系统分解为更小的子系统
多实例副本:同一组件重复部署到多台不同的服务器
数据分割:在每台机器上都只部署一部分数据

垂直维度方案比较适合业务阶段早期和成本可接受的阶段,该方案是提升性能最简单直接的 方式,但是受成本与硬件能力天花板的限制。
水平维度方案所带来的好处要在业务发展的后期才能体现出来。起初,该方案会花费更多的 硬件成本,另外一方面对技术团队也提出了更高的要求;但是,没有垂直方案的天花板问 题。一旦达到一定的业务阶段,水平维度是技术发展的必由之路。

相关文章:

软件架构知识2-系统复杂度

架构设计的真正目的:是为了解决软件系统复杂度带来的问题,一个解决方案。 系统复杂度,如何入手: 1、通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。 2、架构设计并不是要…...

JavaSE学习day4_02 数组(超级重点)

3.数组 3.1什么是数组 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。 3.2数组定义格式 3.2.1第一种(常用) 数据类型[] 数组名 示例: int[] arr; double[] arr; char[] arr; 3.2.2第二种(在…...

Theano教程:Python的内存管理

在写大型程序时候的一大挑战是如何保证最少的内存使用率。但是在Python中的内存管理是比较简单的。Python显示分配内存,使用引用计数系统管理对象,当指向某一个对象的引用数变为 0 的时候,该对象所占的内存就会被释放。理论上听起来很不错&am…...

Linux | Liunx安装Tomcat(Ubuntu版)

目录 一、下载并上传Tomcat压缩包到Ubuntu 1.1 下载并解压 1.2 执行 startup.sh 文件 二、验证Tomcat启动是否成功 2.1 查看启动日志 2.2 查看启动进程 三、Windows访问 Tomcat 服务 四、停止 Tomcat 服务 Tomcat是一款Web服务器,开发Web项目基本上都会用到…...

缓冲区浅析

缓冲区 程序运行输入数据时,从键盘的输入先存储到缓冲区,只有当缓冲区满或者输入回车时程序才会真正地从缓冲区读入数据 int main() {int a, b;cin >> a >> b;return 0; }in: 1 2\n 例如这里输入空格时程序没有输出,而是将空格…...

Day888.MySQL是怎么保证主备一致的 -MySQL实战

MySQL是怎么保证主备一致的 Hi,我是阿昌,今天学习记录的是关于MySQL是怎么保证主备一致的内容。 MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人…...

互联网舆情监测系统的发展阶段,TOOM互联网舆情监测系统有哪些?

互联网舆情监测系统是一种利用计算机技术对互联网上的大量信息进行实时监测、分析和评估的工具,旨在了解公众对某一事件、话题或品牌等的态度、情感倾向和影响力等。通过对社交媒体、论坛、新闻媒体等多个渠道的数据采集和处理,系统能够实现舆情事件的追…...

GIT命令操作大全

文章目录一、前言二、工作模块2.1 Workspace:工作区2.2 Index / Stage:暂存区2.3 Repository:本地仓库2.4Remote:远程仓库三、GIT基本配置四、GIT项目代码管理4.1 初始化git仓库4.2 提交到暂存区(stage)4.3 将暂存区的文件恢复到工…...

突破传统开发模式,亚马逊云科技助力中科院加速推动合成生物学

当数字技术成为整个社会运行的底座,生物科学也能借力云计算从诸多繁琐重复的工作中解放出来,专注于生物设计与创新。来看看亚马逊云科技如何与TIBCAS合作,推动合成生物学的发展。 明确核心需求,选择合作伙伴 TIBCAS选择与亚马逊…...

分享开放通达信l2接口的过程,开发之后怎么使用?

随着互联网的不断进步,信息技术的不断发展,通达信l2接口技术逐步成熟。那么,这些开放通达信l2接口开发的过程是怎么样的呢?期间又会遇到什么问题,开放之后又会怎么使用呢?这篇文章带你深入了解。 通达信l2接口不像一…...

33、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测

背景技术 老年人出门由于身体不灵活、视力较差,容易发生跌倒,现用的老年人跌倒报警装置是通过无线对讲系统研发的,它外观精美,自动化程度高,有很强的专业性,但是,设计者忽略了一个问题&#xf…...

【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统

这里写目录标题CRM基本概念CRM分类模块功能描述项目代码application-dev.yml部分页面代码CRM基本概念 圈内存在这么一句话:“世上本来没有 CRM,大家的生意越来越难做了,才有了 CRM。” 在同质化竞争时代,顾客资产尤为重要&#x…...

手写识别字体的步骤是什么?怎么识别图片中的文字?

手写识别字体的步骤是什么?怎么识别图片中的文字? 1. 打开信风工具网,点击拍照按钮,选择拍图识字模式,对准需要识别的文件进行拍摄。在线工具地址: https://ocr.bytedance.zj.cn/image/ImageT…...

Mysql 存储过程

什么是存储过程? 存储过程是事先经过编译并存储在数据库的一段sql语句的集合 如何创建一个存储过程? create procedure 存储过程名称([参数列表]) beginsql语句; end#例 create procedure p1() beginselect * from t_goods;select * from t_user; end如…...

【LeetCode】每日一题(3)

目录 题目:1234. 替换子串得到平衡字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:1234. 替换子串得到平衡…...

websocket学习

1.什么是websocket 1)首先websocket和http一样,是一种网络通信协议,来自HTML5的特性; 2)他可以使客户端和服务端进行双工通信,简单来说,就是双向通信:比如我们熟悉的http协议&…...

Java面试题及答案整理汇总(2023最新版)

前言 面试前还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,面试前不做准备是很吃亏的。这里整理了很多面试常考的一些面试题,希望能帮助到你面试前的复习并且找到一个好的工作,也节省你在网…...

公司来了个卷王,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人,这些年前人是真能熬啊,本来我们几个老油子都是每天稍微加会班就打算走了,这几个新人一直不走,搞得我们也不好走。2023年春招就要开始了,最近内卷严重,各种跳槽裁员&…...

波奇学c语言:代码的编译和链接

test.c(源文件)->编译->test.obj(目标文件)->链接->test.exe(可执行文件)编译1.预编译(预处理):text.c->text.i使用gcc -E test.c 进行停止预处理指令&am…...

计算机网络原理--传输层协议(TCP协议十大特性)

目录 1.认识TCP协议 TCP的协议段格式 2. 确认应答机制 3.超时重传 4.连接管理 <...

nvm控制node版本

安装 nvm 1、下载 nvm 官网安装包&#xff1a; github 选择 nvm-setup.exe 下载 2、安装 1、选择 nvm 安装目录&#xff08;可自定义&#xff09; 2、选择 node 安装目录&#xff08;如有安装过&#xff0c;可以选择以前安装目录&#xff0c;可 cdm 输入 where node 查看原nod…...

从0到1一步一步玩转openEuler--13 openEuler用户组管理

文章目录13.1 创建用户组13.1.1 groupadd命令13.1.2 用户组信息文件13.1.3 创建用户组实例13.2 修改用户组13.2.1 修改GID13.2.2 修改用户组名13.3 删除用户组13.4 将用户加入用户组或从用户组中移除13.5 切换用户组在Linux中&#xff0c;每个普通用户都有一个账户&#xff0c;…...

知不知道什么叫米筐量化?怎么来的?

现在量化市场范围越来越大&#xff0c;各种量化系统也是普遍性的了&#xff0c;不过米匡量化这个开发系统通常是由交易接口的专业开发团队开发的的结果&#xff0c;那么米匡量化的终端又是是怎么开发成功的呢&#xff1f;首先&#xff0c;我们可以从api接口的调用来了解&#x…...

Urho3D 事件Events

在脚本中&#xff0c;子系统通过以下全局财产可用&#xff1a;时间、文件系统、日志、缓存、网络、输入、ui、音频、引擎、图形、渲染器、脚本、控制台、debugHud、数据库。请注意&#xff0c;由于WorkQueue和Profiler的低级性质&#xff0c;它们不可用于脚本。 事件本身不需要…...

Rust学习入门--【8】复合类型

复合类型&#xff08;compound type&#xff09; 可以将多个不同类型的值组合为一个类型。 Rust中提供了两种内置的复合数据类型&#xff1a;元组&#xff08;tuple&#xff09;和数组&#xff08;array&#xff09;。 元组类型 元组是一个具有 固定长度 的数据集合 —— 无…...

【整理六】

1、props和state相同点和不同点&#xff1f;render方法在哪些情况下会执行&#xff1f; props是一个从外部传进组件的参数&#xff0c;由于React具有单向数据流的特性&#xff0c;所以他的主要作用是从父组件向子组件中传递数据&#xff0c;它是不可改变的&#xff0c;如果想要…...

Ubuntu20.04安装MySQL5.7与远程连接

一、安装MySQL5.7 1.更换镜像源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old #备份原来的文件 sudo vim /etc/apt/sources.list #修改sources.list文件配置文件内容如下所示&#xff1a; # 清华镜像源 deb https://mirrors.tuna.tsinghua.edu.cn/ubu…...

【yolov5】首次尝试目标检测利用prompt(完整操作流程)

1、打开prompt 2、切换到pytorch所在环境 conda activate freezing我的环境名是freezing&#xff0c;这里根据自己环境名去激活切换 3、进入到yolov5项目所在路径 激活完环境后立即执行指令当然是无效的&#xff0c;首先要进入到你的项目目录 首先看一下自己的项目在那个位…...

三大指标继续狂飙!重庆啤酒:不惧强弱分化加剧,深耕高端市场

十多年前&#xff0c;重庆啤酒因为9个跌停而被一片唱衰&#xff0c;资本市场经典的“关灯吃面”典故自此出现&#xff0c;被股民沿用至今。不过自2020年&#xff0c;重庆啤酒开始逆转走势&#xff0c;股价连续上涨。2021年重庆啤酒营收突破百亿大关&#xff0c;净赚11.66亿元&a…...

MySQL数据库14——更新和删除数据

SQL里面使用UPDATE更新数据&#xff0c;删除使用DELETE语句。 Mysql要修改一下设置&#xff0c;才能更新&#xff1a; 在左上角菜单栏里面选择偏好栏&#xff0c;取消下面这个红框的勾选 更新单个字段的数据 如果运行环境为MySQL 则使用以下语句进行备份。 CREATE TABLE stu…...

wordpress怎么上传/搜狗搜索网

vim文本编辑及文件查找详解vim编辑器深入讲解vim编辑器高效用法进阶文件查找命令企业级应用Linux特殊权限及facl扩展vim编辑器深入讲解 vim编辑器 文本编辑器&#xff1a;文本&#xff1a;纯文本&#xff0c;ASCII text&#xff1b;Unicode&#xff1b;文本编辑种类&#xff…...

网站优化软件开发/2021年年度关键词

Given a binary tree, return all root-to-leaf paths. Given the following binary tree: 1/ \ 2 3\5All root-to-leaf paths are: [ "1->2->5", "1->3" ] 解题思路&#xff1a;这道题目应该就是单纯的二叉树遍历&#xff0c;从根节点出发…...

建网站需要哪些语言/没经验怎么开广告公司

什么是TomcatTomcat简单的说就是一个运行JAVA的网络服务器&#xff0c;底层是Socket的一个程序&#xff0c;它也是JSP和Serlvet的一个容器。为什么我们需要用到Tomcat如果你学过html&#xff0c;css&#xff0c;你会知道你写的页面只能自己访问&#xff0c;别人不能远程访问你写…...

网站开发怎么赚钱/无锡seo公司

(文末有赠书福利)在数据挖掘项目中&#xff0c;经常会遇到的情况是有很多特征可以用&#xff0c;这是一件好事&#xff0c;但是有的时候数据中存在很多冗余情况&#xff0c;也就是说数据存在相关性或者共线性。在这种情况下对于分析带来了很多麻烦。不必要的特征太多会造成模型…...

旅游网站反链怎么做/免费软文推广平台

股票上涨的本质是市场对公司未来盈利和增长前景的预期越来越乐观,导致投资者对该公司股票的需求增加,从而推高股票价格。...

不用虚拟机可以做网站吗/百度统计网站

学习masterCAM的同时不利于同时学其它的软件 一&#xff1a;关于masterCAM之前及注意事项 1、每天给自己一个目标该学些什么内容。 2、当你要学习的时候请把QQ和所有聊天工具关啦&#xff0c;用100%的专心去学习。 3、在论坛里下的资料要去用心去看去学。切记整天泡论坛下资…...