随着业务的发展,公司的整体架构方向向微服务演进。随之衍生出各种问题,本文主要提供的是数据库隔离(分库)之后的跨库join问题一种解决方案。
起因:
商品服务的抽离,表结构细化;导致各依赖模块出现了各种跨库join问题。在某些复杂的业务场景下,基于原表(未分库前的商品信息)的一次join操作,在新的表结构下需要做多次跨库join。基于此场景,最终确定了技术方案:
-
对于简单的跨库join操作,使用服务层代码进行数据组装的方式,通过服务调用 + 数据库in查询的方式解决。
-
对于复杂的业务操作,使用数据异构同步的方式,将细化后的商品信息同步、聚合到依赖模块的库中,以满足复杂业务的需求。
本文主要介绍一种基于alibaba-canal的数据异构同步的解决方案。
技术清单:
- Mysql – 数据库
- Canal– alibaba开源的数据库日志监听中间件
- Zookeeper – canal高可用的依赖
- RocketMQ – 消息服务