iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >分布式数据库对2PC的优化方法是什么
  • 541
分享到

分布式数据库对2PC的优化方法是什么

2024-04-02 19:04:59 541人浏览 泡泡鱼
摘要

本篇内容主要讲解“分布式数据库对2PC的优化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分布式数据库对2PC的优化方法是什么”吧!两阶段提交(2PC

本篇内容主要讲解“分布式数据库对2PC的优化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分布式数据库对2PC的优化方法是什么”吧!

两阶段提交(2PC)

两阶段提交协议主要有2种,一种是应用层的TCC,比如阿里巴巴的seata就实现了TCC模式,这种模式的特点是每个服务都需要提供try/confirm/cancel这3个实现,这3个实现需要在业务代码中实现,对业务侵入高。

今天我分享的是面向资源的2PC协议,最早由Jim  Gray提出,整个事务分为2个阶段,prepare阶段和commit阶段,这2个阶段由协调节点和DB资源管理器协作完成。

这里我们还是以经典的电商系统为例,整个系统分为订单、账户和库存3个服务,我们收到客户的购买请求后,协调节点需要协调订单服务生成订单,账户服务扣减商品款,库存服务扣减商品库存,假如这3个服务的数据库在不同切片上,这个协调过程具体如下:

1.prepare阶段

协调节点向所有服务发送prepare请求,每个服务收到prepare请求后会尝试执行本地事务,但不会真正提交本地事务。这个尝试执行的过程会检查到是否具备执行事务的条件,比如资源是否被定等,当所有服务都尝试执行成功后会给协调节点返回一个yes,如下图:

分布式数据库对2PC的优化方法是什么

2.commit/rollback阶段

如果prepare阶段所有服务有返回了yes,那么协调节点就会通知各个服务执行commit操作,这时各个服务就会真正的提交本地事务。如下图:

分布式数据库对2PC的优化方法是什么

如果prepare阶段有服务返回了no,协调节点就需要通知所有服务进行本地事务回滚。

2PC存在问题

上面我们简单地分析了2PC协议的执行过程,那么2PC有什么问题呢?

1.性能问题

本地事务在prepare阶段锁定资源,比如账户服务要扣减xiaoming这个账户的金额100元,那必须把xiaoming这个账户先锁定。这样如果有其他事务也要修改xiaoming这个账户,就必须等待前面的事务完成。这样就造成了延迟和性能下降。

2.协调节点单点故障

协调节点是单节点的,如果发生故障,整个事务会一直阻塞。比如第一个阶段prepare成功了,但是第二个阶段协调节点发出commit指令之前宕机了,所有服务的数据资源处于锁定状态,后面的事务只能等待。

3.数据不一致

如果第一阶段prepare成功了,但是第二阶段commit的时候,如果协调节点通知库存服务失败了,这样就相当于生成了订单,扣减了账户,但是没有扣减库存。这导致了数据的不一致。

Percolator模型

主流的Newsql数据库,比如TiDB,是用Percolator模型来解决的。如下官网链接:

https://pinGCap.com/blog-cn/percolator-and-txn/

Percolator模型来自于Google论文:

《Large-scale Incremental Processing Using Distributed Transactions and Notifications》

原文可以看下面连接,网上也有好多翻译版的:

Https://www.cs.princeton.edu/courses/arcHive/fall10/cos597B/papers/percolator-osdi10.pdf

Percolator的前提是本地事务的数据库支持多版本并发控制协议,也就是mvcc。现在主流数据库比如Mysqloracle都是支持的。

a)初始阶段

还是看上面我们提到的经典电商案例,初始阶段,我们假设订单数量是0,账户服务是1000,库存服务是100,客户下了1个订单后,订单服务增加1个订单,账户服务扣除金额100,库存服务扣除商品数量1。各个切片的初始数据如下表:

分布式数据库对2PC的优化方法是什么

":"前面的是时间戳或者数据版本,后面是数据值。这3张表中,第一条记录不保存真正的数据,而是保存了指向真正数据的指针,比如订单表中,6这个版本的数据指向了5个版本的数据,订单数量是0。

b)prepare阶段

在prepare阶段,协调节点向每个服务发送了prepare命令,这3张表分别进入了prepare阶段。在prepare阶段,Percolator定义了主锁的概念,每个分布式事务只能有一个服务获得主锁,比如本案例的订单服务,其他服务的锁指向这个主锁的指针,如下表:

分布式数据库对2PC的优化方法是什么

prepare阶段,每个服务会写日志,并且根据时间戳记录事务的私有版本,这样其他事务就不能操作这三条数据了。

c)commit阶段

在commit阶段,协调节点只需要跟订单服务通信,因为订单服务拥有primary lock,也就是说协调节点只跟拥有primary  lock的切片通信。这时数据如下表:

分布式数据库对2PC的优化方法是什么

这时我们注意到除了order服务的锁没有了,而且增加了版本8指向版本7,说明订单服务已经没有私有版本了,但是账户服务和库存服务的私有版本还在。Percolator的独特之处就是在这里,它会启动异步线程来更新账户服务和库存服务。最终数据如下表:

分布式数据库对2PC的优化方法是什么

因为协调节点只需要跟获取primary lock的切片进行通信,要么成功要么失败这样就避免了commit时节点不能全部成功导致的数据不一致问题。

而prepare阶段记录了日志,如果某个切片commit失败,可以根据日志进行再次commit,这样就保证了数据最终一致。

如果协调节点宕机了,异步线程可以做资源的释放工作,避免了因单点故障通信失败造成的资源不能释放。

这里我们要注意2点:

  • primary lock的选择是随机的,比如本例中并不一定会选择订单服务

  • 协调节点发送commit后订单服务先提交成功,这时如果其他事务要读取账户服务和库存服务的2条数据,虽然2条数据上面还有lock,但是查找primary@order.bal发现已提交,所以是可以读取的。

总结

2PC协议有3个问题,性能问题、单点故障和数据不一致。

Percolator模型简化了协调节点和切片的通信流程,让协调节点只跟其中一个primary切片通信,一方面,减少了通信开销,另一方面,避免了因为单点故障,commit阶段部分节点通信失败导致的数据不一致问题。

Percolator在prepare阶段记录了日志,这样即使协调节点故障了,恢复后也可以根据日志来做事务恢复。

Percolator使用异步线程来做资源的释放工作,这样即使协调节点故障了,也不用担心资源得不到释放。

知名的NewSQL数据库TiDB就是参照Percolator模型来对2PC协议进行优化的。

但是我们要知道,2PC的性能问题还是存在的,好在主流的分布式数据库都做了优化,性能损耗只会越来越小。

到此,相信大家对“分布式数据库对2PC的优化方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 分布式数据库对2PC的优化方法是什么

本文链接: https://www.lsjlt.com/news/61896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分布式数据库对2PC的优化方法是什么
    本篇内容主要讲解“分布式数据库对2PC的优化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分布式数据库对2PC的优化方法是什么”吧!两阶段提交(2PC...
    99+
    2024-04-02
  • 分布式数据库优缺点是什么
    这篇文章给大家分享的是有关分布式数据库优缺点是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。什么是分布式数据库?分布式数据库是多个互连的数据库,他们通常位于多个服务器上,但彼...
    99+
    2024-04-02
  • 数据库优化的方法是什么
    数据库优化的方法是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!数据库优化的方式有:1、选取最适用的字段属性;2、使用...
    99+
    2024-04-02
  • PHP与数据库分布式集成的方法是什么
    这篇“PHP与数据库分布式集成的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP与数据库分布式集成的方法是什么...
    99+
    2023-07-06
  • oracle数据库优化的方法是什么
    Oracle数据库优化的方法包括但不限于以下几点: 数据库设计优化:通过合理的数据库设计来减少冗余数据和提高数据访问效率,包括表...
    99+
    2024-04-02
  • postgresql数据库优化的方法是什么
    使用索引:在经常查询的列上创建索引,可以提高查询效率。 使用合适的数据类型:选择合适的数据类型可以减小存储空间,提高查询速度...
    99+
    2024-05-06
    postgresql
  • Oracle数据库中的分布式数据库是什么
    在Oracle数据库中,分布式数据库是指在不同物理位置上的多个数据库实例能够通过网络连接相互通信和协作的系统。分布式数据库可以让用户...
    99+
    2024-03-02
    Oracle
  • 优化MySQL数据库发布系统存储的方法是什么
    优化MySQL数据库发布系统存储的方法有:mysql库主从读写分离。适当的添加索引。选取最适用的字段属性。不经常改动的页面,生成静态页面。添加缓存机制。找规律分表,减少单表中的数据量提高查询速度。选择合适的表字段数据类型和存储引擎。尽量避免...
    99+
    2024-04-02
  • 数据库中优化SQL的方法是什么
    本篇内容介绍了“数据库中优化SQL的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!判断问题SQL...
    99+
    2024-04-02
  • 分布式数据库的特点是什么
    小编给大家分享一下分布式数据库的特点是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!分布式数据库的特点有:1、分布的透明管理...
    99+
    2024-04-02
  • MySQL亿级数据数据库优化的方法是什么
    本篇内容主要讲解“MySQL亿级数据数据库优化的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL亿级数据数据库优化的方法是什么”吧!对MySQ...
    99+
    2024-04-02
  • MySQL数据库的性能优化方法是什么
    本篇内容介绍了“MySQL数据库的性能优化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL数据库的优化目标、基本原则:...
    99+
    2023-07-06
  • Oracle Gateway for SQL Server时2PC分布式事务异常处理的方法是什么
    这篇文章主要讲解了“Oracle Gateway for SQL Server时2PC分布式事务异常处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和...
    99+
    2024-04-02
  • mysql数据库查询优化的方法是什么
    MySQL数据库查询优化的方法包括以下几个方面: 创建索引:通过在查询涉及的列上创建索引,可以大大提高查询的性能。可以使用CREA...
    99+
    2024-04-02
  • mysql大数据分页优化的方法是什么
    在处理大数据分页时,可以通过以下方法来优化MySQL数据库的性能: 使用索引:为查询条件中经常使用的字段添加索引,可以加快查询速...
    99+
    2024-04-09
    mysql
  • 数据库中分布式事务是什么
    这篇文章给大家分享的是有关数据库中分布式事务是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。事务什么是事务?这个作为后端开发,日常开发中只要与数据库有交互,肯定就会使用过事务...
    99+
    2024-04-02
  • 分布式数据库系统的特点是什么
    这期内容当中小编将会给大家带来有关分布式数据库系统的特点是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。本教程操作环境:windows7系统、Dell G3电脑。分布式数据库系统 (DDBS)包含分布...
    99+
    2023-06-26
  • java循环查询数据库优化的方法是什么
    Java循环查询数据库的优化方法有以下几种:1. 批量查询:将多个查询语句合并为一个查询语句,以减少与数据库的交互次数。使用IN关键...
    99+
    2023-09-09
    java 数据库
  • 数据库访问优化法则是什么
    本篇文章为大家展示了数据库访问优化法则是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进...
    99+
    2024-04-02
  • 分布式存储数据保护方式是什么
    分布式存储数据保护方式包括:1. 冗余备份:将数据分布在多个节点上,以确保数据的可靠性和可用性。如果某个节点出现故障,数据可以从其他...
    99+
    2023-05-30
    分布式存储数据保护 分布式存储
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作