拒绝双写:巧用Lindorm数据订阅
简介: 本文介绍了双写场景的一致性问题,详细介绍了三种解决方案,并针对DB->Binlog->Kafka方案给出了Lindorm数据订阅的最佳实践
双写问题介绍
双写问题(Dual Write Problem)是指:需要同时修改两个独立系统的场景,比如Database和Kafka,再比如Database和缓存,那么如何保障两个系统的数据一致性?
以Database和Kafka这种常见的场景为例,我们可以有这么几种方式:
- 并发写Database和Kafka
- 先写Kafka,再写Database
- 先写Database,再写Kafka
并发写Database和Kafka
这种情况下需要分布式事务来支持强一致,否则不一致的情况就会比较复杂,Database和Kafka可能没有一个有完整的数据。
先写Kafka,再写Database
先写Kafka,成功后即可返回客户端成功,然后订阅Kafka消息入库Database,实现最终一致性。但这种异步化导致DB的数据更新延迟,会影响一些要求强一致读的场景。比如账单写入成功,但客户不能立即查看;再比如实时归因场景,Flink实时消费Kafka,在遇到交易事件后反查DB归因,但可能此时关键数据还没入库。
先写Database,再写Kafka
串行写Database、Kafka,成功后返回客户成功。这种方式问题也不小,第一写入延迟增加,第二Database成功、Kafka失败怎么处理?
此时我们会想到Binlog(或者WAL),新的方案是DB->Binlog->Kafka:写入Database,成功后即可返回客户端成功,然后订阅binlog写入Kafka,下游订阅Kafka消费。实现最终一致性,同时保证了Database上的强一致读。
基于业务场景决策
上面我们介绍了双写问题的三种解决方案,他们各自适应不同场景。
- 如果业务要求全盘的强一致体验,那么我们应当选择分布式事务。
- 如果业务倾向全盘的最终一致性体验,那么我们选择以MQ为第一入口实现最终一致性。
- 如果业务存在不同的一致性体验需求,那么我们选择强一致读写DB,以DB binlog实现最终一致性的下游业务。
Lindorm 数据订阅介绍
Lindorm数据订阅是 "DB->Binlog->Kakfa"方案的升级版。
云原生多模数据库Lindorm数据订阅功能支持任何一个表的每一条数据变更,可以在客户端实时有序的查看数据变更记录。当开通某一张表的数据订阅功能后,其变更数据的操作就会被存储。为了确保数据消费的顺序和数据写入的顺序一致,数据订阅功能提供了主键级别保序,对于同一个主键的更新操作,会按照其更新的顺序存储和消费。每次对Lindorm表格的数据执行增删改操作时,数据订阅都会生成一个Stream Record键值对,键值对的键是这一行数据的主键,值是此次操作的详细信息(操作前的值,操作后的值,时间戳,操作类型)。
总结Lindorm数据订阅的特点:
- 实时订阅
- 100%兼容Kafka客户端
- Key级别保序
原文链接
本文为阿里云原创内容,未经允许不得转载。
拒绝双写:巧用Lindorm数据订阅相关推荐
- Elasticsearch 跨机房灾备方案实战(一) —— 消息队列实现双写
一.简介 Elasticsearch 集群的高可用,跨机房做异地灾备,确保在某个机房不可用时,还能持续对外提供业务,对比了多个双活Elasticsearch 集群同步之后,最后选择了借助消息队列实现双 ...
- Ceph BlueStore 和双写问题
论开源分布式存储,Ceph大名鼎鼎.用同一个存储池融合提供块存储.对象存储.集群文件系统.在国内有近年使用量迅速攀升,Ceph Day峰会也搬到北京来开了. 大型公司内部研发云虚拟化平台,常使用开源方 ...
- 缓存淘汰、缓存穿透、缓存击穿、缓存雪崩、数据库缓存双写一致性
缓存淘汰 为什么需要缓存淘汰?你需要缓存30G的数据,但是Redis本身只能使用10G的内存,那你就得做个取舍了,毕竟鱼与熊掌不可兼得.为了利益最大化肯定要保留最重要的10个G. Redis本身提供了 ...
- 用日志构建坚固的数据基础设施/为什么双写不好
1. 备注 本文译自https://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual- ...
- mysql sync es 异步双写_mysql数据同步es方案思考
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 大体计划 1.双写 矫捷长处:简略. 错误谬误: a.停业代码耦合严重. b.如何保证双写成功 c.同步双写会增加响 ...
- 如何做数据平滑迁移:双写方案
1.什么是数据迁移 数据迁移指的是将一批数据从同构存储系统(如MySQLA到MySQLB)或异构存储系统(如MySQL-MongoDB)间搬运迁移. 最简单的数据迁移方式是通过脚本或定时任务将数据进行 ...
- 教你从0到1搭建秒杀系统-缓存与数据库双写一致
本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题. 在秒杀实际的业务中,一定有很多需要做缓存的场景,比如售卖的商品,包括名称,详情等.访问量很大 ...
- session.merge 缓存不更新_如何保证缓存与数据库双写时的数据一致性?
在做系统优化时,想到了将数据进行分级存储的思路.因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息.基本上配置了很久才会变一次.而有一些数据实时性要求非常高,比如订单和流水的数据. ...
- 数据库和缓存双写一致性方案解析
https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/81008933 https://zhuanlan.zhihu.com/p/4833 ...
最新文章
- 负载均衡算法及其Java代码实现
- 【数据结构与算法】之深入解析“买卖股票的最好时机含手续费”的求解思路与算法示例
- k8s中流量分离以及资源隔离实战
- 高通8X25Q wifi BT 调试文档
- mysql query 原理_[转]MySQL的Query Cache原理
- 95-130-348-源码-source-kafka相关-Handover
- 《小米网抢购系统开发实践》读后感
- 【SAS BASE】SAS函数
- 实战Node:幼教平台幼教资源部分实现
- SpingMVC 注解@RequestMapping、@SuppressWarnings、@Scheduled 定时器
- 网页上的文本不让你复制下载?老司机教你几招,轻松免费复制
- faster rcnn 计算mAP
- cubase手机版android,Cubase中文应用
- 超级好用的电脑截图翻译软件你值得拥有!
- Dos命令 --复制文件(夹)
- 【3D建模制作技巧分享】3dmax如何设置视图布局
- 如何给网页设置logo
- 软文成功案例,给企业带来的价值不可限量
- P7369 [COCI2018-2019#4] Elder 题解
- 2022年长沙市成人高考疫情防控政策
热门文章
- php 计划任务管理,使用php管理crontab计划任务
- 中国大学moocpython笔记_中国大学MOOC_高级语言程序设计(Python)笔记
- html信号动画,HTML5 Canvas火箭着陆和雷达信号动画
- daoi php_聊聊这些年用过的AOI
- 鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效
- python调用系统_python 执行系统命令
- linux部署tomcat项目404_Tomcat部署项目的几种常见方式
- jdbc java连接oracle_java连接oracle jdbc连接
- vue打包上线部分css效果错乱,vue-cli2打包后css部分样式错乱
- perl python json_Perl解析JSON数据精解