写点什么

华为云企业级 Redis 揭秘第 16 期:超越开源 Redis 的 ACID"真"事务

  • 2022 年 2 月 21 日
  • 本文字数:2105 字

    阅读完需:约 7 分钟

本文分享自华为云社区《华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务》,作者: 高斯 Redis 官方博客 。


日常生活中的 shopping、交通、手游都离不开高频的金融消费、虚拟交易。熟悉 MySQL 的读者,一定知道数据库事务(Transaction)可以搞定这类关键场景,事务不但极大简化了上层业务的编程模型,给开发者带来便利,同时它也让“交易”等核心业务正确可靠。


其实,Redis 也有事务,但社区版只做了简版实现,无法满足 ACID 要求,因此应用有限。


本文将介绍华为云企业级数据库 GaussDB(for Redis)(下文简称为高斯 Redis)的事务功能,与社区版不同,高斯 Redis 提供了满足 ACID 的企业级事务特性。

1.什么是事务?

请设想如下场景:

在一个月黑风高之夜,一场交易正在进行。玩家 B 收款成功,但 A 却没拿到装备。

好了,一场 PK 在所难免。



玩家做几次点击即可完成交易,但底层数据库内部,却需要执行至少 4 个关键操作:



试想,如步骤 4 失败,而前置步骤成功,会发生逻辑错乱,这将带来灾难性的用户体验。


事务是如何解决这类场景的?这依赖于 4 大特性:

  • 原子性(Atomicity):一组操作要么全成功,要么全失败。

  • 一致性(Consistency):即满足既定约束,保证系统不脱离合理状态。例如,如果 A、B 各有 50 枚金币,那么全局总数应始终保持 100。

  • 隔离性(Isolation):多个事务的执行相互隔离,互不影响。

  • 持久性(Durability):提交成功的事务应带来永久性状态变化,即使掉电,数据也不应丢失。


其中,一致性是最关键的,而原子性、隔离性、持久性都是为了保证一致性。当然,为了确保整体系统的一致性,也需要业务层的共同设计实现,本文不详细展开。


那么,开源 Redis 事务存在哪些问题,GaussDB(for Redis)的企业级事务功能又是什么样的?下面我们来具体看看。

2. 从四大特性看 Redis 的事务

2.1 原子性

社区版 Redis

开源 Redis 事务是一种极简设计,并不支持事务失败时的回滚操作,不满足事务的原子性。


此外还有以下问题:

  • 入队校验不完备:只校验简单语法,无法识别 key 的类型错误;

  • 错误处理不完备:直接跳过错误,继续执行后续命令。


GaussDB(for Redis)



如图所示,开源 Redis 事务在第一条命令出错的情况下仍旧执行了下面的命令,而高斯 Redis 则避免了这样的问题。

  • 每个事务的执行在提交前会进行错误判断,如有错误则会触发回滚逻辑,放弃之前的操作,对原数据无影响


高斯 Redis 在保留社区版事务使用逻辑的同时,在底层实现了对回滚的支持,满足了事务的原子性。

2.2 隔离性

社区版 Redis

事务在并发执行时,应当处理各种隔离性问题。


开源 Redis 对命令的执行是单线程设计,因此的确可以保证不会有两个事务同时被执行,具体来看:

  • 开源 Redis 不存在隔离性问题;

  • 代价是性能的降低和对整体吞吐的影响,事务只能单线程处理,对其他请求的干扰较大。


GaussDB(for Redis)

高斯 Redis 是多线程架构,内部对数据进行自动分片,在同数据分片内保留序列化的隔离性级别,同时极大提高整体实例的并发能力。



2.3 持久性

社区版 Redis


开源 Redis 是纯内存设计,不提供可靠的数据存储能力。掉电后数据丢失,即使开启 RDB 或 AOF,也只能在一定程度上挽回部分数据,具体来看:

  • RDB 方式会丢失部分数据,数据只能恢复到上次快照的时间

  • 即使是 AOF 方式,持久性也存在问题,从命令执行到保存到硬盘之间,仍旧存在时间差

  • AOF 方式恢复缓慢、维护文件庞大,维护管理成本都会非常高,重建时间也很长


综合来看,社区版 Redis 的持久化能力有限,不足以支持事务的持久性要求。


GaussDB(for Redis)

高斯 Redis 采用存算分离的设计理念,底层使用高性能分布式存储池保存全量数据,结合 RocksDB 存储引擎,可保证核心数据的可靠存储,架构图:



GaussDB(for Redis)核心优势:

  • 核心数据存储:全量数据落盘,3 副本冗余,不怕丢数据

  • 高可用:秒级故障接管,即使 N-1 节点故障,全量数据也可用

  • 低时延:自动冷热分离,亚毫秒级时延,能 Hold 缓存场景

  • 高吞吐:全部节点可写,QPS 可水平扩展,能抗流量高峰

  • 强一致:3 副本强一致同步,不会发生脏读,业务免踩坑

  • 秒扩容:例如,8G 到 64G 扩容只需 1 秒,且对业务 0 影响

  • 降成本:数据量越大价格越香,能够真正帮用户省成本


高斯 Redis 强大的持久化保障,支持核心数据的可靠存储,也为事务的执行提供了有力的保证。

2.4 一致性

从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性,可以说在 ACID 中一致性是事务的目的,其他特性是手段。


如上文所述,开源 Redis 在原子性和持久性上都存在种种问题,一致性自然也无法保障。在上述特性的保障下,不论是正常执行还是存在命令失败场景,高斯 Redis 事务都有可靠的一致性。

2.5 对比总结

通过上述介绍我们从事务的四大特性出发详细地介绍了高斯 Redis 的事务,最后做一个总结:



3. 结语

近年来,以 Redis 为代表的 KV 数据库逐渐在越来越多的场景发挥作用,而高斯 Redis 作为华为云旗舰 KV 数据库,可满足企业核心数据的可靠存储要求。


高斯 Redis 的事务能力相比社区版 Redis 有极大提升,在 ACID 事务的加持下,更可在“库存”、“交易”等关键场景简化业务设计,带来可靠数据存储能力。

4. 附录


点击关注,第一时间了解华为云新鲜技术~​


发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务