业务场景
在我们的应用场景中经常有这样的需要,通过模糊搜索来搜索想要的数据,当我们数量小的时候,我们完全可以利用数据库的like帮我实现这个功能,但当数据量越来越大时,我们会发现数据库的响应速度越来越慢,甚至一个like语句可以查挂整个应用。
架构设计
我厂利用了搜索引擎来避免数据库的like查询,架构图如下:
原理很简单,解析mysql的binlog日志,然后实时同步到es中,如果我们自己解析binlog,那真是一个不小的工作量,而且我们也不必要自己造轮子,阿里开源的项目canal正好符合我们的需求。
详细canal的资料大家可以访问canal wiki
web app是一个服务,采用了生产者、消费者和阻塞队列的模型来处理,如果数据量非常大,可以引入消息队列,