同步 MySQL 数据至 Elasticsearch/Redis/MQ 等的五种方式
在实际应用中,我们经常需要把 MySQL 的数据同步至其它数据源,也就是在对 MySQL 的数据进行了新增、修改、删除等操作后,把该数据相关的业务逻辑变更也应用到其它数据源,例如:MySQL -> Elasticsearch ,同步 ES 的索引
MySQL -> Redis ,刷新缓存
MySQL -> MQ (如 Kafka 等) ,投递消息
本文总结了五种数据同步的方式。
1. 业务层同步
由于对 MySQL 数据的操作也是在业务层完成的,所以在业务层同步操作另外的数据源也是很自然的,比较常见的做法就是在 ORM 的 hooks 钩子里编写相关同步代码。
这种方式的缺点是,当服务越来越多时,同步的部分可能会过于分散从而导致难以更新迭代,例如对 ES 索引进行不兼容迁移时就可能会牵一发而动全身。
2. 中间件同步
当应用架构演变为微服务时,各个服务里可能不再直接调用 MySQL ,而是通过一层 middle