DAOS系统架构-RDB

1. 概述

基于Raft共识算法和强大的领导地位策略,pool service和container service可以通过复制其内部的元数据来实现高可用。通过这种方法实现具有副本能力的服务可以容忍少数副本中的任何一个出现故障。通过将每个服务的副本分布在容灾域中,pool service和container service可以容忍合理数量的targets出现故障。

 

2. 架构

一个复制服务(replicated service)是基于Raft复制日志( replicated log)构建的。该服务将RPCs转换成状态查询和确定性状态更新操作。在被应用于任何一个服务副本之前,所有状态的更新操作首先提交到副本日志中。由于Raft保证了日志副本之间的一致性,因此服务副本最终以相同的顺序应用相同的更新状态集,并经历完全相同的状态历史。

在一个复制服务的所有副本当中,只有当前领导者可以处理服务RPCs。一个服务的领导者就是当前Raft的领导者(即此刻任期数最高的)非领导者拒绝所有的服务RPCs,并尽其所知的将客户端请求重定向当前领导。客户端会缓存副本服务的地址以及当前的领导者。有时,客户端可能不会获得任何有意义的重定向提示,并且可以通过与随机的一个副本通信来找到当前领导者。
service_replication_modules
上图展示了构成一个服务副本的相关模块。service模块通过将RPCs转换成状态查询和确定性状态更新操作来处理RPCs。Raft模块通过与其他副本上的Raft模块通信,按照Raft协议来实现复制的日志。Raft模块为service模块执行状态查询和状态更新提供了方法。Storage模块(本例中是持久化内存和文件系统)用于存储service以及Raft状态。它使用VOS以原子方式更新存储在持久化内存中的状态。

 

3. RPC处理

当RPC请求到达领导者服务时,service模块的服务线程会接收该请求,并通过执行专门为此类型请求设计的句柄函数(handler function)来处理该请求。就副本服务而言,一个句柄包括:状态查询(比如读取存储池属性)、状态更新(比如写入一个新版本的pool map)、以及到其他服务的RPCs(比如发送请求到其他target服务)。一些句柄只涉及到查询,一些句柄会涉及到更新和查询,另外一些会涉及以上三种。很少见一种情况是,如果有的话,句柄只涉及到更新而不执行查询。

句柄必须将所有的更新操作组合到单个日志条目中,然后提交日志条目,并在将更新操作应用于服务状态之前要等待该日志条目成为可适应的。为每一个更新操作的RPC使用单个日志条目很容易使得每个更新操作的RPC在领导者服务出现崩溃或者领导者地位改变时具有原子性。如果在未来引入的RPCS不满足这些要求,则需要额外事务回复机制。领导者服务的状态始终表示该领导者到目前位置处理的所有已完成的更新操作的RPC的效果。

另一方面,查询操作可以直接从服务的状态读取,而无需通过复制的日志。然而,为了确保一个请求可以看到所有已经处理过的RPC的效果,该句柄必须询问Raft模块领导地位是否有变动。如果没有,那么到目前位置,针对该请求的所有查询都不是过时的。如果领导者失去了其领导地位,那么句柄会终止请求,并将客户端请求重定向到新的领导者。

针对到其他服务的RPCs这种情况,如果这些请求更新了目标服务的状态,则必须是等幂的。当领导地位发生变化时,如果客户端重新发送了服务端请求,那么新的领导者可能也要重新向其他服务发送RPCs。

句柄需要处理合理的并发执行操作。通常,在领导者服务上使用本地锁可以使RPC的执行线性化。一旦领导者地位发生变化,旧的领导者不再执行任何更新操作,这将导致所有的RPCs执行被终止。因此,新领导者上的RPCs与留在旧领导者上的RPCs的并不冲突。因此,不需要锁作为服务状态的一部分进行复制。

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

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

相关文章

深入GPU硬件架构及运行机制

转自深入GPU硬件架构及运行机制 - 0向往0 - 博客园,基本上是其理解。 一、GPU概述 1.1 GPU是什么? GPU全称是Graphics Processing Unit,图形处理单元。它的功能最初与名字一致,是专门用于绘制图像和处理图元数据的特定芯片&…

数值计算库:Eigen与Boost.Multiprecision全方位解析

在科学计算、工程模拟、机器学习等领域,高效的数值计算能力是构建高性能应用的基石。C作为性能优先的编程语言,拥有众多优秀的数值计算库,其中Eigen和Boost.Multiprecision是两个极具代表性的工具。本文将深入探讨这两个库的核心特性、使用场…

第十八节:第三部分:java高级:反射-获取构造器对象并使用

Class提供的获取类构造器的方法以及获取类构造器的作用代码:掌握获取类的构造器,并对其进行操作 Cat类 package com.itheima.day9_reflect;public class Cat {private String name;private int age;private Cat(String name, int age) {this.name name;…

集中打印和转换Office 批量打印精灵:Word/Excel/PDF 全兼容,效率翻倍

各位办公小能手们!你们平时办公的时候,是不是经常要打印一堆文件,烦得要命?别慌,今天我给大家介绍一款超厉害的神器——Office批量打印精灵! 软件下载地址安装包 这玩意儿啊,是专门为高效办公设…

docker的搭建

一、安装docker使用以下命令进行安装dockerapt-get install docker.io docker-compose使用以下命令进行查看docker是否开启systemctl status docker由此可见,docker没有打开,进行使用命令打开。systemctl start docker再次查看是否开启。肉眼可见&#x…

数据库管理-第349期 Oracle DB 23.9新特性一览(20250717)

数据库管理349期 2025-07-17数据库管理-第349期 Oracle DB 23.9新特性一览(20250717)1 JavaScript过程和函数的编译时语法检查2 不再需要JAVASCRIPT上的EXECUTE权限3 GROUP BY ALL4 使用SQL创建并测试UUID5 IVF索引在线重组6 JSON到二元性迁移器&#xf…

将CSDN文章导出为PDF

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处前言在日常学习和技术积累过程中,我们经常会在 CSDN 等技术博客平台上阅读高质量的技术文章。然而,网页阅读…

macOS - Chrome 关闭自动更新

进入 Google 相关资源文件夹 删除 GoogleSoftwareUpdate 文件夹 open ~/Library/Google 部分教程推荐,在 chrome://flags/ 页面设置,但最近没看到 自动更新相关开关。2025-07-13(日)

Python 模块化编程全解析:模块、包与第三方库管理指南

模块与包 模块化编程是什么?用生活例子秒懂 想象你在搭乐高积木: 每个小积木块都有特定功能(比如轮子、窗户、墙壁)—— 这就像模块(一个.py 文件,封装了函数或类)。把相关的积木块装进一个盒…

小白学Python,网络爬虫篇(2)——selenium库

前言 selenium 库是一种用于 Web 应用程序测试的工具,它可以驱动浏览器执行特定操作,自动按照脚本代码做出单击、输入、打开、验证等操作,支持的浏览器包括 IE、Firefox、Safari、Chrome、Opera 等。 与 requests 库不同的是,se…

Java安全:SpringBoot项目中Fastjson组件的使用与安全实践

前言 Fastjson是阿里巴巴开源的一个高性能Java JSON库,广泛用于Java对象的序列化和反序列化操作。在SpringBoot项目中,Fastjson常被用作JSON处理工具。然而,Fastjson因其高性能而广受欢迎的同时,也因多次爆出的安全漏洞而备受关注…

x的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用示例 1:输入:x 4 输出:2示例 2:输入&#xff1…

oracle服务器定时备份Windows Server

-- 创建目录对象(若未创建),先建立对应文件夹才能用目录对象CREATE OR REPLACE DIRECTORY dp_dirbackup AS D:\BACKUP; --配置路径 GRANT READ, WRITE ON DIRECTORY dp_dirbackup TO 用户名; --配置用户权限-- 备份脚本(保存为每…

HTML data-* 属性 自定义属性

data-* 属性用于存储私有页面后应用的自定义数据。 data-* 属性可以在所有的 HTML 元素中嵌入数据。 自定义的数据可以让页面拥有更好的交互体验(不需要使用 Ajax 或去服务端查询数据)。 data-* 属性由以下两部分组成:1. 属性名不要包含大写字…

Oracle 大页配置use_large_pages 参数解析

一、前因 再给一位客户的Exdata 2 节点 RAC 19C版本创建数据库并配置好优化参数后,客户一天发来一份健康检查报告,打开一看 use_large_pages 配置异常。 回想安装部署时特意确认了在db启动大页已经生效,为何会有此异常告警项? 二…

迅为八核高算力RK3576开发板摄像头实时推理测试 ppyoloe目标检测

RK3576处理器迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。NPU高达6TOPS算力支持INT4/INT8/INT…

纯CSS轮播

纯CSS轮播 在现代网页设计中,轮播组件是一种常见的用户界面元素,广泛应用于展示图片、产品信息等内容。本文将详细介绍如何使用纯 HTML/CSS 和少量 JavaScript 实现一个功能完备的 CSS Scroll Snap 轮播组件。该组件不仅支持原生左右拖拽滚动&#xff0c…

从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案

目录 前言 一、环境搭建 1.环境准备 2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx 3.为两台RS配置虚拟ip(nginx服务器) 1.配置虚拟网络子接口 2.ARP响应级别与通告行为的概念 3.配置ARP 二、Ke…

100201组件拆分_编辑器-react-仿低代码平台项目

文章目录1 设计UI,组件拆分2 实现关于1 设计UI,组件拆分 编辑器整体如上图所示,重点关注: flex弹性布局 上 左中右 下 左中右 画布居中画布Y轴滚动 2 实现 src/pages/question/Edit/index.tsx代码如下: import { …

CS课程项目设计2:交互友好的五子棋游戏

上次给大家分享了井字棋游戏的设计流程 CS课程项目设计1:交互友好的井字棋游戏-CSDN博客https://blog.csdn.net/weixin_36431280/article/details/149309500?spm1001.2014.3001.5501今天打算再分享进阶版井字棋游戏的版本设计——五子棋游戏。五子棋游戏操作方式与…