00:00
各位同学大家好,我们继续接下来将给大家介绍第四章red与MYSQL数据双写一致性的工程落地案例。那么第三章,第四章我们前面介绍过,上下级姊妹篇上我们已经完成了更新策略的探讨,大家有了解了先动red还是先动MYSQL,他们之间的关系会对我们系统有哪些复杂而深刻的影响,那么理论完成以后,接下来工程落地那杨哥。听你讲完以后,拿着你的脑图笔记和工程案例代码,明儿早上就去生产上去用行不行?能不能给我一个落地的案例?杨哥,你这瓜包熟吗?没问题,跟着来,那么接下来我们来看一下如果我们真的破产一些实际案例的情况,我MYSQ动了,我要求实时立刻的更新到ready,我们上面探讨的是纯技术,那么假设有没有一种更好的中间件来帮助我们完成这些苦恼,解决我们些痛点呢?那么答案是OK的。好,那么接下来请同学们跟着杨哥来继续完成我们的下篇动手落地案例。
01:15
首先简单的来做一个复习和回顾。我们呢?得到的结论,先更新我们的MYQ,再动我们的register,这个顺序最好不要错,因为两害相衡取其轻。我先更新了MY,你读到的最多是读到一点旧数据,了不起,我请你再查一次,诶,就告诉你还没更新完,你再查一次哦,好了,那么现在就以最新数据为准,王火,但是如果你先去动red,本来我反问这red是有的,你先把red里面的key给。干掉了,这个key突然消失了,我right找不到,我是不是马上干到MYSQL,那么这样是不是多线程高频发下面这种请求集火了以后容易打满打爆我们的SQOK,所以从顺序上。
02:07
建议先动MYSQL,再动ready,这是第一步。第二步我们所谓的动主要是三大写操作,增删改,只要你这个MYSQL先更新了,那么我们这个red,我希望呢能够跟你保持一致,那么如果我们从程序开发的角度,一般是这样的一种思路。尝试呢?使用双减加锁机制锁住我们的MYSQL,尽量避免高频发多线程的请求打爆QL,那么只按一个请求回写我们的完成数据一致性,大家还记不记得这个?双减加锁机制,请复习一分钟复习一下啊,先去查,那么在think加锁之前查一次啊,加锁之后查一次啊,真的没有了,我们再去找我们的MYSQL,降低MYSQL被打爆的这个概率,而且第一个SYNCH加锁进来这个请求线程。
03:06
回写了我们的re以后,尽管后面的请求过来了,他呢,从re里面可以查到了,就不会再走这段代码,不会再去找马克的麻烦,OK,好,那么这个呢,前面讲过,快快的复习,那接下来我们的问题就来了,面试提问。我想买SQL,有记录改动了,就是有增删改三大写操作,我想立刻同步反应到register,做一种实时的及时处理的更新,你有没有做过?第二个问题。只要MYSQL一动,Ready收到,马上跟着操作,你怎么知道MYSQL有改动?这个监听程序靠什么?那么请同学们思考一下,那么感谢各位同学的回复啊,那么回答的不是特别好。记住。一般写MYSQL监听要对MYSQL的改动做出对应的部署,我们之前讲过一个非常非常重要的案例,大家在跟着杨哥学MYSQL高级的时候,我是不是讲过一个案例叫MYSQL的主从复制啊,这个时候我们是不是说过一个非常重要的MYSQL二进制文件叫b logg呀,只要MYSQL的任何改动都会自己有一份底单日志啊记录下来,那么我去读这个blog日志啊,他做了什么操作,原模原样的照葫芦画瓢移植到ready,那么这样是不是可以完成我们的第三个这个面试提问了,OK。
04:31
这个面试题一句话,MYSQL有写操作,有增量的变更。能够被某种。技术捕捉到、监控到,且能够通知我们的RA做出相应的原模原样的修改,以达到两边的数据一致性和数据的平衡。那么下面我们的问题。一原理,如何知道MYSQL有没有改动过?前面复习过并lock日志动过,就能够知道MYSQL有变更,那么这个问题就会变成我们现在需要有一种技术,这个技术方案呢?能够监听到MYSQL的变动,且能够通知给register。换句话说,它能够横跨MYQ和red。
05:31
类似一个中介。既是监控者,也是推哨人,那么请问这样的一种技术方案该如何提供?市面上有没有一种成熟的解决方案呢?我相信MYSQL的数据有变更,Ready随之对应的追加,这样的诉求应该是大多数公司都需要面对和具备的,所以非常高兴的通知大家,我们将要接触一个新的。
06:00
由阿里巴巴开源的中间键也记我们的开好,那么同学们老他所能做的事就是监听监控我们的埋色并落个日志,这边有感动了。第一时间能够通知给我们的register做对应功能的追加,OK,这个就是看它出现的目的和意义。那么接下来回到老图,我们来看一下老规矩是什么。能干什么?解决了我们什么痛点?去哪下凡技术必登官网OK,好,那么同学们,接下来我们就来看一眼体开是什么?来官网地址说话。那这个时候呢,我们呢,找到我们对应的,看到它对应的官网。
07:02
好,那么get的话呢,稍微打开的慢一点点,费老劲了,终于打开了啊,特别慢啊,现在反问giub,那么大家请看一下getup阿里巴巴开,那么这是它的仓库主页,一般而言哈,我们来看vki。然后最经典的一般这些开源的中间键最右边它有个about,就是对这种组件一句话的描述。这是同学们。学习这个组件找到的第一个抓手,好,那么下面我们来lo can到呢?翻译为水道、管道、渠、沟渠、运河的意思,那么说白了,结合我们这张图,是不是就是两边的一个桥梁对吧?它的主要用途呢?是用于MYSQL数据库增量日志数据的订阅、消费和解析,是阿里巴巴开发并开源采用Java开发的一个中间件,那么它的形成历史呢?是当年阿里呢?是杭州和美国双机房部署,存在着跨机房数据的什么同步业务诉求?
08:09
那不用多说了,基于业务的触发器缺改获取增量,那么从一零年开始,那么也就是说基本上是十多年前的老技术了,很成熟了啊。那么采取呢?解析数据库的日志,获取增量变更并进行同步,同步给谁可以是red对吧,甚至是have或者search,由此就诞生了我们的can这个项目,好,那同学们lawyer。回到我们的官网啊。对应的。介绍就是这堆,那么来它一句话就是用于数据库的增量日志解析,提供增量的数据消费和订阅,那么能解决一些什么问题呢?什么数据库的镜像,数据库的实时备份,巴拉巴拉不说了,都在这,我就不在照本宣科,我们下面来看看他这张官网的图,那么来,同学们。
09:07
这是个MYSQL,这是个MYSQL,以前我们在学MYSQL高级的时候没有说过can还用不到,因为MYSQL天生是不是支持一种东西叫主从复制啊。最小的公司啊,你也不可能是买CQ的单机吧,那一台机器挂了,这不整个系统都瘫了,那你这个高可用也太差劲了吧,最最最最最小的。一种文件的策略,那是不是应该易主易投对吧?MYSQL主从复制啊,那么好,基于此,下面请看T呢,现在呢。在原有思路上的借鉴做了进一步的加强,请看master它这什么I'slave那是不是就主从?他的意思就是我my master MySQL,这是主机,这有个b log二进制是制,下面可以介绍它的工作原理了,盯着这个,只要你买上变动了,我伪装并模拟。
10:07
告诉MYSQL,我就是你的同机,你这的变动授权打开给我反问,那么开了就知道了,MYSQL做了什么操作,有点像我们的。Red,前面讲过的A,你做了一些什么样的SQL脚本的操作,我这记录下来通知给我的接收方,可以由can通知给另外一台MYQ卡夫卡,Search h base rockie MQ、帕卡,包括今天我们现在要介绍的OK,那么所以说他这样。解决和搞定的问题,是不是既可以充当数据库的镜像,也能给数据库做备份,因为你数据库做了什么,我看了,监控了以后,我可以把它写到另外一个数据源里面,甚至写到第二台数据库里面,那么这个时候是不是就是一个中间的监控者?OK,我们前面说过,它既是。
11:02
监听者更是吹哨人,两边能够协调,我相信这个问题不难理解,OK,所以他能够给我们搞定这些事儿,在一个数据员之间充当一个桥梁的作用,完成对客户端的一个备份和处理好。那么去哪下呢?老规矩。这个下面是它的一个主页介绍,同学们务必学会,这是主页概览,第二个就找wiki OK,第三一个就是下载,那么基本上release就是发行版本,那么来同学们,我们点开lower,基本上啊。来已经是开1.1.7阿尔法,那么这个是什么?预先尝线的一个发布版本,对吧,并不是最主流的,所以说同学们我们需要选一个稳定版,1.1.6 OK,那么来吧。点开进去就告诉你这个版本的功能优化解决了哪些bug啊,它还是比较稳健和比较新的一个版本,那么自然而然后续我们就从这个as资产这儿可以下载我们开相关的源码包。
12:13
工具包进行对应的开发,那么同学们先讨论一下。就你目前盲猜,你觉得哪一个会是跟我们?开发人员相关的工具包,OK,好,那么同学们,这个就是can的简介。它去哪下,对应解决了哪些问题?上一讲给大家大概介绍一下channel是什么,能干些什么,去哪下载,对吧,有个大致的了解,那么接下来面试中呢,他经常会问。MySQL register如何做到缓存双写一致性?会有哪些问题?你们的更新策略是什么?那么在你实际的落地的案例当中,你有没有用过开?如果用过的话了,不了解它的工作原理。所以。
13:04
外面大厂考什么,我们就学什么,进行针对性的训练。来,同学们。开的工作原理,我们先来了解一下传统的买主从复制的工作原理,把这个搞懂了,马上你就明白开是如何运作的了,它到底地参是咋干的。那么来。我们先复习我们的myq myq master slave,一主一从主从复制,这是主库,只要对特嵌记了,我们说过MYQ自身带这个bary log二进制件。这边的话,Silver跟他达成同步协议以后,这边就有一个IO线程,你把它理解为监控线程。这是学霸,这是学渣,只要学霸动笔写作业了,学渣马上就照着抄,然后的话呢,立刻读取,并同样的操作在自己的从句上来一份,就这么简单OK,好,所以它的步骤大概是这样的,我们同学们稍微的复习一下啊,这个我们之前讲过,那么来逐级数据改变。
14:13
放到这第一步,第二步一定时间间隔以内,要对master做一下二进制日志的探测和扫描。看看它有没有发生过改变。那么下面我的问题就来了,他怎么知道发生过改变?那么同学们别忘了,我们是不是说过一个东西,Offset偏移量,OK,如果说发现啊这个。改变了,偏移量已经增加了,那么开启一个IO线程请求马索的二进日志事件,同时主机的话会为每个IO线程启动一个damp,就是请damp的是请请到注射啊这么一个一个意思就是一个显线程,那么用于向其发送二进制时间的日志,我告诉你我做了哪些改变13。
15:04
是改是删除,那么内从服务器将介绍到的二进制事件保存到自己本地的中继日志,OK,然后这。人类log是同计的啊,这个是两回事啊,一个是这个,一个是这个,然后呢,他就从这儿在读过来,本地重新写一遍U点内存的a off,那使得我们的数据和主机保持一致,OK,大致就这么个意思,那么在官网上人家呢也给你呢做了一个简单的描述,那么基于此开呢,阿里的这波工程师呢,也就参考马SQ的特性,重新封装了一套,做了一些优化和改进,那么呢。化繁为简,三步拿下,参考MYSQL主从复制的原理,那么开呢,也是这么干的。来。他呢?用开模拟MYSQ的slave交互协议,哎,假装我就是个MYSQ的同机MYSQL主机,你可以完全信任我,你的冲击日志开放给我,我照着抄,OK,伪装自己成为马克,向马克master发送大协议,第二个呢,Master收到这个以后,诶,有个同击,他误以为这个也是个MYSQ的。
16:22
要向我申请开放,然后呢,我同意了,我就把我的变更。以baary log的形式给我们的slave,也就是我们现在看到,我们看到解析这个byary log日志以后,也就以自己流的形式,OK,我明白了,你买色条变更了哪一些东东,那么。收集到了以后,传递给我们后面的接收方,哎,是不是有点。类似于我们MQ消息中间键啊,对吧,只不过。MQ收的是message,它收的是事件和日志的变更,OK,好,那么同学们,这个就是我们看到的工作原理,那么请同学们务必还是准备一下,面试的时候能说就行了,OK,那么接下来二话不说,动手。
我来说两句