您当前的位置: 首页 >  搜索

杨林伟

暂无认证

  • 2浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

微服务轮子项目(11) - 实时搜索系统设计

杨林伟 发布时间:2020-12-16 09:19:45 ,浏览量:2

文章目录
    • 1.引言
    • 2. 架构
      • 2.1 海量请求和秒级响应
      • 2.2 实时增量同步
      • 2.3 MQ
      • 2.4 Adapter
      • 2.5 搜索服务

1.引言

传统的关系型数据库在存储大数据量时需要进行分库分表,但是分库分表后又很难实现复杂查询的需求,所以这个时候就需要引入异构数据源来做OLAP的场景。

搜索系统的目标

  • 海量请求:支持亿级请求
  • 秒级响应:复杂查询秒级内出结果
  • 实时搜索:数据被修改后,能实时搜索到最新数据
2. 架构

在这里插入图片描述

2.1 海量请求和秒级响应

使用ElasticSearch来实现这个目标,是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便。关于ES的安装部署可查看 非docker安装部署

2.2 实时增量同步

阿里的开源项目Canal,就是用来解决这个问题的,Canal项目利用了MySQL数据库主从同步的原理,将Canal Server模拟成一台需要同步的从库,从而让主库将binlog日志流发送到Canal Server接口。Canal项目对binlog日志的解析进行了封装,我们可以直接得到解析后的数据,而不需要理会binlog的日志格式。而且Canal项目整合了zookeeper,整体实现了高可用,可伸缩性强;关于Canal的原理详细介绍和安装部署可查看 Canal介绍

2.3 MQ

Canal收集的binlog数据支持直接发送到MQ中目前支持RocketMQ和Kafka,用于削峰填谷,如果并发不大的情况下可以省略这一层。

2.4 Adapter

Canal提供各种Adapter组件用于binlog转换,这里利用Adapter实现消费MQ的binlog信息自动转换为索引数据存到ES中,关于Adapter的安装和用法可查看 实时同步数据到ElasticSearch,在同步之前需要先创建ES的索引。

2.5 搜索服务

es客户端的api比较复杂难懂,通过通用的搜索服务对外提供restful的API接口供业务系统使用,屏蔽底层的复杂性。

关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.0617s