首页 » Web前端 » 异构php技巧_缓存一致性和跨做事器查询的数据异构解决筹划canal

异构php技巧_缓存一致性和跨做事器查询的数据异构解决筹划canal

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

分表对抗上层的高并发。


逼逼逼起来随意马虎,做起来并不那么乐不雅观,由此引入的问题,不见得你有好的办理方案,下面就详细分享下。

一:尽可能的利用Cache

比如在我们的千人千面系统中,会针对商品,订单等维度为某一个商家店铺自动化建立大约400个数据模型,然后买家在淘宝下订单之后,淘宝会将订单推

异构php技巧_缓存一致性和跨做事器查询的数据异构解决筹划canal

送过来,订单会在400个模型中兜一圈,从而推送更贴切符合该买家行为习气的短信和邮件,这是一个真实的业务场景,为了应对高并发,这些模型自然都是缓

异构php技巧_缓存一致性和跨做事器查询的数据异构解决筹划canal
(图片来自网络侵删)

存在Cache中,模型都是从db中灌到redis的,那如果有新的模型进来了,我如何关照redis进行缓存更新呢???常日的做法便是在添加模型的时候,顺便更新

redis。


对吧,如下图:

说的大略,web开拓的程序员会说,麻蛋的,我管你什么业务,更新你妹啊。


我把自己的手头代码写好就可以了,我要高内聚,以是你必须碰一鼻子灰。

除了一鼻子灰之后,大概你还会碰着更新database成功,再更新redis的时候失落败,可人家不管,而且缺点日志还是别人的日志系统里面,以是你很难乃至

无法担保这个db和cache的缓存同等性,那这个时候能不能换个思路,我直接写个程序订阅database的binlog,从binlog等分析出模型数据的CURD操作,根

据这些CURD的实际情形更新Redis的缓存数据,第一个可以实现和web的解耦,第二个实现了高度的缓存同等性,以是新的架构是这样的。

上面这张图,相信大家都能看得懂,重点便是这个处理binlog程序,从binlog等分析出CURD从而更新Redis,实在这个binlog程序便是本篇所说的canal。


一个伪装成mysql的slave,不断的通过dump命令从mysql中盗出binlog日志,从而完美的实现了这个需求。

二:数据异构

本篇开头也说到了,数据量大了之后,一定会存在分库分表,乃至database都要分散到多台做事器上,现在的电商项目,都是业务赶着技能跑。


谁也不知道下一个业务会是一个若何的奇葩,以是一定会导致你要做一些跨做事器join查询,你以为自己很聪明,实在DBA早就把跨做事器查询的函数给你

关掉了,求爹爹拜奶奶都不会给你开的,除非你杀一个DBA祭天,不过如果你的业务真的很主要,可能DBA会给你做数据异构,所谓的数据异构,那便是

将须要join查询的多表按照某一个维度又聚合在一个DB中。
让你去查询。




那如果用canal来订阅binlog,就可以改造成下面这种架构。

三:搭建一览

好了,canal的运用处景给大家也先容到了,最紧张是理解这种思想,人家搞不定的东西,你的代价就出来了。

1. 开启mysql的binlog功能

开启binlog,并且将binlog的格式改为Row,这样就可以获取到CURD的二进制内容,windows上的路径为:C:\Program Files\MySQL\MySQL Server 5.7

\my.ini。

2. 验证binlog是否开启

利用命令验证,并且开启binlog的过期韶光为30天,默认情形下binlog是不过期的,这就导致你的磁盘可能会爆满,直到挂掉。

3. 给canal做事器分配一个mysql的账号权限,方便canal去偷binlog日志。

4. 下载canal

github的地址: https://github.com/alibaba/canal/releases

5. 然后便是各种解压的命令

6. canal 和 instance 配置文件

canal的模式是这样的,一个canal里面可能会有多个instance,也就说一个instance可以监控一个mysql实例,多个instance也就可以对应多台做事器

的mysql实例。
也便是一个canal就可以监控分库分表下的多机器mysql。

《1》 canal.properties

它是全局性的canal做事器配置,详细如下,这里面的参数涉及到方方面面。

由于是全局性的配置,以是上面三处标红的地方要把稳一下:

canal.port= 11111       当前canal的做事器端口号

canal.destinations= example     当前默认开启了一个名为example的instance实例,如果想开多个instance,用\"大众,\"大众逗号隔开就可以了。


canal.instance.filter.regex = .\\..   mysql实例下的所有db的所有表都在监控范围内。

《2》 instance.properties

这个便是详细的某个instances实例的配置,未涉及到的配置都会从canal.properties上继续。

上面标红的地方把稳下就好了,去偷binlog的时候,须要知道的mysql地址和用户名,密码。

7. 开启canal

大家要记得把/canal/bin 目录配置到 /etc/profile 的 Path中,方便快速开启,通过下图你会看到11111端口已经在centos上开启了。

8. Java Client 代码

canal driver 须要在maven仓库中获取一下:http://www.mvnrepository.com/artifact/com.alibaba.otter/canal.client/1.0.24,不过依赖还是蛮多的。

9. 启动java代码进行验证

下面的代码对table的CURD都做了一个基本的判断,看看是不是能够智能感知,然后可以根据实际情形进行redis的更新操作。


<1> Update操作

<2> Insert操作

<3> Delete 操作

从结果中看,没毛病,有图有原形,好了,本篇就说到这里,对付开拓的你,肯定是有帮助的~~~

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读0 评论0