1.什么是binlog

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

  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,重放数据的改动并执行相应的改动。

这里有几点需要注意:

  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。

Binlog的三个业务应用场景的更多相关文章

  1. MySQL binlog日志三种模式选择及配置

    在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog.mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在M ...

  2. JHipster生成微服务架构的应用栈(三)- 业务微服务示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

  3. Jmeter多业务混合场景如何设置各业务所占并发比例

    在进行多业务混合场景测试中,需要分配每个场景占比. 具体有两种方式: 1.多线程组方式: 2.逻辑控制器控制: 第一种: jmeter一个测试计划可以添加多个线程组,我们把不同的业务放在不同的线程组中 ...

  4. scrapy 的三个入门应用场景

    说明: 本文参照了官网的 dmoz 爬虫例子. 不过这个例子有些年头了,而 dmoz.org 的网页结构已经不同以前.所以我对xpath也相应地进行了修改. 概要: 本文提出了scrapy 的三个入门 ...

  5. mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

    mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源 ...

  6. Excel导入导出的业务进化场景及组件化的设计方案(上)

    1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...

  7. ZooKeeper的三种典型应用场景

    引言 ZooKeeper是中典型的pub/sub模式的分布式数据管理与协调框架,开发人员可以使用它进行分布式数据的发布与订阅.另外,其丰富的数据节点类型可以交叉使用,配合Watcher事件通知机制,可 ...

  8. MySQL二进制日志文件Binlog的三种格式以及对应的主从复制中三种技术

    二进制日志文件Binlog的格式主要有三种: 1.Statement:基于SQL语句级别的Binlog,每条修改数据的SQL都会保存到Binlog里面. 2.ROW:基于行级别,每一行数据的变化都会记 ...

  9. Binlog的三种模式

    binlog模式分三种(row,statement,mixed) 1.Row 日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有 ...

随机推荐

  1. C# 判断网站是否能访问或者断链

    参考网站:http://www.cnblogs.com/junny/archive/2012/10/30/2745978.html public bool CheckUrlVisit(string u ...

  2. Ajax异步提交登录(2)--登录使用

    http://cjp1989.iteye.com/blog/1740964 1.Ajax的原理: Ajax的原理就是:通过javascript的方式,将前台数据通过xmlhttp对象传递到后台,后台在 ...

  3. Effective Java 第三版——15. 使类和成员的可访问性最小化

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. Django学习日记04_模板_overview

    通过Django中的模板,使得设计人员和网站管理有一个对接的接口,实现网页设计和逻辑的分离,因此,模板会处理大量的文本解析内容,django中内部使用了高效的引擎来完成模板解析. 模板设置 在使用模板 ...

  5. CSS样式表学习

    ---恢复内容开始--- 今天学习的主要内容是样式表和选择器. 1.样式表的分类 1.内联式样式表 特点:能实现精确控制,但是范围太小.页面显示的优先级高于其他样式表 2.内嵌式样式表 特点:必须在h ...

  6. PowerShell 函数

    PowerShell 中函数是一系列 PowerShell 语句的组合.当你通过函数的名称调用函数时,函数中的语句会被顺序的执行,就像在命令行中执行它们一样. 从 hello world 开始 fun ...

  7. MySQL事务-ROLLBACK,COMMIT用法详解

    使用ROLLBACK 既然我们已经知道了什么是事务处理,下面讨论事务处理的管理中所涉及的问题. 管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退. MySQ ...

  8. android开发文章收藏

    1.activity [Android的从零单排开发日记]之入门篇(四)——Android四大组件之Activity 两分钟彻底让你明白Android Activity生命周期(图文)! 2.serv ...

  9. Python模块学习---Web

    import urlparse url = urlparse.urlparse("http://www.python.org/doc/FAQ.html") print url pr ...

  10. 魔方 NewLife.Cube

    魔方 是一个基于 ASP.NET MVC 的 用户权限管理平台,可作为各种信息管理系统的基础框架. 演示:http://cube.newlifex.com 源码 演示账号:admin/admin 源码 ...