solr索引第七篇:索引库同步分析

问题描述:运营商系统调用了商品服务,对商品做了以下操作:
1.添加:在数据库中新添加(入库)商品数据;索引库数据添加;
2.修改:索引库数据更新;
3.删除:索引库数据删除;

运营商系统只能操作数据库数据,对数据库数据做了修改,添加,删除操作,但是索引库数据没有发生改变,造成索引库的数据和数据库的数据不一致。

解决方案:
1)商品服务调用搜索服务,实现索引库的同步:
不行,
服务层不能调用服务层;

2)商品服务添加,修改,删除,把相关商品的数据返回给运营商系统(服务消费者),由服务消费者调用搜索服务实现同步:
不采用;
缺点:
表现层只负责业务的分发,不负责业务处理;
表现层对事务无法无法进行控制;
不满足开发业务的规范;

3)开启副线程模式同步索引库(并发量较小)

副线程用例.png

用户请求,主线程开发一个发短信的副线程:
副线程在后台进行发短信的任务,副线程执行这个任务可能需要耗费1s时间;
主线程直接返回结果给用户了,耗时可以忽略不记;
其实后台程序还在执行,如果处理失败了,就执行事务回滚。

4)mq消息中间件模式同步索引库(并发量较大)
mq和副线程的作用一样的;
本案例中,mq就是主线程,副线程就是一个个微服务;

消息同步框架.png

如何同步?
1⃣️商品服务添加,删除,修改, 向mq消息服务器发送一条消息;
2⃣️ mq收到消息,即刻ack回应,表示收到了消息,然后调用搜索服务,同步索引库。

这种实现,可能会出现的问题:
mysql数据库中数据改变了发送消息,mq接收到消息就会回应,之后就没有回应了,如果后续流程失败了, 消息发送者也不知道啊;

同步索引库业务分析

同步索引库业务分析.png

你可能感兴趣的:(solr索引第七篇:索引库同步分析)