分布式

  • 2024.10.11 | cuithink | 32次围观
    分布式事务-TCC&Saga模式
    Seata TCC 模式回顾总览中的描述:一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:一阶段 prepare 行为二阶段 commit 或 rollback 行为根据两阶段行为模式的不同,我们将分支事务划分为 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode.AT 模式基于 支持本地...
  • 2024.10.11 | cuithink | 60次围观
    分布式事务-seata XA模式
    前提支持XA 事务的数据库。Java 应用,通过 JDBC 访问数据库。整体机制在 Seata 定义的分布式事务框架内,利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种事务模式。执行阶段:可回滚:业务 SQL 操作放在 XA 分支中进行,由资源对 XA 协议的支持来保证 可回滚持久化:XA 分支完成后,执行 XA prepare,同样,由资源对 XA 协议的支持来保证 持久化(即,之后任何意外都不会造成无法回滚的情况)完成阶段:...
  • 2024.10.11 | cuithink | 53次围观
    分布式事务-seata AT模式
    前提基于支持本地 ACID 事务的关系型数据库。Java 应用,通过 JDBC 访问数据库。整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。二阶段: 提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。写隔离一阶段本地事务提交前,需要确保先拿到 全局锁 。拿不到 全局锁 ,不能提交本地事务。拿 全局锁 的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。以一个示例来说明:两个全局事务 t...
  • 2024.10.11 | cuithink | 33次围观
    分布式事务
    著作权归@pdai所有 原文链接:https://pdai.tech/md/arch/arch-z-transection.html什么是分布式事务事务是一个程序执行单元,里面的所有操作要么全部执行成功,要么全部执行失败。在分布式系统中,这些操作可能是位于不同的服务中,那么如果也能保证这些操作要么全部执行成功要么全部执行失败呢?这便是分布式事务要解决的问题。以一个网上的经典下单减库存例子为例:单体应用所有的业务都使用一个数据库,整个下单流程或许只用在一个方法里同一个事务下操作...
  • 2024.10.11 | cuithink | 37次围观
    分布式幂等性如何设计
    在高并发场景的架构里,幂等性是必须得保证的。比如说支付功能,用户发起支付,如果后台没有做幂等校验,刚好用户手抖多点了几下,于是后台就可能多次受到同一个订单请求,不做幂等很容易就让用户重复支付了,这样用户是肯定不能忍的。解决方案:1,查询和删除不在幂等讨论范围,查询肯定没有幂等的说,删除:第一次删除成功后,后面来删除直接返回0,也是返回成功。2,建唯一索引:唯一索引或唯一组合索引来防止新增数据存在脏数据 (当表存在唯一索引,并发时新增异常时,再查询一次就可以了,数据应该已经存在...
  • 2024.10.11 | cuithink | 79次围观
    分布式ID生成有几种方案
    分布式ID的特性唯一性:确保生成的ID是全网唯一的。有序递增性:确保生成的ID是对于某个用户或者业务是按一定的数字有序递增的。高可用性:确保任何时候都能正确的生成ID。带时间:ID里面包含时间,不容易重复。UUID算法的核心思想是结合机器的网卡、当地时间、一个随记数来生成UUID。优点:本地生成,生成简单,性能好,没有高可用风险缺点:长度过长,存储冗余,且无序不可读,查询效率低数据库自增ID使用数据库的id自增策略,如 MySQL 的 auto_increment。并且可以使...
  • 2024.10.11 | cuithink | 53次围观
    分布式锁(二)
    基于redis如何实现分布式锁?有什么缺陷?基于redis如何实现分布式锁?这里一定要看Redis的官网在新窗口打开的分布式锁的实现这篇文章。 set NX PX + Lua加锁: set NX PX + 重试 + 重试间隔向Redis发起如下命令: SET productId:lock 0xx9p03001 NX PX 30000 其中,"productId"由自己定义,可以是与本次业务有关的id,"0xx9p03001"是一串随机值...
  • 2024.10.11 | cuithink | 58次围观
    分布式锁
    什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synch...
1