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

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

高可用性

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

计算高可用

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

影响因素,类似高性能中集群-任务分配,这里主要考虑异常情况,比如:
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. 数据越来越多,系统复杂度发生质变

相关文章:

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

高可用性 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。 高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机 器来达到目的,但…...

SpringCloud学习笔记 - 自定义及解耦降级处理方法 - Sentinel

1. SentinelRecourse配置回顾 通过之前的学习,我们知道SentinelRecourse配置的资源定位可以通过两种方式实现:一种是URL,另一种是资源名称。这两种限流方式都要求资源ID唯一 RestController public class RateLimitController {GetMapping(…...

Redis之搭建一主多从

搭建redis一主多从的过程 1.在相应位置创建一个文件夹存放redis配置文件 mkdir myredis2.复制redis配置文件到此文件夹中 cp /opt/redis/redis/bin/redis.conf /opt/myredis/redis.conf3.新建三个配置文件 touch redis6379.conf touch redis6380.conf touch redis6381.conf4…...

Transformer机制学习笔记

学习自https://www.bilibili.com/video/BV1J441137V6 RNN,CNN网络的缺点 难以平行化处理,比如我们要算b4b^4b4,我们需要一次将a1a^1a1~a4a^4a4依次进行放入网络中进行计算。 于是有人提出用CNN代替RNN 三角形表示输入,b1b^1b1的…...

1、第一个CUDA代码:hello gpu

目录第一个CUDA代码&#xff1a;hello gpu一、__global__ void GPUFunction()二、gpu<<<1,1>>>();三、线程块、线程、网格知识四、核函数中的printf();五、cudaDeviceSynchronize();第一个CUDA代码&#xff1a;hello gpu #include <stdio.h>void cpu(…...

UG二次开发装配篇 添加/拖动/删除组件方法的实现

我们在UG装配的过程中&#xff0c;经常会遇到需要调整组件目录位置&#xff0c;在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么&#xff0c;如果要用程序实现组件的移动/拖动&#xff0c;我们要怎么做呢&#xff1f; 本节就完成了添加/拖动/删除组件方法的实现&…...

【ros bag 包的设计原理、制作、用法汇总】

ros bag 包的设计原理 序列化和反序列化 首先知道Bag包就是为了录制消息,而消息的保存和读取就涉及到一个广义上的问题序列化和反序列化,它基本上无处不在,只是大部分人没有注意到,举个简单的例子,程序运行的时候,是直接操作的内存,也就是一个结构体或者一个对象,但内…...

Linux网络:聚合链路技术

目录 一、聚合链路技术 1、bonding作用 2、Bonding聚合链路工作模式 3、Bonding实现 一、聚合链路技术 1、bonding作用 将多块网卡绑定同一IP地址对外提供服务&#xff0c;可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding&#xff0c…...

2023年数据安全的下一步是什么?

IT 预算和收入增长领域是每个年度开始时的首要考虑因素&#xff0c;在当前的世界经济状况下更是如此。 IT 部门和数据团队正在寻找确定优先级、维护和构建安全措施的最佳方法&#xff0c;同时又具有成本效益。 这是一个棘手的平衡点&#xff0c;但却是一个重要的平衡点&#…...

在浏览器输入URL后发生了什么?

在浏览器输入URL并获取响应的过程&#xff0c;其实就是浏览器和该url对应的服务器的网络通信过程。从封装的角度来讲&#xff0c;浏览器和web服务器执行以下动作&#xff1a;&#xff08;简单流程&#xff09;1、浏览器先分析超链接中的URL:分析域名是否规范2、浏览器向DNS请求…...

Dubbo学习

0.start 容器container启动&#xff08;spring&#xff09;&#xff0c;初始化我们的服务提供者&#xff08;Provider&#xff09;1.register 把业务层的方法&#xff0c;注册到注册中心&#xff08;Register&#xff09;2.subscribe 消费者&#xff08;Consumer&#xff09;订…...

CMMI-立项管理流程

立项管理&#xff08;Project Initialization Management, PIM&#xff09;的目的是&#xff1a;&#xff08;1&#xff09;采纳符合机构最大利益的立项建议&#xff0c;通过立项管理使该建议成为正式的项目&#xff08;即合法化&#xff09;。&#xff08;2&#xff09;杜绝不…...

看《狂飙》读人生,致敬2023!

作为2023年的第一篇博文&#xff0c;我不想写代码&#xff0c;我想谈谈最近看的《狂飙》&#xff0c;总结了十条哲理&#xff0c;共勉。希望我们的2023&#xff0c;未来的人生会更加出彩。 01 你以为很好的关系&#xff0c;其实也就那么回事。 陈金默以为高启强对他很好&…...

Web自动化测试——Junit5篇

文章目录一、相关依赖注入二、注解调用三、断言 Assert四、规定用例执行顺序五、高效参数化1&#xff09;单参数2&#xff09;多参数3&#xff09;文件获取参数4&#xff09;方法获取数据&#xff08;动态参数&#xff09;六、测试套件整活Junit 是一个面向 Java 语言的单元测试…...

Seata源码学习(二)-源码入口

Seata源码剖析-源码入口 Seata客户端启动 首先一个Seata的客户端启动一般分为几个流程&#xff1a; 自动加载各种Bean及配置信息初始化TM初始化RM&#xff08;具体服务&#xff09;初始化分布式事务客户端完成&#xff0c;代理数据源连接TC&#xff08;Seata服务端&#xff…...

2023如何选购适合游戏设计的电脑硬件

游戏设计涉及许多不同的学科&#xff0c;因此涉及许多不同的软件包。有游戏引擎本身&#xff0c;例如 Unreal Engine 和 Unity&#xff0c;以及 3D 设计软件&#xff0c;例如 3ds Max、Blender 和 ZBrush——等等&#xff01;大多数软件开发人员都维护着这些不同应用程序的系统…...

springboot maven项目集成阿里p3c-pmd插件使用

阿里巴巴规约使用的是pmd代码静态分析工具&#xff0c;通过maven-pmd-plugin这个maven插件实现。 pom文件引入 <!-- 阿里p3c插件 --> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-pmd-plugin</artifactId><…...

PowerJob的server启动都经历了哪些?代码不多也很简单,咱们来逐一理解。

这是一篇让你受益匪浅的文章&#xff0c;点个关注交流一下吧~ PowerJob如何使用&#xff0c;官方文档已经说的很详细了&#xff0c;即使没学过计算机的人&#xff0c;按照那上面的步骤来也是可以搭建出一个可以使用的例子来&#xff0c;所以今天就不在这里重复前人的工作&#…...

分享好玩的h5小游戏制作步骤_怎么做h5微信小游戏

近年来&#xff0c;市面上一直流行各种h5游戏&#xff0c;例如投票、答题、刮刮乐、大转盘等等等等&#xff0c;而且我在各种营销场景下经常看到它们的身影&#xff0c;是做促销&#xff0c;引流和宣传的神器之一&#xff01;那么&#xff0c;怎么做好玩的h5游戏&#xff1f;还…...

代理模式--设计模式

为什么要学习代理模式&#xff1f; 因为这是SpringAOP的底层&#xff01; 1、定义&#xff1a; 在不改变源码的情况下&#xff0c;实现对目标对象的功能扩展 根据代理类的生成时间不同可以将代理分为静态代理和动态代理两种 静态代理 角色分析 抽象角色&#xff1a;一般会…...

基于MCP协议构建AI钱包助手:安全架构与Claude集成实践

1. 项目概述&#xff1a;一个钱包的MCP服务器意味着什么&#xff1f;最近在折腾AI智能体开发&#xff0c;特别是围绕Claude Desktop这类工具构建个人工作流时&#xff0c;我遇到了一个高频痛点&#xff1a;如何让AI助手安全、可控地访问我的链上资产信息&#xff0c;或者执行一…...

从标注噪声到特征漂移,大模型数据Pipeline稳定性攻坚全解析,奇点智能大会TOP5工业级方案实录

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从标注噪声到特征漂移&#xff0c;大模型数据Pipeline稳定性攻坚全解析&#xff0c;奇点智能大会TOP5工业级方案实录 在千亿参数模型迭代周期压缩至72小时的今天&#xff0c;数据Pipeline的稳定性已成为…...

Linux Deadline 调度器的动态参数调整:运行时的参数更新

简介在传统 Linux 调度体系中&#xff0c;CFS 普通进程、SCHED_FIFO/SCHED_RR 实时进程一旦创建&#xff0c;调度优先级、时间片等参数大多只能通过用户态接口静态设置&#xff0c;运行过程中无法动态变更。而SCHED_DEADLINE作为 Linux 内核原生硬实时调度策略&#xff0c;最大…...

多模型AI代码助手:Claude、Codex、Gemini集成框架的设计与实践

1. 项目概述&#xff1a;一个面向开发者的多模型代码生成与智能助手最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Suga13/Claudecode-Codex-Gemini”。光看这个名字&#xff0c;就能嗅到一股浓浓的“缝合怪”味道&#xff0c;但别急着划走&#xff0c;这恰恰是它最有趣…...

在Cursor IDE中集成Datadog监控:自然语言查询实战指南

1. 项目概述&#xff1a;在Cursor IDE中直接查询Datadog数据如果你和我一样&#xff0c;日常开发工作离不开Cursor&#xff0c;同时又需要频繁查看Datadog上的日志、指标和告警来排查问题&#xff0c;那么来回切换浏览器和IDE的体验绝对称不上愉快。Datadog官方推出的这个Curso…...

ChatGPT情感分析能力评测:零样本表现、小样本学习与实战应用

1. 项目概述&#xff1a;ChatGPT作为情感分析器的能力边界探索最近&#xff0c;但凡关注自然语言处理&#xff08;NLP&#xff09;领域的朋友&#xff0c;恐怕都绕不开ChatGPT这个名字。它展现出的通用对话和任务解决能力让人惊叹&#xff0c;但作为一个在一线搞了多年情感分析…...

从提示式到自发式:AI心智理论的范式转变与实现路径

1. 项目概述&#xff1a;从“被问才答”到“主动思考”的AI心智革命在人工智能领域&#xff0c;我们常常惊叹于模型在特定任务上的超人表现&#xff0c;无论是下棋、写诗还是解答复杂的数学问题。然而&#xff0c;当我们将这些智能体置于一个需要理解“人”的环境中时&#xff…...

ARM Cortex-A9 MPCore架构优化与多核缓存一致性解析

1. ARM Cortex-A9 MPCore架构演进概述作为嵌入式领域最具影响力的多核处理器架构之一&#xff0c;ARM Cortex-A9 MPCore的技术手册修订历程堪称嵌入式处理器设计的"进化图谱"。从2008年首次发布到2012年的多次迭代更新&#xff0c;每个版本变更都直指多核系统的核心挑…...

【2026最新版|收藏备用】用Skill简化大模型知识库连接,小白程序员入门必看

本文专为2026年入门大模型的小白、程序员打造&#xff0c;详细介绍如何通过Skill技术简化大模型与外部知识库的对接流程&#xff0c;对比传统RAG方法的繁琐痛点&#xff0c;手把手讲解Markdown&#xff08;.md&#xff09;格式文档的存储技巧、SKILL.md文件的技能描述与导航方法…...

泊松分布实战指南:从原理到异常检测的工程落地

1. 什么是泊松分布&#xff1f;——一个数据从业者每天都在用、却未必真正吃透的概率工具你有没有算过&#xff0c;过去一小时里你的邮箱收到了几封新邮件&#xff1f;上个月车间里产线上出现了几个次品&#xff1f;过去24小时网站服务器收到了多少次API请求&#xff1f;这些数…...