Uber是如何解决数据一致性问题的呢?

news2024/11/27 5:37:38
5e35b352c08cf436dcafc18ab2b55d34.png

Uber的请求流程非常复杂,如上图所示,他们使用Spanner来存储大量数据。Spanner是一个全面托管的、关键的关系型数据库服务,可以在全球范围内提供事务一致性和高可用性的自动同步复制。

但是,当扩展到数百万并发请求时,使用Cassandra很难保证低延迟的写入。另一个问题是工程团队开始注意到复杂的存储交互,这些交互需要进行多行和多表的写入操作(具体意义不明)。但无论如何,本地Cassandra数据库变得非常具有挑战性。

对于Uber来说,数据不一致可能导致两个司机接同一个乘客。

解决方案是构建一个应用层框架,使用Saga模式来协调数据库操作。

Saga设计模式

c5938eb39ad2ed360215577f3b0e1466.png

Saga设计模式是一种用于在分布式事务场景下管理微服务间数据一致性的方式。Saga是一系列事务,每个事务更新每个服务并发布消息或事件以触发下一个事务步骤。如果某个步骤失败,Saga将执行一系列补偿事务来撤销之前事务所做的更改。

简单来说,如果在事务期间出现问题(事务是逻辑或工作的单个单元,有时由多个操作组成),则应撤销之前的更改。

事务是什么?

事务是一个逻辑或工作的单个单元,有时由多个操作组成。在事务内部,事件是对实体状态的更改,命令封装了执行操作或触发后续事件所需的所有信息。

事务必须具备原子性、一致性、隔离性和持久性(ACID)。单个服务内的事务是ACID的,但跨服务的数据一致性需要跨服务事务管理策略。

在多服务架构中:

原子性:事务是不可分割的操作集合,要么全部执行,要么全部不执行。•一致性:事务将数据从一个有效状态转换为另一个有效状态。•隔离性:保证并发事务产生的数据状态与按顺序执行的事务产生的数据状态相同。•持久性:确保已提交的事务即使在系统故障或断电的情况下仍然保持提交状态。

解决方案

Saga模式通过一系列本地事务提供事务管理。本地事务是Saga中参与者执行的原子工作任务。每个本地事务都会更新数据库并发布消息或事件以触发Saga中的下一个本地事务。如果本地事务失败,Saga将执行一系列补偿事务来撤销之前的本地事务所做的更改。

有两种常见的Saga实现方法:协作编排。每种方法都有一套用于协调工作流的挑战和技术。

协作是一种无需集中控制点的Saga协调方式。在协作中,每个本地事务都会发布领域事件,从而触发其他服务中的本地事务。

3fefc817e54a7e6320e2f1fcdabdb2ad.png

编排是一种通过集中式控制器协调Saga的方式。编排器告知Saga参与者要执行的本地事务。编排器处理所有事务,告知参与者根据事件执行哪些操作。编排器执行Saga请求,存储和解释每个任务的状态,并使用补偿事务进行故障恢复。

60daca4f69ed1951b3fa4c8a9af5fbbb.png

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

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

相关文章

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题一 1 题目 Citi Bike是纽约市在2013年启动的一项自行车共享出行计划,由“花旗银行”(Citi Bank)赞助并取名为“花旗单车”(Citi Bike)。在曼哈顿,布鲁克…

PID算法:标准PID算法的一些改进措施

前面的几篇文章分别分享了PID算法的原理、增量式和位置式PID算法的区别、以及过程控制中一些重要的指标,感兴趣的朋友可以回看之前的文章或者自行查阅资料。 在实际项目中,使用数字PID算法对系统的被控量进行控制的时候,有时候并不是仅仅的使…

面试之可重复读是否可以解决幻读

可重复读(repeatable read)定义:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的,简单的来说幻读指的是当用户读取某一范围的数据行时,另外一个事务又在该范围…

一个PDF怎么拆分成几个?这几个方法轻松拆分PDF!

在现代生活与工作的环境中,我们常常需要以高效的方式处理包含大量信息的PDF文件。在这种情况下,拆分这些文件成为一种理想的解决方案,以便更精准地管理和阅读这些信息。接下来,我们将深入探讨几种实用的PDF拆分技巧。 一、直观的…

postman-循环调用测试接口

此篇文章产生的背景是想针对接口做流控验证,检查流控是否奏效,便发现postman也能一次操作来循环调用接口,减少了一些开发测试工作,下面就看一下操作流程 目录 前置查看postman版本我的接口数据 具体操作步骤新建接口集选择接口集进…

FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载

水果音乐编辑软件FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载是兔八哥爱分享搜集到的Mac Os系统上一款功能齐全的音乐编曲工具,可以为需要创作高品质音乐曲目的专业和业余艺术家提供多轨录音,排序和混音。 借助FL Studio 21的帮助…

运动模糊还原|维纳滤波|图像处理

前言 那么这里博主先安利一些干货满满的专栏了! 这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助! 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

《Ansible故障篇:ansible报错解决python依赖》

一、背景信息 如下报错:这个警告是提醒您当前的Ansible配置在目标主机上使用的是/usr/bin/python而不是建议的/usr/bin/python3,因为Ansible 2.9版本之前的某些版本默认使用早期的Python 2.x版本。然而,在将来的版本中,Ansible将会…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接(若失效评论区留言发送最新链接)(2023.7亲测可用) 2.安装插件 (1)打开chrome浏览器页面,点击:右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

leedcode 1326. 灌溉花园的最少水龙头数目

在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。 花园里总共有 n 1 个水龙头,分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges ,其中 ranges[i] (下标从 0 开始…

wsl2中安装docker

1、安装docker 执行以下脚本: 这个脚本在执行之前需要先执行chmod x install-docker.sh这个命令 # install docker curl -fsSL get.docker.com -o get-docker.sh sh get-docker.shif [ ! $(getent group docker) ]; thensudo groupadd docker; elseecho "doc…

暗图增强 小期刊/会议 论文阅读笔记

Y. Ueda, H. Misawa, T. Koga, N. Suetake and E. Uchino, “HUE-Preserving Color Contrast Enhancement Method Without Gamut Problem by Using Histogram Specification,” 2018 25th IEEE International Conference on Image Processing (ICIP), Athens, Greece, 2018, pp…

一种具有集成JFET区域的新型SiC沟道MOSFET,通过该区域改善了其短路容限能力

标题:A Novel SiC Trench MOSFET with Improved Short-circuit Capability through an Integrated JFET Region 阅读日期:2023.7.16 研究了什么 该文章研究了一种新型SiC沟槽栅MOSFET,其具有集成JFET区域(IJ-TMOS)&a…

天天刷题-->LeetCode(最长回文子串)

个人名片: 🐅作者简介:一名大二在校生,热爱生活,爱好敲码! \ 💅个人主页 🥇:holy-wangle ➡系列内容: 🖼️ tkinter前端窗口界面创建与优化 &…

【NLP】使用Word Embedding实现中文自动摘要

使用Word Embedding实现中文自动摘要 主要步骤中文语料库数据预处理生成词向量把文档的词转换为词向量生成各主题的关键词检查运行结果 参考资料 本文通过一个实例介绍如何使用Word Embedding实现中文自动摘要,使用 Gensim中的word2vec模型来生成Word Embedding。 …

揭秘乳腺癌预测黑科技:R语言和支持向量机的奇妙之旅!

一、引言 乳腺癌被认为是全球范围内最常见的癌症之一,对女性健康造成了重大威胁[1]。根据世界卫生组织的统计数据,乳腺癌是女性恶性肿瘤中的主要类型,并且是导致女性死亡的第二大原因[2]。这个事实凸显了乳腺癌在全球范围内的流行程度以及对公…

数据库架构演变过程

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

ES系列--分析器

一、前言 ES进行文档分析就会涉及到分析器,无论是内置的分析器,还是自定义的分析器,都是由一个分词器(tokenizers) 、0或多个词项过滤器(token filters)、0或多个字符过滤器(charact…

随机数检测(四)

随机数检测(四)- 累加和检测、近似熵检测、线性复杂度检测、Maurer通用统计检测、离散傅里叶检测 3.12 累加和检测方法3.13 近似熵检测方法3.14 线性复杂度检测3.15 Maurer通用统计检测3.16 离散傅里叶检测方法 如果商用密码产品认证中遇到问题&#xff…

Python应用实例(二)数据可视化(四)

数据可视化(四)下载数据 1.CSV文件格式1.1 分析CSV文件头‘1.2 打印文件头及其位置1.3 提取并读取数据1.4 绘制温度图表1.5 在图表中添加日期 从网上下载数据,并对其进行可视化。网上的数据多得令人难以置信,大多未经仔细检查。如…