问题
1. 同步实时性:数据在DB更新后需多久才更新到Elasticsearch,多久的时间是应用系统可以接受范围,一般需要控制在1s以内,如果是分钟以上,属于离线同步。
2.数据一致性,数据频繁在DB变更修改,更新到ES后如何保证数据与DB一致,在容许的时间范围内应用系统查询的数据有效可接受的,如果变更出现覆盖等,那数据是无效的,应用系统是不可接受的,如何修复。
同步模式
1.推送Push模式,数据源主动将变更数据推送到目标源,如RabbitMQ,服务端会主动MQ发送到客户端。
2. 拉取Pull模式,目标源定时去数据源拉取变更数据,如Mysql数据库的数据主从同步,Slave会去Master拉取变更数据。
3. 推拉结合,数据源与目标源之间,既有推送方式也有拉取方式,此种模式一般会借助于中间媒介实现,如基于Kafka的游戏日志应用,数据源(采集端)会将日志数据发送到Kafka集群,目标源会定期的从Kafka拉取数据更新。
技术方案
1. 同步双写,更新DB时同步更新ES。此技术方案最简单,附带问题最多,数据冲突,数据覆盖,数据丢失,处处是坑,谨慎选择。
2. 异步双写,更新DB之后,记录一条MQ,MQ通知消费端,消费端反向查询DB数据,最后更新到ES。此技术方案与业务系统耦合严重,需要每个业务专门编写相关程序,不利于快速响应需求。
3. CDC,全称Change Data Capt