如何设计高可用架构

news2024/11/26 2:25:17

高可用复杂度模型

在这里插入图片描述

计算高可用

任务分配

在这里插入图片描述

将任务分配给多个服务器执行

复杂度分析

  1. 增加“任务分配器”节点,可以是独立的服务器,也可以是SDK
  2. 任务分配器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如Zookeeper)
  3. 任务分配器需要根据不同的需求采用不同的算法分配
  4. 任务分配器需要监控业务服务器的状态,在故障时进行切换

任务分配架构设计关键点

在这里插入图片描述

案例

在这里插入图片描述

任务分解

在这里插入图片描述

将服务拆分为不同角色,不同服务器处理不同的业务

复杂度分析

  1. 增加“任务分解器”节点,可以是独立的服务器,也可以是SDK
  2. 任务分解器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如Zookeeper)
  3. 需要设计任务拆分的方式,任务分解器需要记录“任务”和“服务器”的映射关系
  4. 任务分配器需要根据不同的需求采用不同的算法分配
  5. 任务分解器需要监控业务服务器的状态,在故障时进行切换

任务分解架构设计关键点

在这里插入图片描述

案例-微信服务拆分

在这里插入图片描述

架构模式

  1. 按照业务逻辑划分服务器集群
  2. 独立的接入服务器

存储高可用

复杂度模型

在这里插入图片描述

数据复制

复制格式

复制命令

在这里插入图片描述

优缺点
  1. 实现简单,复制数据量小
  2. 数据可能不一致(SQL函数)
适用场景

增量复制

复制数据

在这里插入图片描述

优缺点
  1. 实现简单
  2. 保证数据一致
  3. 复制流量可能会很大
适用场景

增量复制

复制文件

在这里插入图片描述

优缺点
  1. 实现复杂,复制的时候数据在变
  2. 保证数据一致
  3. 复制流量可能会很大
适用场景

全量复制

复制方式

同步复制

在这里插入图片描述

优缺点
  1. 最强一致性,故障容忍度低
  2. 写入性能低
适应场景

主备/主从架构

异步复制

在这里插入图片描述

优缺点
  1. 写入性能高,故障容忍度高
  2. 容易出现数据不一致
适应场景

数据存储集群

半同步复制

在这里插入图片描述

优缺点

同步复制和异步复制的折中方案

适应场景

数据存储集群

多数复制

在这里插入图片描述

优缺点
  1. 数据强一致性,最强可用性,故障容忍度高
  2. 写入性能不高,实现复杂
适应场景

分布式一致性、分布式协同

案例

Redis

在这里插入图片描述

复制格式:命令(AOF)+文件(RDB)

复制方式:异步+wait(指定半同步)

MySQL

在这里插入图片描述

复制格式:命令(statement)+数据(Row)

复制方式:异步+半同步

状态决策

方式

独裁式

在这里插入图片描述

优缺点
  1. 决策逻辑简单
  2. 决策者要做到高可用,整体架构复杂,常用Zookeeper、Raft、Keepalived
  3. 数据一致性强度中等
应用场景

绝大部分业务都可以应用

协商式

在这里插入图片描述

优缺点
  1. 架构实现简单,决策逻辑简单,一般是心跳机制
  2. 如果是链路问题,会导致双主,可以用双通道来缓解
  3. 数据一致性弱
应用场景

内部系统

民主式/选举式

在这里插入图片描述

优缺点
  1. 决策过程复杂,决策逻辑复杂,一般用标准算法进行选举,例如Raft、ZAB、Paxos
  2. 可用性最高,数据一致性最强
  3. 可能出现“脑裂”问题,可以采用quorum来控制
应用场景

对数据一致性要求很高的场景,例如余额、库存

案例

独裁式
Redis

在这里插入图片描述

使用Sentinel集群来解决“决策者”单点问题,sentinel又是通过Raft算法进行选举的

Hadoop

在这里插入图片描述

NameNode是集群决策者,使用Zookeeper集群来解决NameNode单点问题

民主式
Zookeeper

在这里插入图片描述

基于ZAB算法选举

MongoDB

在这里插入图片描述

3.2.0以前基于bully算法,3.2.0开始基于Raft算法

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

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

相关文章

2023 年 10 大 Web 开发趋势

公司的在线形象是最重要的。您使用的平台越多,您就会变得越成功!拥有在线形象的困难部分是脱颖而出。如果你没有有趣的东西可以提供,你会迷失在人群中。 除了网站具有的基本功能外,您还需要拥有更多功能才能使您的网站具有可持续…

基于BDD的接口自动化框架开箱即用

1、背景说明 项目思想:BDD 行为驱动开发的思想褒贬不一,这里不多说。遵循的宗旨能解决业务痛点的思想就是好思想。 接口测试工具在实际的业务测试场景中往往会遇到一些使用上的局限性,自定义扩展要求技术较高,如果二次开发工具…

平安康养的生意经:养老的壳,金融的核

图片来源Unsplash 文丨螳螂观察 作者丨陈淼 根据第七次人口普查数据,我国60岁及以上老年人口占总人口的比重为18.7%,人口结构即将进入中度老龄化。而伴随着社会老龄化趋势的加剧,背后的养老市场也在迎来巨大的商业化增长。 现阶段&#x…

下班路上捡了一部手机,我用8年开发知识主动找到了失主

☆ 我们学习开发知识,其实并不是只解决当前用户的需求,实现UI原型的还原,不应该只把自己嵌套在当前的浏览器或者某个docker的环境下。 因为不管你在tomcat或者数据库里折腾得再欢,可能到了生活中发现自己失去了超能力。 ☆ 记得有…

校园论坛(Java)——环境配置篇

校园论坛(Java)——环境配置篇 文章目录校园论坛(Java)——环境配置篇1、写在前面2、新建Maven项目2.1 引入相关依赖2.2 配置Tomcat环境3、项目发布测试4、项目代码5、参考资料1、写在前面 Windows版本:Windows10JDK版…

Vue中数据代理与事件处理

目录 数据代理 Object.defineProperty 常见属性值 get和set函数 理解数据代理 Vue中的数据代理 Vue中的数据代理小结 事件处理 v-bind 事件处理小结 数据代理 Object.defineProperty 常见属性值 <body> <script type"text/javascript"> let per…

你的数据库到底应该如何存储密码?

最近接手公司一个之前的服务&#xff0c;竟然发现用户密码是明文存储在数据库中&#xff01; 说实话还是有点吃惊的&#xff0c;这可不兴学 CSDN 呀&#xff08;手动狗头&#xff09;&#xff0c;至少也得搞个 MD5 存一存吧。 不过 MD5 其实也没啥用&#xff0c;今天我们就来…

阿里P7告诉你,接口测试真的很简单,有手就行

一、什么是接口测试&#xff1f; 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试&#xff0c;则是通过接口的不同情况下的输入&#xff0c;去对比输出&#xff0c;看看是否满足接口规范所规定的功能、…

使用SQL语句处理csv数据

目录 1. CsvQuery插件安装 2. CsvQuery简单说明 2.1 以表格的形式展示数据 2.2 执行SQL查询语句 2.3 将查询结果保存为新文件 2.4 数据处理 EXCEL打开csv文件日期、文本形式的大数会被自动转换成科学计数&#xff0c;用编辑器打开csv文件可以避免这种情况&#xff0c;但是…

两个对象相等(==、equals、hashCode)详解

目录1. 和 equals2. hashCode1. hash 概述2. hashCode1. 概念2. 获取对象地址3. hashCode 与 equals1. 两者关系2. 重写 equals并 重写 hashCode1. 只重写 equals2. 重写 equals 并重写 hashCode3. 小结1. 和 equals 在 Java 中&#xff0c;判断两个对象是否相等&#xff0c…

CMOS反相器的工作原理和电路结构

CMOS 反相器的电路结构 当输入为高电压的时候&#xff0c;下半部分导通&#xff0c;输出端接地 当输入为低电压的时候&#xff0c;上半部分导通&#xff0c;输出端连接VDD 静态输入特性 从反相器输入端看进去输入电压与电流的关系 因为栅极和衬底之间存在着以二…

子网掩码与VLAN有何区别?

子网掩码与VLAN有何区别?_百度知道 (baidu.com) 可以这么理解&#xff1a;子网掩码是对节省IP地址的资源而设立。而VLAN则是对方便网络管理需要而设立。两者之间似乎有相识之处&#xff0c;但各自的功能是不一样的。 vlan下起子网,子网掩码与vlan有何区别-天道酬勤-花开半夏…

[附源码]Python计算机毕业设计Django的高校课程知识库

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

前后端分离项目的https加密解密过程一、从https说起

前后端分离项目的https加密解密过程一、从https说起 最近在看一个开源的项目&#xff0c;叫MetersPhere&#xff0c;在看的过程中&#xff0c;发现并不了解其中加密解密的过程&#xff0c;打算将整个流程梳理一下。 从https一定是安全的么说起 对称加密和非对称加密 一&…

PC_访存过程@内存地址翻译过程@具有快表TLB和cache的多级存储系统

文章目录PC_访存过程内存地址翻译过程具有快表TLB和cache的多级存储系统具有TLB和Cache的多级存储系统三类缺失的可能情况组合小结cache缺失/内存缺页处理机构带TLB虚拟存储器的cpu访存过程PC_访存过程内存地址翻译过程具有快表TLB和cache的多级存储系统 具有TLB和Cache的多级…

POI的使用

POI简介&#xff08;Apache POI&#xff09;&#xff0c;Apache POI是Apache软件基金会的开放源码函式库&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI官网 HSSF &#xff0d; 提供读写Microsoft Excel格式档案的功能。&#xff08;.…

C++ bool类型变量赋值true,输出结果却是false?是因为cin输入的true会被当成字符串,所以bool变量原值不变吗?

首先&#xff0c;大家可能看过其他文章&#xff0c;他们给出的观点是这样的&#xff1a; 在C中bool类型的变量初始值为false&#xff0c;所以如果你不初始化&#xff0c;那么对变量使用cin>>赋值true和false的时候&#xff0c;编译器会把true和false当成是字符串&#x…

【LeetCode每日一题:895.最大频率栈~~~Map+栈】

题目描述 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除并返回堆栈中出现频率最高的元素。 如果…

[附源码]Python计算机毕业设计Django的酒店预订系统设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

深度学习快速入门----Pytorch 系列3

注&#xff1a;参考B站‘小土堆’视频教程 视频链接&#xff1a;【PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】 系列文章&#xff1a; 深度学习快速入门----Pytorch 系列1 深度学习快速入门----Pytorch 系列2 深度学习快速入门--…