分布式 Paxos算法 总结
前言
相关系列
- 《分布式 & 目录》
- 《分布式 & Paxos算法 & 总结》
- 《分布式 & Paxos算法 & 问题》
参考文献
- 《图解超难理解的 Paxos 算法(含伪代码)》
- 《【超详细】分布式一致性协议 - Paxos》
Basic-Paxos @ 基础帕克索斯算法
Paxos算法是目前公认解决分布式一致性问题的最有效算法之一,甚至可以说它是过去几十年里一切分布式一致性算法的源头。我们对Paxos算法进行描述时通常都会带上“容错&共识”两个关键字,那么它们具体代表的是什么呢?
- 容错:是指分布式系统在部分节点宕机的情况下依然能够对外提供服务,即CAP理论中的分区容错性;
- 共识:是指分布式系统的各节点都能就某个操作达成共识,即所有节点都批准执行这个操作。例如在分布式系统中操作A/B都想访问某服务,那么令集群中的所有(超半数/自定义数量)服务都批准执行操作A/B的的过程就是所谓的达成共识。
概念
在正式对流程进行阐述之前,我们需要先对Paxos算法的各类角色&变量进行讲解。Paxos算法具有四类角色…其名称/作用具体如下:
- client @ 客户端:负责向提案者发送操作请求;
- proposer @ 提案者:提案者负责接收&封装客户端的操作请求为proposal @ 提案,并为之生成全局唯一&增长的编号。随后向各接收者广播准备/接收请求,并根据其返回的通过/批准情况决定是否继续发送接收请求/判定其已达成一致;
- acceptor @ 接收者:接收者负责对准备&接收请求中的提案进行判定,以决定是否通过/批准该提案;
- learner @ 学习者:学习者负责获取已达成共识的提案并应用于分布式系统中。
Paxos算法具有三类“持久化”变量…其名称/作用具体如下:
- maxProposal @ 最大提案:接收者在准备请求中通过的最大提案编号;
- acceptedProposal @ 已批准提案:接收者在接收请求中批准的最大提案编号;
- acceptedValue @ 已批准值:接收者在接收请求中批准的最大提案值。
流程
Paxos算法的流程分为“批准/获取”两个部分,这其中“批准”部分负责提案的实际批准,具体又可分为“准备/接收”两个阶段;而“获取”部分则负责提案批准后的对外开放。关于提案批准的完整流程具体如下:
- prepare @ 准备阶段:提案者在接收到客户端的操作请求后,其会将之封装为提案并为之生成全局唯一&增长的编号,关于全局编号的具体生成方式此处不予讨论;
- 提案者会向各接收者广播(即全体发送)准备(当前提案编号)请求;
- 各接收者在收到准备(当前提案编号)请求后会比较“当前提案编号”和“最大提案”的大小,如果“当前提案编号” > “最大提案”则记录“最大提案”为“当前提案编号”并返回通过回应。而如果该接收者曾chosen @ 选中/批准过某项提案,则“已批准提案/已批准值”会随通过回应一同返回;否则便会无视请求/返回拒绝回应。而在未能收到超过半数/自定义数量通过回应的情况下,提案者会为提案生成重新新编号并再次开始流程;
- accept @ 接收阶段:提案者在收到超过半数/自定义数量的通过回应后会向接收者广播接收(当前提案编号&当前提案值)请求。如果在之前的准备请求回应中存在“已批准值”,那么在接收请求中携带的“当前提案值”就必须应用该值;否则就由当前提案者负责自定义。通过该规则可以得知:Paxos算法只支持单个值/操作的共识;
- 各接收者在收到接收(当前提案编号&当前提案值)请求后会再次比较“当前提案编号”与“最大提案”的大小,如果“当前提案编号” >= “最大提案”则记录“已批准提案&已批准值”为“当前提案编号&当前提案值”,并将“当前提案编号”返回,意味着已批准当前提案;否则便将原本的“最大提案”返回;
- 提案者在收到超过半数/自定义数量的“当前提案编号”后便会认为各接收者已对当前提案达成共识,至此该提案便可以被学习者所获取&应用于分布式系统了;否则便意味着当前提案被否决,提案者需要为提案重新生成新编号以再次开始流程。
当提案达成共识后,如何让学习者获取该提案也是值得细究的问题。提案获取通常有以下几种方案:
- 全量发送:接收者一旦批准提案便将该提案广播给所有学习者。这种做法虽然可以让学习者尽快的获得批准提案,但是却需要每个接收者与所有学习者逐一进行通信,通信次数为二者乘积,所以效率较低;
- 主从同步:选定主学习者,提案批准后由接收者通知主学习者,并由主学习者负责通知其它的学习者。这个方案虽然多了一个步骤,但是通信次数大大降低,通信次数为学习者的数量。该方案同时引出另一个问题:主学习者随时可能出现故障。
- 多主从同步:在主从同步的基础上,由单个主学习者扩展成一个主学习者集合。集合中学习者数量越高,可靠性也越好。
模拟
为了更好的熟悉Paxos算法,此处我们举例描述Paxos算法“提案批准”的完整过程,该案例中的Paxos集群共有A/B/C三个节点。注意!这里的任意节点都可同时扮演提案者&接收者。
提案者A/B分别将X赋值成3/5的操作请求封装为提案,并为之生成全局唯一&增长的编号1/2,随后向各接收者广播。在准备阶段它们的交互结果如下:
- 提案者A/B分别进入准备阶段,并向各接收者广播准备(1/2)请求;
- 接收者A/B在收到提案者A的准备(1)请求后发现自身并没有通过/批准任何准备/接收请求,因此直接返回空的通过回应;
- 接收者C由于在收到&通过提案者B的准备(2)请求之后再收到提案者A的准备(1)请求,并且提案者B的提案编号2大于提案者A的提案编号1,因此无视了准备(1)请求/返回了拒绝回应;
- 接收者A/B在收到提案者B的准备(2)请求后由于其提案编号2 > 已通过的提案编号1,因此两者都会返回空的通过回应。
由于提案者A/B的准备请求都收到了超过半数的通过回应,因此提案者A/B都将进入Paxos算法的接收阶段。
- 提案者A向各接收者广播接收(1&3)请求。由于之前的通过回应中没有携带“已批准提案”,因此提案的值可以完全自定义;
- 接收者A/B/C在收到接收(1&3)请求后,由于其之前已经各自通过了准备(2)请求,因此其都会返回提案编号2来表示未曾批准该请求;
- 提案者A在收到回应后发现提案编号2比自己的提案编号1大,因此知晓自身提案未曾被批准,因此重新回到准备阶段进行协商;
- 提案者B向各接收者广播接收(2&5)请求。由于之前的通过回应中没有携带“已批准提案”,因此提案的值可以完全自定义;
- 接收者A/B/C在收到接收(2&5)请求后,由于其都未通过提案编号更大的准备请求,因此其都会返回提案编号2来表示批准了该请求;
- 提案者B在收到回应后发现提案编号2与自身提案编号相同且数量超过半数,因此判定接收者对该提案已达成共识,学习者可正式获取&应用该提案。
在提案批准的流程中还有一种常见的情况是接收者在已批准某项提案的情况下收到提案编号更大的准备请求,这种情况下其就需要在通过回应中返回已批准提案的编号&值…模拟如下:
- 提案者B向各接收者广播接收(3&6)请求;
- 接收者A收到&批准了提案者B的接收(3&6)请求;
- 提案者A向各接收者广播准备(4)请求;
- 接收者B/C收到&通过提案者A的广播准备(4)请求,并因此未批准提案者B的接收(3&6)请求;
- 接收者A收到&通过提案者A的准备(4)请求,并在通过回应中携带了已批准提案编号&值(3&6);
- 提案者B判定接收者未能就提案达成共识,重新进入准备阶段;
- 提案者A因为收到超过半数的通过请求而进入接收阶段,向各接收者广播接收(4&6)请求。这其中6是因为在之前接收者A的通过回应中包含有已批准提案值,因此该值便被作为了提案者A的提案值;
- 接收者A/B/C收到&批准了接收(4&6)请求,提案者A判定各接收者已就该提案达成共识。
Multi-Paxos算法 @ 多帕克索斯算法
原始的Basic-Paxos算法只能达成一个值/操作的共识,而Leslie Lamport则提出可以通过多次执行Basic-Paxos算法来达成一系列值/操作的共识。但由于多次协商会增加通信开销&影响协商活性(即指协商进入死循环),因此Leslie Lamport则进一步提出了名为Multi-Paxos算法的解决方案。
Multi-Paxos算法对于Basic-Paxos算法的主要区别在于其引入了领导提案者的概念。在Multi-Paxos算法中,提案(准备&接收)请求的发送是由领导提案者专属负责的。Multi-Paxos系统会在启动时先通过Basic-Paxos算法从各提案者中选举出唯一的领导提案者用于“串行”发送提案请求,这样就能避免并发提交而解决Basic-Paxos算法的活锁(接收者不断通过编号更大的提案而导致无法批准已通过的旧提案,该问题正常情况下可通过随机延迟的方式进行缓解)问题。此外由于领导提案者会连续发送提案请求,因此除去首个提案请求需要完整执行准备&接收两个阶段(为了应对网络分区而保留,否则也可以不执行)外,后续提案请求的发送都可以只执行接收阶段,从而便能减少RPC来提升共识的达成效率。
Multi-Paxos算法可以支持多领导提案者并存的场景。在实际的Multi-Paxos系统中,由于网络分区情况的存在,其可能出现选举出多个领导提案者的情况。对于这种情况Multi-Paxos算法是提供支持的,因为如此一来其会自动退化成Basic-Paxos算法的多次执行场景。
领导提案者的宕机会导致Multi-Paxos系统不可用。对于一个功能完善的Multi-Paxos系统,其应该具备对领导提案者的故障监测&转移功能。理论上,领导提案者需要不断向系统中的其它节点发送心跳以表示自身存活,而一旦在指定时间内未收到心跳(及一系列综合性盘点),那么Multi-Paxos系统就会判定领导提案者已经宕机。这种情况下其就会选举新的领导提案者来代替工作,即使旧领导提案者只是因为网络分区而无法连接。而在不存在可用提案者的情况下,Multi-Paxos系统将陷入不可用的状态。
相关文章:
分布式 Paxos算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...
[网络] UDP协议16位校验和
16位校验和是udp报头中的一个字段,绝大多数的教材和网课都会忽略这个字段,不去细究,我闲的蛋疼问了问ai,得到了一个答案,故作此文,以证明我爱学习之心惊天地泣鬼神(狗头 ai的回答 仅从作用来说,它会根据整个应用层报文进行运算,生成一个准确的数字,这个数字不能保证唯一性,但根…...
【总结·反思·汇报·思考02】裸辞后,我的一些感想和感悟。
Hello,大家好! 首先,我需要向大家道个歉,对不起!因为最近发生了一些事情,博客文章一直没有更新。(90度鞠躬道歉) 那么,最近到底发生了什么呢?相信大家已经从…...
【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)
HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…...
java 导出word锁定且部分内容解锁可编辑
使用 Apache POI 创建带编辑限制的 Word 文档 在日常工作中,我们可能需要生成一些带有编辑限制的 Word 文档,例如某些段落只能被查看,而其他段落可以自由编辑。本文介绍如何使用 Apache POI 创建这样的文档,并通过代码实现相应的…...
Scala的隐式类
package hfd //隐式类 //任务:给之前的BaseUser添加新的功能,但是不要直接去改代码 //思路:把BaseUser通过隐式转换,改成一个新类型,而这个新类型中有这新的方法 //implicit class一个隐式转换函数类 //作用࿱…...
Jenkins流水线初体验(六)
DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…...
RK3568(二)——字符设备驱动开发
最基础的字符设备驱动开始,重点学习 Linux 下字符设备驱动开发框架。 驱动框架 Linux 应用程序对驱动程序的调用: 在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/de…...
apk反编译修改教程系列-----超简单修改apk中名称 包名 布局文本以及其中的文字选项 手机设置中apk对应修改演示【三十三】
💝💝💝在反编译apk中,每个初学者可能最感兴趣入门的就是修改包名 去更新以及其中选项文本的修改。这样循序渐进来激发学习的兴趣。了解一些apk中常见的修改方法。对于修改手机rom中的 系统类等等的apk原理都是一样的。这篇是应粉丝需要的修改apk基础教程. 通过博文了解…...
Git-分布式版本控制工具
目录 1. 概述 1. 1集中式版本控制工具 1.2分布式版本控制工具 2.Git 2.1 git 工作流程 1. 概述 在开发活动中,我们经常会遇到以下几个场景:备份、代码回滚、协同开发、追溯问题代码编写人和编写时间(追责)等。备份的话是为了…...
计算机进制的介绍
一.进制介绍 对于整数,有四种表示方式: 1)二进制:0,1,满2进1。 在golang中,不能直接使用二进制来表示一个整数,它沿用了c的特点。 参考:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 //赋值…...
【FreeMarker】实现生成Controller根据模板勾选的内容查询
需求:根据模板列表勾选的字段查询列表数据 FreeMarker代码: /*** 分页列表查询** param ${entityName?uncap_first}* param pageNo* param pageSize* param req* return*///AutoLog(value "${tableVo.ftlDescription}-分页列表查询")ApiOp…...
Redis 基础
一. redis 概述 Redis 是一个开源的、高性能的键值对(key-value)存储数据库,通常用作缓存、消息队列或持久化的数据存储。它的全称是 REmote DIctionary Server,最初由 Salvatore Sanfilippo 开发并于2009年发布。 redis 关键特点…...
【Linux】深入理解GCC/G++编译流程及库文件管理
目录 1.背景知识 2.gcc/g如何完成编译 (1) 预处理(进行宏替换) (2) 编译(生成汇编) (3) 汇编(生成机器可识别代码) (4) 链接(生成可执行文件或库文件) (5) 总结 (6) 函数库 …...
分布式 窗口算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & 窗口算法 & 总结》《分布式 & 窗口算法 & 问题》 参考文献 《【算法】令牌桶算法》 固定窗口算法 简介 固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个…...
多分类交叉熵与稀疏分类交叉熵
总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…...
ElasticSearch 简介
一、什么是 ElastcSearch? ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库,ES 中的索引是存储数据的地方,包含了一堆有相似结构的文档数据…...
一些浅显易懂的IP小定义
IP归属地(也叫IP地址,IP属地) 互联网协议地址,每个设备上的唯一的网络身份证明。用于确保网络数据能够精准传送到你的设备上。 基于IP数据云全球IP归属地解析,示例Python代码 curl -X POST https://route.showapi.co…...
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
C# 探险之旅:第三十六节 - 类型class之密封类Sealed Classes
嗨,探险家们!欢迎再次搭乘我们的C#魔法列车,今天我们要去一个神秘又有点“傲娇”的地方——密封类(Sealed Classes)领地。系好安全带,咱们要深入“密封”的奇妙世界啦! 什么是密封类࿱…...
Error in v-on handler: “TypeError: handler.apply is not a function“
报错截图 原因 原来是我在.vue单文件中 data里面的属性和methods里面的方法重名了 解决 方面重新命名了一下和data里面的属性值不一样就可以了。...
《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)
《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...
《B+树的原理与实践:探索高效数据存储与检索》
一、B树的基本原理 B树的定义 B树是一种自平衡的树结构,它是由B树衍生而来的。B树的特点是所有的数据记录都存储在叶子节点上,而叶子节点本身按照关键字的大小顺序相连,形成一个有序链表。 B树的结构 B树的结构包括以下几个部分࿱…...
Android无障碍服务监听实现自动点击按钮
原理: 通过监听窗口改变事件,监听目标应用,通过视图ID(或文本、或描述、或其他如坐标之类的)找到目标视图,使用无障碍动作点击方法点击它 无障碍服务实现: 1、写一个自己的无障碍服务继承Acc…...
Jenkins 启动 程序 退出后 被杀死问题
参考 Spawning Processes From Build (jenkins.io) 解决jenkins脚本启动项目后进程被杀死_jenkins杀进程-CSDN博客...
前端样式练手:阴阳图+时钟的组合
开篇 今天的小作品是突然脑子灵光一闪写出来的,代码不多,就不过多赘述了。 代码实现 <template><div class"clock-container"><!-- 八卦图 --><!-- <div class"bagua"><divv-for"(trigram, ind…...
开源分布式系统追踪-03-CNCF jaeger-02-快速开始
分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么? cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …...
医学图像分割数据集脑肿瘤分割数据集labelme格式715张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):715 标注数量(json文件个数):715 标注类别数:1 标注类别名称:["tumor"] 每个类别标注的框数…...
2024.12.11-13——攻防世界unserialize3
知识点:PHP中的序列化和反序列化 一、序列化和反序列化 1.序列化(serialize) 将对象的状态信息转换为可以存储或传输的形式的过程,简单来说,就是将状态信息保存为字符串。为了解决不同机器之间传输复杂数据类型的一种机制 2.反序列化(uns…...
Docker的镜像
目录 1. 镜像是什么??2. 镜像命令详解2.1 镜像命令清单2.2 docker rmi命令2.3 docker save命令2.4 docker load命令2.5 docker history命令2.6 docker import命令2.7 docker image prune命令2.8 docker build命令 3. 镜像的操作4. 离线迁移镜像5. 镜像存…...
深度学习训练参数之学习率介绍
学习率 1. 什么是学习率 学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解移动的步长,通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中,模型通过样本数据给出预测值࿰…...
Vue技术中参数传递:Props与事件的实践指南
在Vue.js中,组件间的参数传递是构建动态和交互式应用的核心。本文将深入探讨如何通过Props和事件($emit)在Vue组件间进行参数传递,并提供代码示例。 Props传递数据 Props是Vue中组件间传递数据的一种方式,它允许父组…...
刷题日志【4】
目录 1、猜数字大小 1、猜数字大小 题意有点抽象,我大概讲一下,就是在1——n里面会有一个目标数,我们通过猜数字的方式逼近这个数字,直到解出这个数,之前我们是用二分法求最快达到求解的问题,这道题多了每…...
IDEA对windows下的docker里面的Weblogic 进行远程调试(漏洞环境搭建)部署Vulhub漏洞环境
参考书籍:《Java代码审计》入门篇 人民邮电出版社 话不多说,上教程!!! 环境很重要!!!! 其他的环境不保证对 本机环境:java jdk 8 下载 选择 下载就行 然后 …...
【深度学习】Java DL4J基于多层感知机(MLP)构建公共交通优化模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...
医学分割数据集肾结石分割数据集labelme格式359张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):359 标注数量(json文件个数):359 标注类别数:1 标注类别名称:["kidney stone"] 每个类别标注的框数&…...
Ansible自动化运维(五) 运维实战
Ansible自动化运维这部分我将会分为五个部分来为大家讲解 (一)介绍、无密钥登录、安装部署、设置主机清单 (二)Ansible 中的 ad-hoc 模式 模块详解(15)个 (三)Playbook 模式详解 …...
ReactPress最佳实践—搭建导航网站实战
Github项目地址:https://github.com/fecommunity/easy-blog 欢迎Star。 近期,阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress,ReactPress一个基于 Next.js 的博客和 CMS 系统,可查看 demo站点。(…...
Dual-Write Problem 双写问题(微服务)
原文链接https://www.confluent.io/blog/dual-write-problem/ 双写问题发生于当两个外部系统必须以原子的方式更新时。 问题 说有人到银行存了一笔钱,触发 DepositFunds 命令,DepositFunds 命令被发送到Account microservice。 Account microservice需…...
文件转曲,限制PDF文件编辑的最佳方案!
随着数字化进程的推进,PDF文件凭借其多样化的功能和优越的兼容性已经被广泛使用,成为了现代文档交流和存储的重要工具,满足了不同用户和行业的需求。 虽然PDF格式文件的功能很多,常见的比如阅读、编辑、加密、转换、还可用于印刷…...
call,apply,bind 深入
显示绑定 我们通常会碰见丢失绑定的情况,例如系统函数setTimeOut function foo() { console.log( this.a ); } var obj { a: 2, foo: foo }; var a "oops, global"; // a是全局对象的属性 setTimeout( obj.foo, 100 ); // "oops, globalca…...
监测预警智能分析中心建设项目方案
随着科技的不断进步,地理信息与遥感技术在国家治理、环境保护、灾害预警等领域发挥着越来越重要的作用。监测预警智能分析中心的建设,旨在通过集成先进的遥感技术、地理信息系统(GIS)、大数据分析和人工智能(AI&#x…...
redis stream轻量级消息队列
redis 5.0 之后新推出了stream数据结构,可以实现一个轻量级的消息队列,下面通过自定义注解和springboot使用一下redis stream 1.自定义注解 Target(ElementType.METHOD) Retention(value RetentionPolicy.RUNTIME) public interface MsgStreamListener …...
ORACLE SQL思路: 多行数据有相同字段就合并成一条数据 分页展示
数据 分数表: 学号,科目名(A,B,C),分数 需求 分页列表展示, 如果一个学号的科目有相同的分数, 合并成一条数据,用 拼接 科目名 ORACLE SQL 实现 SELECT Z.*, SUBSTR(DECODE(f…...
UE5制作倒计时功能
设置画布和文本 文本绑定 格式化时间 转到事件图表,计算时间,时间结束后面的事件可以按自己需求写 进入关卡蓝图,添加倒计时UI...
若依-帝可得app后端
视频地址 https://www.bilibili.com/video/BV1pf421B71v?t=510.1 APP后端技术栈 架构解析 验证码功能 开发环境使用改的是固定的验证码 12345正式环境使用的是 阿里云的短信方案@Override public void sendSms(String mobile) {// String code = RandomUtil.randomNumbers(5);…...
Vulnstack红日安全内网域渗透靶场2实战攻略
一:环境搭建 新增的网卡VMnet2,ip调成10段。 PC配置如下: DC在该环境中充当是域控。DC配置如下 : WEB配置:需要两块网卡,相当于网关服务器。 作者把外网网段都写成了192.168.111.1/24,我们可以…...
苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?
苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装,苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件,它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp,用户可以在启动电脑时选择是要进入macOS还是Wi…...
benchANT (Time Series: Devops) 榜单数据解读
近日,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录 &a…...