分布式架构:事务 事务几乎存在于每一个信息系统中,其保证了系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾(一致性)。 按照数据库的经典理论,要达成这个目标,需要三方面共同努力来保障:原子性(Atomic):在同一项业务处理过程中,事务保证了对多个数据的修改,要么同时成功,要么同时被撤销。隔离性(Isolation):在不同的业务处理过程中,事务保证了各自业务正在读、写的数据互相独立,不会彼此影响。 2024-04-19 分布式 > 架构 #事务处理 #一致性 #原子性 #隔离性 #持久性 #全局事务 #二段式提交 #三段式提交 #CAP #强一致性 #最终一致性 #最大努力交付 #可靠事件队列 #TCC事务 #SAGA事务 #正向恢复 #反向恢复
JVM各类图示 JVM主要分为三大模块内容:类加载器、运行时数据区和执行引擎。 示意图: 类加载类加载过程: 类加载器: 运行时数据区栈帧: 2024-03-28 后端开发 > 语言 > Java #Java
MySQL:并发 本文将讲解并发事务带来的问题、并发事务的控制方式、事务隔离级别。 并发事务带来的问题在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。 并发虽然是必须的,但可能会导致以下的问题:脏读、修改丢失、不可重复读、幻读。 这4个问题是并发操作中最常见的事务一致性问题,直接关系到数据库的完整性和一致性;解决这四个问题可以极大地减少并发环境下的数据一致 2024-03-22 后端开发 > 数据库 > MySQL #数据库 #MySQL #脏读 #Dirty read #丢失修改 #Lost to modify #不可重复读 #Unrepeatable read #幻读 #Phantom read #锁 #MVCC #Multi-Version Concurrency Control #多版本并发控制 #READ-UNCOMMITTED #读取未提交 #READ-COMMITTED #读取已提交 #REPEATABLE-READ #可重复读 #SERIALIZABLE #可串行化 #一致性非锁定读 #锁定读 #undo log #快照读 #snapshot read #当前读 #current read #隐藏字段 #ReadView #DB_TRX_ID #DB_ROLL_PTR #共享锁 #S锁 #排他锁 #X锁 #意向锁 #意向共享锁 #IS锁 #意向排他锁 #IX锁 #Intention Shared Lock #Intention Exclusive Lock #记录锁 #Record Lock #间隙锁 #Gap Lock #临建锁 #Next-Key Lock #插入意向锁 #自增锁
MySQL:日志 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。本文将讲解其中比较重要的二进制日志binlog(归档日志)、事务日志redo log(重做日志)和undo log(回滚日志)。 binlogMySQL二制进日志(binlog),也叫做变更日志(update log)。二进制日志中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作 2024-03-21 后端开发 > 数据库 > MySQL #数据库 #MySQL #MVCC #多版本并发控制 #undo log #日志 #binlog #Statement格式 #Row格式 #Mixed格式 #sync_binlog #Buffer Pool #rollback segment #回滚段 #redo log #两阶段提交
MySQL:索引 本文将初步介绍MySQL数据库索引的数据结构与用处。 索引是一种用来快速查询和检索数据的数据结构。许多查询往往只涉及到数据库的一部分,比如查询出某个ID为xxx的学生,系统如果需要读取每个学生来遍历获得该条记录,那么这种操作方式无疑是低效的。在理想情况下,系统应该能直接定位这些记录。 索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。 在 MySQL 2024-03-20 后端开发 > 数据库 > MySQL #数据库 #MySQL #B+树 #自适应哈希索引 #Adaptive Hash Index #二叉查找树 #BST #自平衡二叉查找树 #AVL #多路平衡查找树 #顺序索引 #散列索引 #聚集索引 #主索引 #搜索码 #非聚集索引 #辅助索引 #覆盖索引 #联合索引 #最左前缀匹配原则
JAVA:AOT入门 本文将介绍使用AOT相比使用JVM运行java程序的优点,以及如何使用AOT生成可执行文件。 资料来源:GraalVM官网阿里巴巴微信公众号 JIT传统的一个 Java 应用从代码编写到启动运行大致可以分为如下步骤: 首先,编写.java源代码程序。 然后,借助javac工具将.java文件翻译为.class的字节码。字节码是 Java 中非常重要的内容之一,正是因为它的出现,Java 才实 2024-03-18 后端开发 > 语言 > Java #JAVA #JDK #AOT #JIT #GraalVM #运行时编译 #及时编译 #静态编译 #静态分析 #提前编译 #字节码 #冷启动问题 #native image #Substrate VM #Substrate VM运行时
消息队列:8.消息功能特性 普通消息普通消息是RocketMQ中最基础的消息。常用于微服务解耦、数据集成等场景。 数据集成:在不同系统、应用程序或数据存储之间传输、转换、共享和同步数据的情况。 生命周期 初始化:消息被生产者构建并完成初始化,待发送到服务端的状态。 待消费:消息被发送到服务端,对消费者可见,等待消费者消费的状态。 消费中:消息被消费者获取,并按照消费者本地的业务逻辑进行处理的过程。 消费提交:消费者完成消 2024-03-14 分布式 > 中间件 > 消息队列 #消息队列 #RocketMQ #普通消息 #同步消息 #异步消息 #延时消息 #SCHEDULE_TOPIC_XXXX #MessageGroup #顺序消息 #生产顺序性 #消费顺序性 #单一生产者 #串行发送 #投递顺序 #有限重试 #全局顺序消息 #分区顺序消息 #ConsumeMessageOrderlyService #全局队列锁 #本地队列锁 #事务消息 #RMQ_SYS_TRANS_HALF_TOPIC #TransactionMessageCheckService
消息队列:7.消息消费 推模式与拉模式推消息推消息是指,当Broker接受到消息后,会主动将消息推送给消费者。 该模式的优缺点: 优点:实时性高,消费者简单。 缺点:Broker无法得知消费者状态,可能导致推送过多消息。 改进推模式上述模式中,Broker无法得知消费者的状态,因此添加反馈机制: Broker在推送消息前,先获得消费者的状态,再进行消息推送。 优缺点: 优点:可以实现削峰填谷,及时性高。 缺点: 2024-03-14 分布式 > 中间件 > 消息队列 #消息队列 #RocketMQ #推消息 #拉消息 #长轮询 #队列粒度负载均衡 #消息粒度负载均衡 #PullMessageService #ProcessQueue #ConsumeMessageService #消费重试 #消息重试间隔 #Wait Retry #不可见时间 #InvisibleDuration #Tag标签过滤 #tag hashcode #SQL属性过滤
消息队列:6.消息存储原理 消息队列必须保证消息存储的可靠性,这是消息队列可以做到异步、削峰填谷的基础。本文将讲解消息队列是如何实现消息的存储的。 写入硬盘类似MySQL或Redis,RocketMQ的消息持久化也是直接存储到本地硬盘中的。在面对削峰填谷的需求下,可靠性、性能、存储量都无比重要:消息不能丢失,消息得快速写入(但是不急着读取),并且需要存储大量消息。硬盘非常适合满足上述需求: 可靠性:可以通过设置RAID等级 2024-03-13 分布式 > 中间件 > 消息队列 #消息队列 #RocketMQ #commitlog #ConsumeQueue #consumerOffset #commitlog offset #indexFile #用户空间 #内核空间 #零拷贝 #sendFile #DMA Gather #mmap #稠密索引 #稀疏索引
消息队列:5.发布订阅模式 本文将讲解消息队列的两种实现模式:队列模式、发布订阅模式。 队列模式作为一种数据结构,队列的特性是先进先出。使用队列来存储消息时,生产者发送的消息会被放入到一个队列,然后由消费者们竞争着消费队列的信息。 竞争意味着每条消息只会被一个消费者消费。 在存储消息时,如果我们使用数据结构-队列对消息进行存储,就会存在一个问题:队列具有先进先出的特性,当读到后一个消息时,前一个消息就会被丢失,进而其他消 2024-03-13 分布式 > 中间件 > 消息队列 #Topic #MessageQueue #队列模式 #发布订阅模式 #offset