Binlog 的三个业务应用场景
点击上方“芋道源码”,选择“设为星标”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33 更新文章,每天掉亿点点头发...
源码精品专栏
- 原创 | Java 2021 超神之路,很肝~
- 中文详细注释的开源项目
- RPC 框架 Dubbo 源码解析
- 网络应用框架 Netty 源码解析
- 消息中间件 RocketMQ 源码解析
- 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
- 作业调度中间件 Elastic-Job 源码解析
- 分布式事务中间件 TCC-Transaction 源码解析
- Eureka 和 Hystrix 源码解析
- Java 并发源码
01、什么是binlog
binlog是mysql的一种二进制日志文件,用来记录数据的变化。mysql使用binlog进行主从复制,如图:
- 客户端向master的mysql sever写入数据
- 当数据发生变化时,master将变更的数据记录写入到二进制文件中,即binlog。
- slave订阅了master的binlog,所以会通过一个I/O THREAD与master的DUMP THREAD进行通信,同步binlog
- I/O THREAD读取到binlog后会吸入到relay log中,准备重放。
- slave会通过SQL THREAD读取relay log,重放数据的改动并执行相应的改动。
这里有几点需要注意:
- 主从复制不是强一致性,只能保证最终一致
- master配合binlog复制会影响性能,所以尽量不要在master上挂太多的slave,如果对时间要求不高,可以在slave上挂slave
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
02、binlog的业务应用
上面介绍了mysql中应用binlog的场景,而我们的业务可以伪装成master的slave节点,感知数据的变化,这就给了我们很多的业务运用空间。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://gitee.com/zhijiantianya/yudao-cloud
- 视频教程:https://doc.iocoder.cn/video/
03、数据异构
经常有这样一个场景:
原来业务是一个很单一的系统,所以表也在一起。随着业务的发展,系统开始拆分,总有一些表是各个业务都关注的表,但是对相关的字段的运用场景不同,所以这样一份元数据怎样更好的为各个系统服务就成了问题。当然,多写或者读写分离可以从物理节点上减少对数据服务器的压力,但是对业务并没有做到足够的支持,因为这些表都是一样的。因此我们可以通过binlog进行数据异构。
如图所示,订单系统生成订单后,通过binlog可以解析生成用户维度的订单信息供用户中心查询、商户维度订单表供运营管理,以及搜索系统的搜索数据,提供全文搜索功能。
这样,我们就通过原始的订单数据异构到三个系统中,提供了丰富的数据访问功能。不仅从节点上降低了数据服务器的压力,数据表现形式也更贴近自己的服务,减少不必要的字段冗余。
04、缓存数据的补充
对于高并发的系统,数据库往往是系统性能的瓶颈,毕竟IO响应速度是远远小于电子的运算速度的。因此,很多查询类服务都会在CPU与数据库之间加上一层缓存。即现从缓存获取,命中后直接返回,否则从DB中获取并存入缓存后返回。而如果原始数据变化了但缓存尚未超时,则缓存中的数据就是过时的数据了。当数据有变更的时候主动修改缓存数据。
当客户端更改了数据之后,中间件系统通过binlog获得数据变更,并同步到缓存中。这样就保证了缓存中数据有效性,减少了对数据库的调用,从而提高整体性能。
05、基于数据的任务分发
有这样一个场景:
很多系统依赖同一块重要数据,当这些数据发生变化的时候,需要调用其他相关系统的通知接口同步数据变化,或者mq消息告知变化并等待其主动同步。这两种情况都对原始系统造成了侵入,原始系统改一块数据,并不想做这么多其他的事情。所以这时候可以通过binlog进行任务分发。
当原始业务系统修改数据后,不需要进行其他的业务关联。由调度系统读取binlog进行相应的任务分发、消息发送以及同步其他业务状态。这样可以将其他业务与原始业务系统解耦,并从数据的角度将所有管理功能放在了同一个调度系统中,责任清晰。
06、总结
binlog是mysql提供的数据同步机制,很好的解决了主从分离、读写库分离等业务。而我们可以构建一个中间件系统,“伪造”成master的一个slave。当读取了binlog中的数据变化后,根据相应的业务场景做各种业务处理。而目前我接触到的最常见的就是第一个场景——数据异构,可以异构到其他表中,也可以异构到其他数据引擎中,比如Elastic Search。
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*)
相关文章
- 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
- 基于无线网关的多功能报警柱典型应用场景
- 智慧眼CTO谭松波:深耕长尾应用场景,做人工智能工匠
- http.sys的简单应用
- 带你走入redis的应用场景
- 区块链原理说明及其应用场景
- redis分布式锁的应用场景_分布式锁redis实现方式
- 应用最广泛的动态路由协议:OSPF
- 图算法、图数据库在风控场景的应用
- 谈谈域渗透中常见的可滥用权限及其应用场景(二)
- 【rainbowzhou 面试13/101】技术提问--说说你了解的大数据应用产品?
- 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧
- 数据库原理及应用(六)——视图和子查询
- Flink Table Store 典型应用场景
- 场景Redis数据类型及应用场景分析(redis类型应用)
- 单碱基编辑首次应用于非人灵长类模型
- 2014 GPU技术大会上关于Linux的嵌入式技术和应用
- 多图:开发者文档揭示 Android Auto 第三方应用 UI 规范
- 5G+工业互联网应用场景大集锦!
- 用Linux开发Web应用的高效技巧(linux下开发web)
- 探索Linux Lua的强大潜力:使用技巧与应用场景(linuxlua使用)
- 探究MSSQL的流水号生成方法及其应用场景(mssql流水号)
- Linux GeoIP技术简介及应用场景介绍(linuxgeoip)
- MySQL 嵌入式 SQL 的特点和应用场景分析(mysql嵌入式sql)
- Linux:多场景应用的开源操作系统(linux的用途)
- 探索 Linux 在腾讯的应用:25 字看懂腾讯的 Linux 技术方案(linux腾讯)
- 「5G+工业互联网」建设再提速,第一批重点行业和应用场景重磅发布
- Mongodb:增强应用效率的新时代数据库(mongodb 应用场景)
- 基于BS构架的MySQL数据库应用(bs构架 mysql)
- 强大的Redis助力企业数据快速存取(数据库redis应用场景)
- 实时应用场景下考虑使用Redis(什么情况考虑用redis)
- MySQL数据库的应用场景简介(mysql一般用来干嘛)
- MySQL独立于特定集合,可适用于多种应用场景(mysql不属于某个集合)
- 利用Redis集群实现分布式存储的研究(关于redis集群应用)
- 使用Redis源代码构建高性能应用(使用redis源代码)
- MySQL非整数字段及其应用(mysql 不是整数)
- Redis集群哨兵配置最佳实践与应用(redis集群 哨兵配置)
- 解放双手Redis开启新的应用场景(redis适用领域)
- Oracle SID标识符理解和应用(oracle sid表示)
- 谈谈网页设计中的字体应用FontSet