数据库金融行业数据库新势力-浪潮云溪NewSQL数据库解析( 三 )


“云溪”数据库采用无锁的两阶段提交事务模型实现了对并发操作的ACID事务支持 , 采用Write intent +全局事务表解决多节点间事务原子性 , 没有中心的事务协调者 , 任一节点都可以做为事务协调节点 , 该节点负责本次事务的整个过程 , 参与节点只涉及节点自身数据的更新 。
l 详细的事务过程
数据库金融行业数据库新势力-浪潮云溪NewSQL数据库解析
本文插图
分布式事务流程
1. 开始事务:第一个写操作发生的节点 , 会充当事务管理器 , 该节点将创建一个事务记录存入分布式存储中 , 标记事务记录状态为PENDING 。
2. 写意图(Write Intents):“云溪”数据库使用了“Write Intents”的结构 , 当事务的参与者在一个事务中写入数据时 , 将被记录为一个写意图 , 同时还会存储事务记录的Key 。 在事务提交后 , 写意图会被成功写入数据库 , 而事务失败则会清理写意图 。
3. 读取意图:当进程读取到Write Intents , 表明有事务在操作该数据 。 则进程需要查询意图中的事务记录状态是否已经提交 , 并根据隔离状态来决定当前进程是等待事务的提交(SSI隔离级别)还是读取该事务之前更旧的数据(RC隔离级别) 。
4. 提交事务:由协调者更新事务记录状态为“已提交-COMMITED”即可 , 并触发清理操作 。 其他参与者不需要处理 。 (因此 , “云溪”数据库的分布式事务也可以称为1.5阶段提交)
5. 清理操作:如果事务状态是“已提交-COMMITED” , 则对应的写意图会转换成普通值 , 并清除写意图 。 如果是“终止-ABORTED” , 则清除写意图 。
l 混合逻辑时间戳-HLC
分布式事务需要全局时钟 , “云溪”数据库采用混合逻辑时钟(HLC) , 这种方案不依赖中心节点 , 方便扩展 , 即使是跨地域部署也没有什么问题 。 HLC由WallTime和LogicTime两部分组成 , WallTime为节点n当前已知的最大的物理时间 , 通过先判断WallTime , 再判断LogicTime确定两个事件的先后顺序 。
l 多版本控制-MVCC
“云溪”数据库底层存储是KV , 利用KEY + timestamp可实现MVCC 。 在实际的操作中 , 为了快速读取到最新的数据 , 会把HLC取反encode到KEY的尾部 , 读取的时候以KEY作为前缀启动一个迭代器 , 这样最新的数据最先被读取到 。
事务中未提交的数据比较特殊 , 并不会把事务时间戳encode到KEY的尾部 , 而是把事务相关的信息和数据一起Encode到Value中 , 称之为WRITE INTENT 。
数据库金融行业数据库新势力-浪潮云溪NewSQL数据库解析
本文插图
读取的时候 , 未提交的数据肯定最先被Get到 。 历史数据会被异步GC掉 。
“云溪”数据库这种分布式、无锁事务的原子性策略 , 即保证了分布式系统下难以处理的分布式事务一致性问题 , 同时避免传统两阶段事务的繁琐 , 消除了两阶段锁 , 同时大大降低了事务提交和回滚的开销 , 可以大大提升分布式事务的吞吐能力 。
4.4. 云原生与微服务“云溪”数据库是为云而设计的数据库 , 提供容器化部署和编排调度 , 支持公有云、私有云和混合云 , 可实现一键部署与升级、自动备份与还原、故障自动修复、自动扩容、数据自动重分布 , 完全适应云时代微服务架构应用的需求 。
“云溪”数据库基于P2P的节点管理 , 节点之间完全对等 , 无中心架构 , 任一节点均可处理客户端请求 , 并且数据库的所有配置相关信息全部在数据库内 , 无额外的配置信息 , 可方便的实现云上线性扩展 。
同时 “云溪”数据库支持云原生时代微服务的开发模型 。 目前常用的微服务模型是为每个微服务配置独立的数据库 , 如下:
数据库金融行业数据库新势力-浪潮云溪NewSQL数据库解析


推荐阅读