【分布式】VMware FT概要
讨论了1primary + 1backup的情况,比较好理解, 6.824中以该论文为例,介绍了分布式系统中复制的概念,复制的方式。以下简要讲述一些关键点,来源于MIT6.824课程,翻译版本 https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/lecture-04-vmware-ft
文章目录
- 一、两种复制方法
- 二、工作原理
- 三、非确定性事件
- 四、Log格式猜测
- 五、防止脑裂的第三方机构:test-and-set服务
一、两种复制方法
- 状态转移
- 复制状态机
区别在于,状态转移转移的是系统内部信息,而复制状态机则是传输外部事件。一条执行语句可能会改变很多(甚至全部)内部状态(比如涉及到数据库中schema的改变),如果每次都转移内部状态,那涉及到的太多了。而传输执行指令的操作粒度则比较小。
人们倾向于使用复制状态机的原因是,通常来说,外部操作或者事件比服务的状态要小。如果是一个数据库的话,它的状态可能是整个数据库,可能到达GB这个级别,而操作只是一些客户端发起的请求,例如读key27的数据。所以操作通常来说比较小,而状态通常比较大。所以复制状态机通常来说更吸引人一些。复制状态机的缺点是,它会更复杂一些,并且对于计算机的运行做了更多的假设。而状态转移就比较简单粗暴,我就是将我整个状态发送给你,你不需要再考虑别的东西。
二、工作原理
VMware FT的FT = Fault tolerance。 想要实现错误容忍,那么就需要replication(防止一台机器挂掉了导致的状态丢失)
VMware FT需要两个服务器(在两台物理机上有两台虚拟机):primary和backup,VMM为每个虚拟机分配一段内存,它们的内存镜像需要完全一致。
客户端向primary发送指令, 然后primary会向backup也发送同样指令。primary和backup都会执行指令,生成response,但是只有primary会回复客户端,而backup会把response丢弃。VMware FT论文中将Primary到Backup之间同步的数据流的通道称之为Log Channel 。
正常来说是primary接收指令,然后通过log channel 将其传给backup。 如果backup在一个规定时间内无法收到primary的指令,可以认为是primary挂了/有问题了,此时Backup不会再等待来自于Primary的Log Channel的事件, backup此时不受primary事件驱动,同时告知客户端,后续的请求发往backup而不是primary, backup生成的response此时也不会直接丢弃,它成为了新的primary。
三、非确定性事件
可以理解为同一事件在不同机器上结果不同的事件。也是复制状态机方式需要考虑的特殊情况。
-
客户端输入
在分布式系统中,这里的系统输入指的是网络数据包。一个网络数据包包括两个部分,一个是数据包中的数据,另一个是提示数据包到达的中断。
中断在哪个位置触发,对于primary和backup来说需要一致,否则状态就会偏差。 -
“怪异”指令:这些指令在不同机器上的执行结果不同
比如随机数生成, 获取当前时间的指令,获得计算机唯一id指令 -
多CPU并发
当服务运行在多CPU上时,指令在不同的CPU上会交织在一起运行,因此指令运行的顺序不可预期
假设两个核同时向同一份数据请求锁: 在primary上,CPU core1得到锁; 在backup上,由于细微的时间差别,CPU core2获得了锁,那么执行结果可能很不一样。
四、Log格式猜测
Robert教授猜测log (log channel 中传递的信息)中有三样东西:
- 事件编号
- 日志条目类型(普通的网络数据 or 怪异指令)
- 数据(网络数据包内容,也就是普通指令的内容 or 怪异指令执行结果)
五、防止脑裂的第三方机构:test-and-set服务
网络分区导致脑裂问题的解决:需要有一个第三方的权威机构,决定primary还是backup允许上线,这就是test-and-set服务。
这个就像锁一样,该服务在内存中保留一些标志位,primary和backup需要向这个服务发送test-and-set请求。
当第一个请求送达时,Test-and-Set服务会说,这个标志位之前是0,现在是1。第二个请求送达时,Test-and-Set服务会说,标志位已经是1了,你不允许成为Primary。对于这个Test-and-Set服务,我们可以认为运行在单台服务器。当网络出现故障,并且两个副本都认为对方已经挂了时,Test-and-Set服务就是一个仲裁官,决定了两个副本中哪一个应该上线。
节点成为primary必须向这个第三方机构进行请求,得到许可(得到0)。
也就是test and set当前如果是0,那么该节点可以成为primary,成为primary后,将标志位设置为1; 如果当前标志位1,就不能再成为primary了。 本质上来说,这是一种简化了的锁服务,哪台机器拿到“锁”,哪台机器才能成为primary。
相关文章:
【分布式】VMware FT概要
讨论了1primary 1backup的情况,比较好理解, 6.824中以该论文为例,介绍了分布式系统中复制的概念,复制的方式。以下简要讲述一些关键点,来源于MIT6.824课程,翻译版本 https://mit-public-courses-cn-transl…...

江西南昌电气机械三维测量仪机械零件3d扫描-CASAIM中科广电
精密机械零部件是指机械设备中起到特定功能的零件,其制造精度要求非常高。这些零部件通常由金属、塑料或陶瓷等材料制成,常见的精密机械零部件包括齿轮、轴承、螺丝、活塞、阀门等。精密机械零部件的制造需要高精度的加工设备和工艺,以确保其…...
MySQL三大日志(binlog、redo log和undo log)详解
1.redo log redo log是InnoDB存储引擎层的日志,又称重做日志文件。 用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来 redo log包括两部分:一个是内存中的日志缓冲(redo log buffer),另…...

七大排序算法详解
1.概念 1.排序的稳定性 常见的稳定的排序有三种:直接插入排序,冒泡排序,归并排序 对于一组数据元素排列,使用某种排序算法对它进行排序,若相同数据之间的前后位置排序后和未排序之前是相同的,我们就成这种…...

[docker][WARNING]: Empty continuation line found in:
报警内容: 下面展示一些 内联代码片。 //执行 sudo docker build ubuntu:v1.00 . [WARNING]: Empty continuation line found in:出现上述错误原因为18行多了一个 " \" 符号,去除即可...

探工业互联网的下一站!腾讯云助力智造升级
引言 数字化浪潮正深刻影响着传统工业形态。作为第四次工业革命的重要基石,工业互联网凭借其独特的价值快速崛起,引领和推动着产业变革方向。面对数字化时代给产业带来的机遇与挑战,如何推动工业互联网的规模化落地,加速数字经济…...
SpringBoot上传文件的实现与优化
一、什么是文件上传? 文件上传是指客户端将本地的文件通过HTTP协议发送到服务器端的过程。文件上传是Web开发中常见的功能之一,例如用户可以上传头像、照片、视频、文档等各种类型的文件。文件上传涉及到客户端和服务器端的交互,需要考虑文件…...

学习python可以做什么?有前景么
Python被热门领域广泛应用 学习者就业优势明显! 说到Python的优势,就不得不提这句玩笑话:Python除了不会生孩子,其他的都会。 Web开发、网络爬虫、数据分析、人工智能、自动化、云计算、网络编程、游戏开发等领域,统…...

还不知道怎么提示LLM?ChatGPT提示入门
文章目录 简介:什么是人工智能?什么是提示过程?为什么会出现这样的差异? 为什么需要提示过程?1) 文章摘要2) 数学问题求解 如何进行提示过程?角色提示:多范例提示:无范例提示单范例提…...

反射机制-体会反射的动态性案例(尚硅谷Java学习笔记)
// 举例01 public class Reflect{ // 静态性 public Person getInstance(){return new Person(); }// 动态性 public T<T> getInstance(String className) throws Exception{Calss clzz Class.forName(className);Constructor con class.getDeclaredConstructor();con…...

uniapp离线打包apk - Android Studio
uniapp 离线打包 基于uni-app的andiord 离线打包 开发工具及所需要的jar包1.将下载的App离线SDK解压打开,找到HBuilder-Integrate-AS ,在Android Studio打开2.打开HBuilder X,发行->原生app本地打包->生成本地打包app资源3.在“HBuil…...

cuda面试准备(一),架构调试
1 cuda架构 硬件方面 SP (streaming Process) ,SM (streaming multiprocessor) 是硬件(GPUhardware) 概念。而thread,block,grid,warp是软件上的(CUDA) 概念 SP:最基本的处理单元,streaming processor,也称为CUDA core,最后具体的指令和任务都是在SP上处理的。GPU进行并行…...
docker containers logs清理
容器的磁盘占用 每次创建一个容器时,都会有一些文件和目录被创建,例如: /var/lib/docker/containers/ID目录,如果容器使用了默认的日志模式,他的所有日志都会以JSON形式保存到此目录下。 /var/lib/docker/overlay2 目…...

Ubuntu安装RabbitMQ
一、安装 更新系统软件包列表: sudo apt update安装RabbitMQ的依赖组件和GPG密钥: sudo apt install -y curl gnupg curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmo…...
Vue3获取当前环境信息
获取.env.development和.env.production内的信息及环境信息 在业务逻辑文件中可以通过 import.meta.env的方式获取,例如: const { MODE, VITE_APP_BASE_API} import.meta.env在vite.config.js中获取: import { defineConfig, loadEnv } f…...
Linux 系统 diff 文件比较命令详解
diff 命令用于比较两个文件或目录之间的差异。它会逐行比较文件的内容,并且在不同的行上显示不同之处。下面是 diff 命令的使用方法和选项: 基本语法: diff [选项] 文件1 文件2常见选项: -c 或 --context:显示上下文…...

【负载均衡】Nacos简单入门
Nacos简单入门 快速安装 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: 下载完压缩包之后,放在任意目录下面进行解压: GitHub主页:https://github.com/alibaba/nacos G…...

实验一 ubuntu 网络环境配置
ubuntu 网络环境配置 【实验目的】 掌握 ubuntu 下网络配置的基本方法,能够通过有线网络连通 ubuntu 和开发板 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的…...
ubuntu can应用开发环境搭建指南
sudo apt-get update sudo apt-get install can-utils libsocketcan-dev can数据发送这个采用来自网上的一段代码进行测试: can_send.c代码内容如下: /* 1. 报文发送程序 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…...

全流程R语言Meta分析核心技术高阶应用
查看原文>>>全流程R语言Meta分析核心技术高阶应用 目录 专题一、Meta分析的选题与检索 专题二、Meta分析与R语言数据清洗及统计方法 专题三、R语言Meta分析与作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析 专题六、R语言Meta分析的不确定性 专题…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...