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

分布式问题

1. 分布式系统CAP原理

CAP原理:指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。简单说就是所有节点在同一时刻的数据完全一致,这就意味着节点越多数据同步的时候消耗时间越多。
可用性(A):负载过大后,集群整体是否还能响应用户正常的读写请求。简单说就是项目系统对于用户请求的响应时间一定在能接受的范围内,需要照顾用户体验。
分区容忍性(P):分区容忍性,就是高可用性,一个节点崩了不会影响其他节点。简单说就是服务器节点崩了几个没事,只要有正常的服务器就可以,意思是节点越多就越好了。

2. 一致性

◦ 强一致性:数据库一致性,牺牲了性能
◦ 弱一致性:数据库和缓存,延迟双删、重试
◦ 单调读一致性:缓存一致性,ID或者IP哈希
◦ 最终一致性:边缘业务,消息队列

业内常用解决方案:
XA方案
2PC协议:两阶段提交协议,P是指准备阶段,C是指提交阶段
• 准备阶段:询问是否可以开始,写Undo、Redo日志,收到响应
• 提交阶段:执行Redo日志进行Commit,执行Undo日志进行Rollback
3PC协议:将提交阶段分为CanCommit、PreCommit、DoCommit三个阶段
CanCommit:发送canCommit请求,并开始等待
PreCommit:收到全部Yes,写Undo、Redo日志。超时或者No,则中断
DoCommit:执行Redo日志进行Commit,执行Undo日志进行Rollback
区别是第二步,参与者自身增加了超时,如果失败可以及时释放资源

3.Paxos算法

4.ZAB算法

Raft 是一种为了管理复制日志的一致性算法
Raft使用心跳机制来触发选举。当server启动时,初始状态都是follower。每一个server都有一个定时器,超时时间为election timeout(一般为150-300ms),如果某server没有超时的情况下收到来自领导者或者候选者的任何消息,定时器重启,如果超时,它就开始一次选举。
Leader异常:异常期间Follower会超时选举,完成后Leader比较彼此步长
Follower异常:恢复后直接同步至Leader当前状态
多个Candidate:选举时失败,失败后超时继续选举

5.分布式事务

XA方案
两阶段提交 | 三阶段提交
• 准备阶段的资源锁定,存在性能问题,严重时会造成死锁问题
• 提交事务请求后,出现网络异常,部分数据收到并执行,会造成一致性问
TCC方案
Try Confirm Cancel / 短事务
• Try 阶段:这个阶段说的是对各个服务的资源做检测以及对资源进行锁定或者预留
• Confirm 阶段:这个阶段说的是在各个服务中执行实际的操作
• Cancel 阶段:如果任何一个服务的业务方法执行出错,那么就需要进行补偿/回滚
MQ最终一致性
在这里插入图片描述
比如阿里的 RocketMQ 就支持消息事务(核心:双端确认,重试幂等)

  1. A(订单) 系统先发送一个 prepared 消息到 mq,prepared 消息发送失败则取消操作不执行了
  2. 发送成功后,那么执行本地事务,执行成功和和失败发送确认和回滚消息到mq
  3. 如果发送了确认消息,那么此时 B(仓储) 系统会接收到确认消息,然后执行本地的事务
  4. mq 会自动定时轮询所有 prepared 消息回调的接口,确认事务执行状态
  5. B 的事务失败后自动不断重试直到成功,达到一定次数后发送报警由人工来手工回滚和补偿

最大努力通知方案(订单 -> 积分)

  1. 系统 A 本地事务执行完之后,发送个消息到 MQ;
  2. 这里会有个专门消费 MQ 的最大努力通知服务,接着调用系统 B 的接口;
  3. 要是系统 B 执行失败了,就定时尝试重新调用系统 B,反复 N 次,最后还是不行就放弃

相关文章:

分布式问题

1. 分布式系统CAP原理 CAP原理:指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。 一致性(C…...

教雅川学缠论06-中枢

本系列文章之前讲的内容都只有上升和下降两类趋势,并没有提及盘整,在缠论中,中枢这个新词汇用来定义盘整,中枢: 1.至少由5条线段(或笔)组成 2.中枢是有方向的,中枢左右两侧外面的线&…...

如何调教让chatgpt读取自己的数据文件(保姆级图文教程)

提示:如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据?二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件,我们应该对它进行调教。 一、如何投喂自己的数据? 让chatgpt读…...

React Native Camera的使用

介绍 React Native Camera是一个用于在React Native应用中实现相机功能的库。它允许你访问设备的摄像头,并捕获照片和视频。 使用 安装 npm install react-native-camera --save 安装完成后,你需要链接React Native Camera库到你的项目中。可以使用以…...

【Matlab】Elman神经网络遗传算法(Elman-GA)函数极值寻优——非线性函数求极值

往期博客👉 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 本篇博客将主要介绍Elman神…...

@ControllerAdvice注解使用及原理探究 | 京东物流技术团队

最近在新项目的开发过程中,遇到了个问题,需要将一些异常的业务流程返回给前端,需要提供给前端不同的响应码,前端再在次基础上做提示语言的国际化适配。这些异常流程涉及业务层和控制层的各个地方,如果每个地方都写一些…...

Error: Design has unresolved cell reference

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 所有的unresolved cell reference问题都是cell信息没读到引起的,在dc/pt里就是db没读到,在ICC2里就是ndm没读。 ICC2中午饭这个问题可以report_design_…...

uni-app 封装api请求

前端封装api请求 前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。 下面是一种常见的前端封装 API 请求的方式: 创建一个 API 封装模块或类:可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来…...

SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…...

【MySQL】sql字段约束

在MySQL中,我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段,MySQL会直接禁止插入。 数据类型也是一种约束,但数据类型这个约束太过单一;比如我需要存储的是一个序号,那就不可…...

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA,雕琢时代新贵车型,打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…...

Java、Android 加解密、编码、压缩、解压缩、Hash

对称加密: 算法:AES (128位)/ DES (56位)....等 加密原理: 原数据--->加密算法(密钥)------>密文 解密原理: 密文---->解密算法(密钥)------>原数据 非对称加密 算法&#…...

11_Pulsar Adaptors适配器、kafka适配器、Spark适配器

2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 2.3.2.Spark适配器 2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 Pulsar 为使用 Apache Kafka Java 客户端 API 编写的应用程序提供了一个简单的解决方案。 在生产者中, 如果想不改变原有kafka的代码架构, 就切换到Pulsar的…...

jupyter文档转换成markdown

背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的,这个真的是万能的,可以插入markdown格式的内容,也可写代码,关键是像ipython一样,可以分步执行。 我可以这样自由的写我的博客内容&#x…...

日志框架及其使用方法

log4j和logBack,同一个人写的,logBack为log4j的升级版,SpringBoot中默认集成logBack 作用:记录软件发布后的一些bug,以及数据是怎样被操作的 传统开发弊端: 1.日志直接输出在控制台,关闭控制台后,日志消…...

ZIG:理解未来编程语言的视角

文章目录 摘要:引言:性能简洁性和模块化避免常见错误和陷阱总结:参考资料📑: 摘要: 本文介绍了新兴编程语言ZIG的目标和特点,包括高性能、简洁性和模块化,并分析了这些特点是如何通过语言设计来…...

让三驾马车奔腾:华为如何推动空间智能化发展?

上个月,国务院常务会议审议通过了《关于促进家居消费的若干措施》,其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说,以整屋为单位的空间智能品类&#x…...

2022年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 已知a“161”,b“16”,c“8”,执行语句da>b and a>c,变量d的值为是? A:0 B:1 C:True D&am…...

WIN大恒工业相机SDK开发

大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置(VS2019)2、C 环境配置(VS2019)3、python 环境配置(Pycharm) 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事…...

qt qml中各种Layout之间是如何对齐的?

问题描述: qt qml中下一个RowLayout如何对齐顶部到上方的ColumnLayout的底部略低一些间隔的位置? 我们怎么使用achors去锚定位置? 这些都是可以用anchors锚定属性,以及margin来设置的。 解决办法: 要实现将下一个R…...

Immutable.js 进行js的复制

介绍 在提供不可变(Immutable)数据结构的支持。不可变数据是指一旦创建后就不能被修改的数据,每次对数据进行更新都会返回一个新的数据对象,而原始数据保持不变。 使用 日常中我们使用的拷贝 (1) var arr { } ; arr2 arr ; …...

java动态生成excel并且需要合并单元格

java动态生成excel并且需要合并单元格 先上图看一下预期效果 集成poi <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.0.0</version> </dependency> <dependency><…...

JMeter启动时常见的错误

很多小伙伴在学工具这一块时&#xff0c;安装也是很吃力的一个问题&#xff0c;之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候&#xff0c;一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装&#xff0c;Windows 平台&#xff0c;双击 jmeter/bin …...

python pandas 排序

Series的排序&#xff1a; Series.sort_values(ascendingTrue, inplaceFalse) 参数说明&#xff1a; ascending&#xff1a;默认为True升序排序&#xff0c;为False降序排序inplace&#xff1a;是否修改原始Series DataFrame的排序&#xff1a; DataFrame.sort_values(by, as…...

前后端分离式项目架构流程复盘之宿舍管理系统

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;【&#x1f387;前端】先创建Vue-cli项目&#xff08;版本2.6.10&#xff0c;仅包含babel&#xff09;&#xff0c;请选择此项目并创建 【整理简化项目模板】【&#x1f380;创建路由】…...

Linux nohup 命令详解

nohup是Linux/Unix系统中非常有用的命令之一。它允许您在后台运行命令或脚本&#xff0c;并且在退出终端会话后仍然保持运行。这对于长时间运行的任务或进程非常有用&#xff0c;特别是当您需要离开终端但希望任务继续运行时。 nohup命令语法 nohup命令的基本语法如下&#x…...

VoxWeekly|The Sandbox 生态周报|20230731

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…...

编程导航算法村第九关 | 二分查找

编程导航算法村第九关 | 二分查找 LeetCode852.这个题的要求有点啰嗦&#xff0c;核心意思就是在数组中的某位位置i开始&#xff0c;从0到i是递增的&#xff0c;从i1 到数组最后是递减的&#xff0c;让你找到这个最高点。 详细要求是&#xff1a;符合下列属性的数组 arr 称为山…...

linux 下安装部署flask项目

FlaskDemo 命名为test.py # codingutf-8 from flask import Flaskapp Flask(__name__)app.route("/") def index():return "test"if __name__ __main__:app.debug True# 这里host一定要写0.0.0.0 写127.0.0.1的无法访问 ——_——app.run(host"0.…...

在Vue里,将当前窗口截图,并将数据base64转为png格式传给服务器

目录 前言 1、将当前窗口截图&#xff0c;并将数据存储下来 2、定义将base64转png的方法 3、完整代码 总结 前言 记录来源于需求 1、将当前窗口截图&#xff0c;并将数据存储下来 export default { data() {return {image: // 存储数据} }mounted() {setTimeout(() >…...

做企业网站报价/学电脑办公软件培训班

2019独角兽企业重金招聘Python工程师标准>>> 问题产生 一个完整的业务可能会被TCP拆分成多个包进行发送&#xff0c;也有可能把多个小的包封装成一个大的数据包发送&#xff0c;这个就是TCP的拆包和封包问题。 下面可以看一张图&#xff0c;是客户端向服务端发送包&…...

网站模块有哪些/seo快速排名软件app

OLTP系统的后端关系数据库用于存储不同种类的数据&#xff0c;理论上来讲&#xff0c;数据库中每一列的值都有其所代表的特定含义&#xff0c;数据也应该在存入数据库之前进行规范化处理&#xff0c;比如说“age”列&#xff0c;用于存储人的年龄&#xff0c;设置的数据类型为I…...

网站news怎么做/青岛网站建设培训学校

表表示数据库中最常用的模式对象&#xff0c;用户的数据在数据库中是以表的形式存储的。表通常由一个或多个列组成&#xff0c;每个列表示一个属性&#xff0c;而表中的一行则表示一条记录。在创建表时可以为表指定存储空间&#xff0c;如果不指定&#xff0c;Oracle会将该表存…...

选择锦州网站建设/网站是怎么做出来的

1.无外部包引用时用通常方法即可&#xff1b; 2.有外部包引用时&#xff0c;最好使用 fat jar eclipse plug-in&#xff0c;可以自己去下&#xff0c;zip文件解压后&#xff0c;将net.sf.fjep.fatjar_0.0.25文件夹放入eclipse的plugins文件 夹中&#xff0c;然后将里面的fatjar…...

枣庄市建设局网站/seo是广告投放吗

使用Java完成Excel文件的上传、内容的解析和以及保存操作。重点主要在于使用org.apache.poi包下的Workbook类完成对Excel内容的解析首先pom文件引入Apache poi&#xff0c;org.apache.poipoi-ooxml3.9Apache POI提供API给Java程序对Microsoft Office(Excel、Word、PowerPoint等…...

网站建设公司怎么做业务/北京优化网站方法

cocoapods是个大坑&#xff0c;玩过的都懂。刚玩的时候被折磨得死去活来是常态&#xff0c;反复安装删除&#xff0c;各种报错也是常态。如果不怕麻烦&#xff0c;我还是推荐自己去gitHub上下载源码就好了&#xff0c;没必要用这玩意儿。在国内由于伟大的GFW&#xff0c;使得co…...