基于canal的缓存系统

2019-04-11 22:17:00
CJL
原创
3671

背景

积累多年的系统中往往缺少事件驱动思想、与基础组件。当我们想进行异构数据同步、监听某个接口数据的时候就变得异常困难。团队之间缺少统一的事件通知机制,消息队列、接口通知等方式繁杂不统一,且团队合作难度较大。

这时候一种基于数据库的数据通知机制便是一种成本比较低的选择。我们通过数据库变化事件进行业务通知,通过代理层将消息转到消息队列、业务接口、redis缓存等,结合后续的业务代码可以很轻松的实现业务数据缓存层,也可以替代一部分api业务触发的场景,提高系统性能,实现非核心业务异步话。

架构

通过canal实现数据库的数据监听(canal可以通过伪装成从库的方式实现多个数据库的监听)

通过canal客户端实现事件的转发,将数据事件转发到MQ、Redis、文件等地方

业务代码通过消息队列监听等方式对具体事件进行处理

缓存系统实现

主要包含两部分canal客户端开发和缓存管理系统开发。canal客户端比较简单,可以根据实际需要进行一部分实现。缓存系统设计需要能够数据定义、数据源、数据刷新机制等。

数据源:数据计算方法,可以是api、数据库、redis、计算等。

数据刷新:消息队列更新、api通知更新

数据有效期:有效期更新算法(热点数据延长有效期、随机刷新、主动失效等)


代码实现

实现中



相关系统安装

mariadb安装:https://www.cnblogs.com/freelandun/p/7841640.html

主从同步配置:https://www.cnblogs.com/liaojie970/p/6198547.html

binlog需要设置为row模式,后续canal才能活动到具体数据

多源复制:https://blog.51cto.com/suifu/1830682 未成功

canal简介:https://www.cnblogs.com/scote/p/5959205.html

rabbit安装:https://blog.csdn.net/yexiaomodemo/article/details/80473411 docker更快 https://www.jianshu.com/p/14ffe0f3db94

rocketmq安装docker https://github.com/apache/rocketmq-externals/tree/master/rocketmq-docker/4.4.0

docker exec -ti rmqbroker sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer
   docker exec -ti rmqbroker sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

rocket管理界面安装 https://blog.csdn.net/jiangyu1013/article/details/82414932 http://192.168.1.110:8088/#/


canal 客户端代码:https://blog.csdn.net/hblfyla/article/details/72877760

注意:依赖

<dependency>
    <groupId>org.jetbrains</groupId>
    <artifactId>annotations</artifactId>
    <version>15.0</version>
 </dependency> 
 <dependency>
    <groupId>com.alibaba.otter</groupId>
    <artifactId>canal.client</artifactId>
    <version>1.0.25</version>
  </dependency>

canal用户需要设置权限(需要查询权限)mysql高版本会出现权限不足的情况,需要GRANT ALL

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;


发表评论
评论通过审核后显示。
流量统计