软件架构知识3-系统复杂度-高可用性、可扩展性、低成本、安全、规模

news2024/11/28 16:37:25

高可用性

系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机 器来达到目的,但其实本质上是有根本区别的:高性能增加机器目的在于“扩展”处理性能;高 可用增加机器目的在于“冗余”处理单元。

计算高可用

计算:指业务的逻辑处理,同样的算法和输入数据,产出的结果都是一样的。
在这里插入图片描述

影响因素,类似高性能中集群-任务分配,这里主要考虑异常情况,比如:
1、任务分配器与服务器之间的交互和链接。连接建立、连接中断等;
2、任务分配器需要增加分配算法。常见的双机算法有主备、主主,主备方案又可以细分 为冷备、温备、热备

存储高可用

将数据从一台机器搬到到另一台机器,需要经过线路进行 传输。
关键点:以存储高可用的难点不在于如何备份数据,而在于如何减少或 者规避数据不一致对业务造成的影响。

高可用状态决策

无论是计算高可用还是存储高可用,其基础都是“状态决策”,即系统需要能够判断当前的状态 是正常还是异常,如果出现了异常就要采取行动来保证高可用。通过冗余来实现的高可用系统,状态决策本质上就不可能做到 完全正确。

1、独裁式
独裁式的决策方式不会出现决策混乱的问题,因为只有一个决策者,但问题也正是在于只有一个 决策者。当决策者本身故障时,整个系统就无法实现准确的状态决策。

2、协商式
协商式决策指的是两个独立的个体通过交流信息,然后根据规则进行决策,最常用的协商式决策 就是主备决策。
在这里插入图片描述

这个架构的基本协商规则可以设计成:
2 台服务器启动时都是备机。
2 台服务器建立连接。
2 台服务器交换状态信息。
某 1 台服务器做出决策,成为主机;另一台服务器继续保持备机身份。

协商式决策的架构不复杂,规则也不复杂,其难点在于,如果两者的信息交换出现问题(比如主备连接中断,怎么判断主机是否正常),此时状态决策应该怎么做。目前是以增加连接(双连接、三连接等),来降低连接中断导致的问题。
在这里插入图片描述

  1. 民主式
    民主式决策指的是多个独立的个体通过投票的方式来进行状态决策。例如,ZooKeeper 集群在 选举 leader 时就是采用这种方式。

在这里插入图片描述

可扩展性

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需 要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。2个指标:正确预测变化、完美封装变化。

正确预测变化:
1、不能每个设计点都考虑可扩展性。
2、不能完全不考虑可扩展性。
3、所有的预测都存在出错的可能性。

完美封装变化:

  1. 系统需要拆分出变化层和稳定层
  2. 需要设计变化层和稳定层之间的接口

设计的时候考虑可扩展性,但如果评估后发现可扩展性设计的代价太大, 那就暂时不做,等到真的有需求时再重构。 过早考虑可扩展性,很多通用性和抽象都是推测的,等到真的要落地了,很可能发现事实并 非如此,这就是预测是错误的。

低成本

低成本给架构设计带来的主要复杂度体现在,往往只有“创新”才能达到低成本目标。这里 的“创新”既包括开创一个全新的技术领域(这个要求对绝大部分公司太高),也包括引入新技 术,如果没有找到能够解决自己问题的新技术,那么就真的需要自己创造新技术了。 类似的新技术例子很:。 NoSQL(Memcache、Redis 等)的出现是为了解决关系型数据库无法应对高并发访问带来 的访问压力。
全文搜索引擎(Sphinx、Elasticsearch、Solr)的出现是为了解决关系型数据库 like 搜索的 低效的问题。
Hadoop 的出现是为了解决传统文件系统无法应对海量数据存储和计算的问题。

安全

从技术的角度来讲,安全可以分为两类:一类是功能上的安全,一类是架构上的安全。

规模

规模带来复杂度的主要原因就是“量变引起质变”,当数量超过一定的阈值后,复杂度会发生质 的变化。常见的规模带来的复杂度有:

  1. 功能越来越多,导致系统复杂度指数级上升

  2. 数据越来越多,系统复杂度发生质变

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

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

相关文章

MyBatis案例 | 使用映射配置文件实现CRUD操作——删除数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…

Linux--网络基础(1)--0211 12

1.网络传输基本流程 1.1 同一个网段内的两台主机进行文件传输 局域网中的两态主机是可以直接通信的。(手机和电视链接同一个wifi就可以投屏) 从逻辑上讲,应用层的数据可以直接给另一个人的应用层。 从物理上讲,应用的数据需要自…

分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践

文章目录主键选择索引设计全局表唯一索引总结结语主键选择 对主键来说,要保证在所有分片中都唯一,它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键,就会发现存在很大的问题。 因为自增并不能在插入前就获得值&#xf…

TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

TDengine 3.0 虽然对底层做了大规模的优化重构,但是相对于数据文件的工作逻辑和 2.0 相比是整体保持不变的。本系列文章的主旨在于帮助用户深入理解产品,并且拥有基本的性能调试思路,从而获得更好的产品体验。本期文章会在讲解 TDengine 时序…

今天是情人节呐,我利用Python制作了好多表白的东西,快来吧~

今天是情人节那,有没有现在没有对象的宝子,评论里扣个111哈哈 目录 玫瑰 爱心树 丘比特 多彩气球 阿玥的小课堂 一、情人节的由来 二、情人节的来历和意义 玫瑰 局部代码实现如下: # 花瓣1 turtle.left(150) turtle.circle(-90, 70) …

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER) 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录…

C语言思维导图大总结 可用于期末考试 C语言期末考试题库

目录 一.C语言思维导图 二.C语言期末考试题库 一.C语言思维导图 导出的图可能有点糊,或者查看链接:https://share.weiyun.com/uhf1y2mp 其实原图是彩色的不知道为什么导出时颜色就没了 部分原图: 也可私信我要全图哦。 图里的链接可能点不…

软件测试工程师,月薪8000是一个什么样的工作状态?

这个工资得看是在什么地方,如果是在北上深,在互联网圈子里面,这个工资偏低,而且8000的话要解决生活各种开销,基本最后都是所剩无几。但是如果是在生存压力没有那么大的城市,8000基本算是很不错的一个薪资待…

IP多播技术详解

文章目录前言IP多播技术的相关基本概念IP多播地址和多播组在局域网上进行硬件多播IP多播地址和多播MAC地址映射关系在因特网上进行IP多播网际组管理协议IGMP多播路由选择协议前言 随着计算机网络的发展和个人计算机的普及,人们能够方便的在网络上畅游,进…

【大数据】YARN节点标签Node Label特性

简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…

使用 RGB 值设置颜色

使用 RGB 值设置颜色 另一种可以在 CSS 中表示颜色的方法是使用 RGB 值。 RGB 即红色、绿色、蓝色(英语:Red, Green, Blue)。 ● 红色(R)0 到 255 间的整数,代表颜色中的红色成分。。 ● 绿色(G…

【数据结构】基础:图的最小生成树(附C++源代码)

【数据结构】基础:图的最小生成树(附C源代码) 摘要:将会在数据结构专题中开展关于图论的内容介绍,其中包括四部分,分别为图的概念与实现、图的遍历、图的最小生成树以及图的最短路径问题。本文主要介绍Krus…

机器学习经典算法总结

一,KNN 算法 K 近邻算法(KNN)是一种基本分类和回归方法。KNN 算法的核心思想是如果一个样本在特征空间中的 k 个最相邻的样本中的大多数属于一个类别,那该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确…

知识图谱表示

知识图谱表示 用某种语言对知识图谱进行建模,从而方便知识运算。 符号知识表示 :以符号逻辑为基础的知识表示方法。 特点:易于刻画显示、离散的知识。具有内生的可解释性。 不足:部分隐性知识不易符号化表示,故知识表…

Pr LOGO片头动画

哈喽,各位小伙伴!今天我们来学习一下如何制作简约文字LOGO片头动画? 新建序列 新建一个1920*1080的序列,在字幕上打上我们的文字(例:Ultraman) 调出基本面板,调整文字的位置&…

全栈项目【尚医通】预约挂号系统项目介绍

🐼个人主页:爪哇斗罗 🐼博主介绍:一名打工人 🐼签名:圣人之道,为而不争。 🐼一起交流,一起进步,一起互动。 ​ 目录 一.项目介绍 二.技术架构 2.1 架构选…

SpringBoot集成Swagger3(powernode document)(内含源代码)

SpringBoot集成Swagger3(powernode document)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87449720 目录SpringBoot集成Swagger3(powernode document&#xff0…

数据库锁的12连问,你顶得了嘛?

前言 金三银四很快就要来啦,准备了数据库锁的12连问,相信大家看完肯定会有帮助的。 1. 为什么需要加锁 在日常生活中,如果你心情不好想静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁。这就是…

Simulink自动代码生成:如何标准化的建模?以MAB,MISRA C 2012建模规范为例

目录 为什么要规范建模 MAB,MISRA C2012建模规范步骤 常用的规范总结 生成代码配置 总结 为什么要规范建模 MathWorks 咨询委员会 (MAB) 规范规定了在 Simulink 和 Stateflow 中建模的重要基本规则。这些建模规范的总体目的是让控制系统模型的建模者和使用方能…

自定义ESLint规则和修复功能

这是接上一篇自定义ESLint规则开发与使用的后续扩展,之前文章中详细讲述了怎么创建一个自定义的规则,这篇文章讲述怎么实现ESLint在检测出有问题的代码时,怎么自动fix问题。 比如我们要检测项目中所有http的协议,将其替换为https协…