首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

游戏服务的分布式事务优化(二)- 事务管理

前言 接上文 《游戏服务的分布式事务优化(一)- Write Ahead Log(WAL) 模块》 在挺久以前我写过一篇分享 《在游戏服务器中使用分布式事务》 。...当时尝试在我们的游戏服务中引入TCC模型的分布式事务机制,以优化好友和公会服务的一致性流程。...基本原理 首先,先简介一下这个分布式事务系统的基本原理。详细一点的可以看我之前一篇文章,《Google去中心化分布式系统论文三件套(Percolator、Spanner、F1)读后感》 。...而且本身分布式事务模块要接入的规范就比较多,使用起来有一定难度,抽象非常复杂的情况下使用起来就更困难了。...所有的事务事件必须满足 交换律 定期调用 tick() 接口 定义上述 vtable 内的必须接口 由于我们只提供了SDK,对于RPC操作, 参与者(participator) 服务还必须接入以下服务:

2.7K30

微服务 day19:分布式事务

如何实现两个分布式服务(订单服务、学习服务)共同完成一件事即订单支付成功自动添加学生选课的需求,这里的关键是如何保证两个分布式服务的事务的一致性。...上边的几个问题涉及到分布式事务控制,下面我们带着这些问题,来继续了解一下什么是分布式事务。 0x02 什么是分布式事务 在了解分布式事务之前,我们来回顾一下什么是分布式系统。 1、什么是分布式系统?...CAP 理论是分布式事务处理的理论基础,了解了 CAP 理论有助于我们研究分布式事务的处理方案。...消息队列实现最终一致性 本方案是将分布式事务拆分成多个本地事务来完成,并且由消息队列异步协调完成,如下图: 下边以下单减少库存为例来说明: ? 1、订单服务和库存服务完成检查和预留资源。...三、Spring Task定时任务 0x01 需求分析 根据分布式事务的研究结果,订单服务需要定时扫描任务表向 MQ 发送任务。

2.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微服务(十六)——Seata 分布式事务框架

    分布式事务问题由来 分布式前 单机单库没这个问题 从1:1 -> 1:N -> N:N 单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三三...此时每个服务内部的数据一致性由本地事务来保证, 但是全局的数据一致性问题没法保证。 一句话:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。...Seata术语 是什么 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。...分布式事务业务说明 这里我们会创建三个服务,一个订单服务,一个库存服务,一个账户服务。...Alina Gingertail 分布式事务的执行流程 TM开启分布式事务(TM向TC注册全局事务记录) ; 按业务场景,编排数据库、服务等事务内资源(RM向TC汇报资源准备状态) ; TM结束分布式事务

    1.9K30

    服务化与分布式事务冲突解析

    我们先回顾一下,如果没有做所有上述的架构和业务数据库的拆分,那所有操作都由同一个jvm进程中的同一个事务管理器控制,那么事物提交和回滚是比较容易控制的,但是在分布式环境下,所有的操作都是以服务为业务单元...我们可以换一个思路,参考跨两个服务的操作,假如我们将业务继续合并下沉,也就是B、C操作放到B事务中执行能够保证一致性,然后将A、B合并到A中执行,同样也能保证一致性,这样在分布式中跨3个进程的服务调用我们也能够保证数据一致性...那么分布式系统中的分布式事务如何保证数据一致性呢?...简单给出以下几个比较抽象的方案: 产品层面;将强一致性需求转变成若一致性需求,或者说从设计角度规避分布式场景强一致性 强一致性但相对简单的业务场景;比方说只跨两个服务单元,可以考虑业务下沉与合并 强一致性并且比较复杂的场景...,考虑使用分布式事务中间件,例如TXC或者自己实现 业务场景复杂但是可以接受最终一致性(ACID中牺牲CI),可以考虑本地消息表,TCC模式,消息事务等 谢谢参读,如有不周可以直接联系本人或者留言!

    1.3K30

    .Net Core with 微服务 - 分布式事务 - TCC

    上一次我们讲解了分布式事务的 2PC、3PC 。那么这次我们来理一下 TCC 事务。本次还是讲解 TCC 的原理跟 .NET 其实没有关系。...TCC Try 准备阶段,尝试执行业务 Confirm 完成业务 Cancel 回滚准备阶段的业务 TCC 事务其实是 2PC 的一个扩展。上一次我们说了 2PC ,在二阶段进行事务提交。...Confirm 如果一阶段都提交成功了,那么所有的服务都开始进入 Confirm 阶段。订单服务把房间状态更改为“已预定”状态;积分服务把冻结的积分清0。这样整个事务都成功完成了。...总结 TCC 事务是 2PC 的一种升级。TCC 相对于 2PC 不再依赖于本地数据库事物能力,它可以使用于应用层面的事务。...微服务 - Consul 配置中心 .Net Core with 微服务 - Polly 熔断降级 .Net Core with 微服务 - 分布式事务 - 2PC、3PC

    1.4K20

    微服务分布式事务Saga模式简介

    在微服务环境下为什么不能使用ACID事务?...但是,2PC两段提交并不是微服务分布式架构的选择,因为存在单点风险,因为锁也会降低吞吐量。...分布式事务如果不结合CAP定理是无法认识清楚,2PC其实只是选择了CAP中CA,虽然CA保证了可靠性,但是忽视网络通讯随时可能堵塞或失败,形成网络分区,反而不可靠,2PC带来的可靠性在分布式环境中是虚幻的...在分布式系统中,CAP定理是King,CAP定理无论是理论高度或是工程实施高度都是要高于传统事务的,在CAP定理的干预下,传统ACID事务走向了妥协,变成了BASE,也就是走向最终一致性的柔性事务。...2.一致性其实是数据的完整性,这个可以由一个应用服务内部的本地事务通过数据库机制完成,跨服务的完整性(Referential integrity)由应用完成。

    1.9K20

    微服务架构下分布式事务方案

    而对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。...为此,本文将深入和大家探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS。...该方案中提到的GTS是全新一代解决微服务问题的分布式事务互联网中间件。...4 GTS--分布式事务解决方案 GTS是一款分布式事务中间件,由阿里巴巴中间件部门研发,可以为微服务架构中的分布式事务提供一站式解决方案。 更多GTS资料请访问研发团队微博。...单事务分支的平均响应时间在2ms左右,3台服务器组成的集群可以支撑3万TPS以上的分布式事务请求。

    1.3K20

    微服务架构下分布式事务方案

    而对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。...为此,本文将深入和大家探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS。...该方案中提到的GTS是全新一代解决微服务问题的分布式事务互联网中间件。...4 GTS--分布式事务解决方案 GTS是一款分布式事务中间件,由阿里巴巴中间件部门研发,可以为微服务架构中的分布式事务提供一站式解决方案。 更多GTS资料请访问研发团队微博。...单事务分支的平均响应时间在2ms左右,3台服务器组成的集群可以支撑3万TPS以上的分布式事务请求。

    1.2K60

    分布式事务之TCC服务设计和实现

    作者:绍辉 原文:https://yq.aliyun.com/articles/609854 一、TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题; TCC是服务化的两阶段编程模型...,该TCC服务将作为分布式事务的其中一个资源,参与到整个分布式事务中;事务管理器分2阶段协调TCC服务,在第一阶段调用所有TCC服务的Try方法,在第二阶段执行所有TCC服务的Confirm或者Cancel...会出现分布式事务的并发问题; 用户在实现TCC服务时,需要考虑业务数据的并发控制,尽量将逻辑锁粒度降到最低,以最大限度的提高分布式事务的并发性; 三、总结 蚂蚁金服使用TCC有10年历史,在TCC应用方面积累了大量实践经验...;除了上述TCC服务的设计注意事项外,我们在解决用户高并发、高可用需求方面也提供了解决方案,我们对分布式事务做了极致的性能优化以支持双11等大促的高并发需求,我们基于蚂蚁LDC架构的高可用方案能使分布式事务服务达到...99.99%的可用性; 蚂蚁金服大部分业务系统均采用TCC的方式接入分布式事务,但设计TCC服务时要遵循大量设计规范,这无疑对用户提了非常高的要求;为了简化用户接入分布式事务的门槛,蚂蚁金服的分布式事务框架

    1.6K20

    比较微服务中的分布式事务模式

    本文不会深入讨论事务系统,概括了在协调写入多个资源时会用到的主要方法和模式。过去,你可能对其中一种或多种方法有良好或不好的体验,但在合适的上下文、合适的限制条件下,这些方法都能够发挥其各自的优点。...该需求可能不够明确,在分布式系统设计过程中可以以不同的方式来表达该需求,例如: 你已经为每个任务选择了合适的工具,现在需要更新NoSQL数据库、查询索引以及单个业务事务的缓存 你设计的服务需要更新其数据库...图4中,A服务使用分布式将所有的变更提交到其数据库,然后将消息发送到一个队列,期间不会有消息重复或消息丢失。类似地,B服务使用分布式事务(在一条事务中)来消费消息并提交到数据库B,且不会有数据重复。...或者B服务可以不使用分布式事务,转而使用本地事务,并实现幂等消费模式。...(并行处理) 如何选型分布式事务策略 正如你看到的,在微服务架构中处理分布式事务时并不存在正确或错误的模式。

    2.4K30

    DBPack 赋能 python 微服务协调分布式事务

    凤凰架构这本书中有描述,单个服务使用单个数据源称之为本地事务,单个服务使用多个数据源称之为全局事务,而分布式事务特指多个服务同时访问多个数据源的事务处理机制。...DBpack 简介分布式事务的实现有很多方式,如可靠性事务队列,TCC事务,SAGA事务等。...SAGA 事务将事务进行了拆分,大事务拆分若干个小事务,将整个分布式事务 T 分解为 n 个子事务,同时为为每一个子事务设计对应的补偿动作。...首先,模拟分布式事务发起方的服务,该服务会注册两个 handler,一个会发起正常的请求,走 dbpack 代理发起分布式事务,另一个会则会非正常返回。...事务发起方会根据 http 的请求情况,决定是否要发起分布式事务回滚。以下借用了 flask web 框架实现了事务发起方的两个handler,通过两个http请求我们可以模拟分布式事务发起或者回滚。

    79840

    事件驱动微服务中的分布式事务模式

    0 前言如今,软件服务可以由多个微服务组成,共同维护系统的 "状态"。在分布式软件设计中,最常见的挑战之一就是保持一致性。当构成整体服务的不同服务与系统状态不一致时,不一致的系统会引发各种问题。...启动一个事务,更新必要的表,然后提交事务。如果出现任何问题,所有更改都会回滚。但是,如果由不同的服务处理订单历史记录和奖励,会发生什么情况呢?这就是所谓的分布式事务。...在订单表中插入订单后,订单服务会向奖励服务发送一个事件,奖励服务最终会处理该事件并更新奖励表中所需的奖励积分。我们最终实现了一致性。但还不够。我们还没有解决服务器在将事件写入事件队列之前崩溃的问题。...对数据库的写入可以在一个事务中完成,因此我们可以在一个事务中插入订单和发件箱事件。如果其中一个操作失败,另一个也会回滚。为了发出事件,奖励服务可以使用更改数据捕获(CDC)来跟踪表中的更改并进行处理。...每当有新订单添加到订单历史记录表时,就可以捕获这一数据变化,并将其作为一个事件发送到奖励服务。4 模式 3:读懂自己模式在上述两个示例中,我们都希望有一个能在单个事务下发出事件的单点。

    9600

    微服务架构的分布式事务解决方案

    分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出! 下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!...预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据; 2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行...,此时不会有分布式事务问题,因为还不会跨服务改数据; 3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);...(); // 调用商户通知服务向商户发送支付结果通知 } 本地事务控制还可行吗?...以上分布式事务问题,需要多种分布式事务解决方案来进行处理。 订单处理:本地事务 资金账户加款、积分账户增加积分:TCC型事务(或两阶段提交型事务),实时性要求比较高,数据必须可靠。

    2.8K10

    微服务架构下分布式事务解决方案

    前言 在微服务架构中,随着服务的逐步拆分,数据库私有已经成为共识,这也导致所面临的分布式事务问题成为微服务落地过程中一个非常难以逾越的障碍,但是目前尚没有一个完整通用的解决方案。...分布式事务理论 微服务使得单体架构扩展为分布式架构,在扩展的过程中,逐渐丧失了单体架构中数据源单一,可以直接依赖于数据库进行事务操作的能力,而关系型数据库中,提供了强大的事务处理能力,可以满足 ACID...- 调用积分服务增加积分 [4] 创建销售出库单通知仓库发货 - 调用仓储服务通知发货 对于分布式事务来说,上面那几个步骤,要么全部成功,如果任何一个服务的操作失败了,就全部一起回滚,撤销已经完成的操作...服务调用链路依次执行 Try 逻辑,如果都正常的话,TCC 分布式事务框架推进执行 Confirm 逻辑,完成整个事务;如果某个服务的 Try 逻辑有问题,TCC 分布式事务框架感知到之后就会推进执行各个服务的...所以,事务消息不仅适用于上游事务对下游事务无依赖的场景,还可以与一些传统分布式事务架构相结合,而 MQ 的服务端作为天生的具有高可用能力的协调者,使基于可靠消息的最终一致性分布式事务解决方案,用以满足各种场景下的分布式事务需求

    1.1K20

    如何实现微服务架构下的分布式事务

    服务间采用 HTTP 协议通信,服务与服务之间完全独立。每个服务可以根据业务场景选取合适的编程语言和数据库。 4. 微服务每个服务都是独立部署的,每个服务的修改和部署对其他服务没有影响。...系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。 3. 微服务数量众多,其测试、部署、监控等都变得更加困难。...而对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。...业务微服务改造后,转入、转出通常为不同的微服务,同一个微服务也通常运行于不同的副本中。A可能变成一个分布式事务,也可能通过一些方法规避,在本地事务内完成。B和C很难规避,只能是分布式事务。...对于分布式事务,微服务最佳实践通常建议尽量规避,但是在很多业务场景是无法规避的,比如上面的B、C转账场景,没有好办法在一个微服务的本地事务内完成两个账户的数据更新。

    93710

    微服务下分布式事务模式的详细对比

    如果你足够幸运有合适的数据源,但是运行在一个动态环境中,比如 Kubernetes,那么你还需要有一个像 operator 这样的机制,以确保分布式事务管理器只有一个实例。...或者,服务 B 也可以选择不使用分布式事务,而是使用本地事务并实现幂等的消费者模式。...在本节中,一个更合适的例子是使用 WS-AtomicTransaction 在一个事务中协调对数据库 A 和数据库 B 的写入,并完全避免最终一致性。但是,现在这种方式已经不太常见了。...这种方式的最大优点是,能够仅通过本地事务就能驱动那些可能不支持分布式事务的异构服务达到一致的状态。...并行管道的优点和缺点 表 5:并行管道的优点和缺点 如何选择分布式事务策略 从本文的论述中,你可能已经猜到,在微服务架构中,处理分布式事务并没有正确或错误的模式。每种模式都有其优点和缺点。

    76410

    微服务架构及分布式事务解决方案

    分布式事务 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务...整个系统交互如下图: 分布式事务 ---- 上述两个场景的业务需求已经说完了,接着谈谈分布式事务,要说分布式事务那就先聊聊本地事务与分布式事务: Ps:相同点:首先都是要保证数据正确(即ACID),本地事务与分布式事务还可以对应为...个人理解分布式(柔性)事务本质意义上就是-伪事务,柔性事务其实就是根据不同的业务场景使用不同的方法实现最终一致性,因为可以根据业务的特性做部分取舍,在业务过程中可以容忍一定时间内的数据不一致。...-- 场景一: 库存数量与订单数量一致性,采用补偿型+最大努力通知型,采用原因为不涉及跨机房和长事务(正常情况下库存与订单服务处理很快): 用户下单先减库存,库存减成功后; 调用下单服务: 2-1....下单失败,库存回滚,两事务均失败,此处还有一个保障机制(最大努力通知型),就是如果调用库存服务异常,确定库存回滚失败了,则放入消息服务(延时消息队列)分阶段定时重试,努力重试保证库存服务正常后成功回滚。

    1K30

    服务化带来的数据一致问题---分布式事务,事务型消息

    本文我们聊聊分布式事务和事务型消息的解决思路,通过阅读本文,可以理解分布式事务和事务型消息,并且能够应用到实际生产工作中。 服务化后单体系统被拆分成多个服务,各服务访问自己的数据库。...TCC分布式事务 TCC(Try-Confirm-Cancel)是分布式事务的一种模式,可以保证不同服务的数据最终一致。...因为这几步操作是在分布式环境下进行的,每个操作分布在不同的服务中,不同的服务又对应不同的数据库,本地事务已经用不上了!...cancel(各个服务内部的TCC分布式事务框架会互相通信)。...以上是我个人对分布式事务,事务型消息等的一些总结,公众号近期文章菜单中还有关于服务化问题的其他文章,如:服务雪崩,服务化过程数据迁移等文章,感谢关注和阅读! ?

    2.1K20

    单体秒杀服务转dubbo框架+分布式事务实现

    spm=1001.2014.3001.5502 )+ 分布式事务解决方案 (为了让支付、扣减库存和订单状态一致性解决方案,见下图) 目的: dubbo 微服务化 实现订单支付分布式事务,统一提交和回滚...技术架构: docker + nacos 架构 (舍去zookeeper,nacos更香) docker 版本 2.7 springboot 版本 2.6.1 分布式事务(tcc -transaction...进行虚拟支付,之后会真正扣减库存,修改订单状态,减少虚拟账户金额,具体可以查看页面库存的变化 线上部署 服务器:tx云 2c4g轻量服务器,1200G流量, 操作系统用:系统的自带的docker的CentOS7.6...-Docker20 部署模块: 根据实际服务器配置,配置好java模块的内存大小,以及配置服务器swap内存,保证服务的稳定运行。...docker 一键化部署的配置在github中有,不过dubbo模块需要自行编译到服务器中启动。

    56900

    微服务--分布式事务的实现方法及替代方案

    这两天正在研究微服务架构中分布式事务的处理方案, 做一个小小的总结, 作为备忘. 如有错误, 欢迎指正!...如果业务场景需要强一致性, 那么尽量避免将它们放在不同服务中, 也就是尽量使用本地事务, 避免使用强一致性的分布式事务....如果业务场景需要强一致性, 并且只能够进行分布式服务部署, 那么最好是使用TCC方案而不是2PC方案来解决. 注意: 以下每种方案都有不同的适用场合, 需要根据实际业务场景来选择....异步确保型 通过将一系列同步的事务操作变为基于消息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响. 这个方案真正实现了两个服务的解耦, 解耦的关键就是异步消息和补偿性事务....适用场景 执行周期较长 实时性要求不高 例如: 跨行转账/汇款业务(两个服务分别在不同的银行中) 退货/退款业务 财务, 账单统计业务(先发送到消息中间件, 然后进行批量记账) 最大努力通知型 这是分布式事务中要求最低的一种

    76830
    领券