场景:
在使用微服务架构的过程中遇到了一下几个问题:
1、为了避免关联查询影响查询速度而做的不同业务域表之间的数据冗余如何同步?
2、缓存中心redis,搜索中心elestic search中的数据如何与数据库保持同步?
3、上游系统数据变化需要发送Mq消息,下游系统监听做相应的业务逻辑处理。
这几个问题的本质都是数据同步,即一方的数据变化需要通知另一方。
原始解决方案:
我们原来的解决方案是如果需要通知下游就在业务代码里发送消息到消息队列,下游监听消息后再做处理:修改冗余字段、更新redis或Es、业务逻辑处理。
带来的问题:
1、需要写大量的额外代码来发送MQ消息,增加工作量
2、不同的操作修改同一个字段每一个都要发送消息,重构时容易遗漏或出错。
3、业务代码与数据同步代码耦合,影响代码质量,维护不方便。
优化:
不论做什么业务操作最终都是落地到数据库上,可以将对数据变化的捕捉下沉到数据库层面通过监听数据库binlog实现。之前实验过阿里的canal,但是这个产品比较原始,用起来不太方便,需要自己做很多代码封装,恰好出现了它的升级版cloudcanal。
具体产品介绍和安装网上已经有了比较详细的介绍可以参考下面的链接: