Binlog的三个业务应用场景

1.什么是binlog

  binlog是mysql的一种二进制日志文件,用来记录数据的变化。mysql使用binlog进行主从复制,如图:mysql

  1. 客户端向master的mysql sever写入数据
  2. 当数据发生变化时,master将变动的数据记录写入到二进制文件中,即binlog。
  3. slave订阅了master的binlog,因此会经过一个I/O THREAD与master的DUMP THREAD进行通讯,同步binlog
  4. I/O THREAD读取到binlog后会吸入到relay log中,准备重放。
  5. slave会经过SQL THREAD读取relay log,重放数据的改动并执行相应的改动。

这里有几点须要注意:sql

  1. 主从复制不是强一致性,只能保证最终一致
  2. master配合binlog复制会影响性能,因此尽可能不要在master上挂太多的slave,若是对时间要求不高,能够在slave上挂slave

2.binlog的业务应用

  上面介绍了mysql中应用binlog的场景,而咱们的业务能够假装成master的slave节点,感知数据的变化,这就给了咱们不少的业务运用空间。数据库

2.1 数据异构

  常常有这样一个场景:缓存

  原来业务是一个很单一的系统,因此表也在一块儿。随着业务的发展,系统开始拆分,总有一些表是各个业务都关注的表,可是对相关的字段的运用场景不一样,因此这样一份元数据怎样更好的为各个系统服务就成了问题。固然,多写或者读写分离能够从物理节点上减小对数据服务器的压力,可是对业务并无作到足够的支持,由于这些表都是同样的。所以咱们能够经过binlog进行数据异构。服务器

如图所示,订单系统生成订单后,经过binlog能够解析生成用户维度的订单信息供用户中心查询、商户维度订单表供运营管理,以及搜索系统的搜索数据,提供全文搜索功能。并发

这样,咱们就经过原始的订单数据异构到三个系统中,提供了丰富的数据访问功能。不只从节点上下降了数据服务器的压力,数据表现形式也更贴近本身的服务,减小没必要要的字段冗余。高并发

2.2 缓存数据的补充

对于高并发的系统,数据库每每是系统性能的瓶颈,毕竟IO响应速度是远远小于电子的运算速度的。所以,不少查询类服务都会在CPU与数据库之间加上一层缓存。即现从缓存获取,命中后直接返回,不然从DB中获取并存入缓存后返回。而若是原始数据变化了但缓存还没有超时,则缓存中的数据就是过期的数据了。当数据有变动的时候主动修改缓存数据。性能

当客户端更改了数据以后,中间件系统经过binlog得到数据变动,并同步到缓存中。这样就保证了缓存中数据有效性,减小了对数据库的调用,从而提升总体性能。日志

2.3 基于数据的任务分发

有这样一个场景:中间件

  不少系统依赖同一块重要数据,当这些数据发生变化的时候,须要调用其余相关系统的通知接口同步数据变化,或者mq消息告知变化并等待其主动同步。这两种状况都对原始系统形成了侵入,原始系统改一块数据,并不想作这么多其余的事情。因此这时候能够经过binlog进行任务分发。

当原始业务系统修改数据后,不须要进行其余的业务关联。由调度系统读取binlog进行相应的任务分发、消息发送以及同步其余业务状态。这样能够将其余业务与原始业务系统解耦,并从数据的角度将全部管理功能放在了同一个调度系统中,责任清晰。

3.总结

  binlog是mysql提供的数据同步机制,很好的解决了主从分离、读写库分离等业务。而咱们能够构建一个中间件系统,“伪造”成master的一个slave。当读取了binlog中的数据变化后,根据相应的业务场景作各类业务处理。而目前我接触到的最多见的就是第一个场景——数据异构,能够异构到其余表中,也能够异构到其余数据引擎中,好比Elastic Search。

相关文章
相关标签/搜索