搜索引擎中数据同步系统性能优化之路

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 由于历史原因,当前系统采取定时全量数据同步方式,随着业务的发展,同步一次数据需要长达8个小时,业务上已无法忍受。本着对现有业务影响最小、缩短同步时间为原则,开始了对老系统大刀阔斧改造之旅。

1. 背景

搜索引擎是电商平台成交链路的核心环节,搜索引擎中的数据全部同步自各个业务系统。随着业务的发展,对接的系统逐渐增多,需要同步的数据量也日益庞大。现有同步系统采用定时全量同步的方式,同步一次数据需要8个小时的时间,已完全无法满足业务的需要。

数据同步作为搜索引擎的重要组成部分,有以下几个突出特点:

  • 数据体量大:对接十几个上游系统,商品数量数百万
  • 增量消息多:日常业务上下架频繁
  • 实时性要求高:业务方通常需要新上架的商品能被尽快检索到

鉴于上述主要特点,本文详细介绍数据同步的改造方案。

2. 数据同步整体架构

正式介绍改造方案之间,需要对现有数据同步的整个架构有一个大致的了解。

2.1 数据同步体系运行流程

image.png

搜索引擎对接了十几个业务系统,不同业务系统的表结构、数量差异巨大。为了方便对接,屏蔽不同业务系统之间的差异,每个业务方创建一个视图,同步程序从视图中读取数据,进行相关数据处理之后,写入Elasticsearch集群。


在Elasticsearch集群中,同一个索引,会同时存在A库和B库。在同一时间,A库和B库中只有一个对外提供搜索服务,另一个库用于数据同步。在数据同步开始时,会先删除当前库中的数据,然后开始从视图中分批次读取数据,数据同步完成后通知前端程序切换数据库,进而可以搜到新同步的数据。因此,随着定时全量同步,A库和B库周期性地对调角色。

2.2 团队构成

搜索的运维体系,是一个相当复杂的构成,其中涉及很多团队的鼎力协作。

首先由各业务方提供底层源数据的支撑,然后搜索平台开发团队负责从源数据读取数据,并进行相关处理,写入Elasticsearch集群中。最后搜索引擎团队负责AB库周期切换,并对外提供搜索服务,供不同业务方调用。

3 治理方案

3.1 方案选择

当前的数据同步方案,缺点非常明显,没有扩展性,数据更新的延迟也比较高,占用多一倍的存储空间。最佳的数据同步方案是首次全量同步加增量更新的方式,实时性高,可以满足高并发场景的需求。


从MySQL数据库增量同步数据,需要解析MySQL的binglog,而MySQL中的视图是一种虚拟表,并没有binlog,因此无法通过视图直接增量更新。


一种改造比较彻底的方案是,各业务系统重新建立一张表,通过解析binlog来实现增量同步。这种方案有以下缺点:

  • 所有业务方都需适配改造,不符合解耦的原则
  • 部分业务上线时间长,重新梳理业务逻辑,需要花费较长的开发、测试时间,工作量较大

上述方案工作量大,改造时间长,为了适应线上业务的需求,还需要寻求更折中的方案。

通过分析整个同步流程时间开销,我们发现从视图读取数据耗时占了40%以上,同时在一个同步周期内,以串行的方式从各个视图同步数据,因此耗时较长的环节是优化的重点。

3.2 建立同步中间表

每个视图中都包含上百万条数据,一次读取全部数据,会带来比较大的网络和内存的开销,失败的风险较高,因此当前采取分批读取的方式。

分批次读取本质上是一种深翻页的操作,而且根据视图的原理,每次读取视图,都会重新计算关联表中的数据,这更进一步增加了数据库的压力。

为了缓解数据库的压力,编写MySQL存储过程,从视图读取全量数据,写入中间表。在同步开始时,同步程序调用存储过程生成中间表,然后从中间表读取数据。虽然深翻页的操作仍然存在,但避免了分批次读取时生成虚拟表的开销。

3.3 并行同步

串行改并行是性能优化中常用的手段。通过多线程的方式并行读取中间表的数据,并行写入Elasticsearch集群中。相应地,Elasticsearch集群的写入性能也要做出优化,例如调整refresh间隔,在此不再赘述。

3.4 应急预案

任何时候发现线上问题,首先需要快速止血,避免问题的扩大。建立同步工具,当数据同步出现故障导致数据更新不及时或者AB库逻辑错乱时,快速人工介入,手动启用同步工具,短时间内同步重点业务的数据,第一时间恢复线上业务运行。

4. 总结展望

本文主要介绍了数据同步系统改造的方案,主要从工作量、业务满足度、团队协调的复杂度来出发,制定合适的方案。通常情况下,最完美的方案,并不是最好的解决方案。在方案落地过程中,会面临各种因素的制约,好的方案往往是妥协的方案。


上述方案落地后,数据同步时间从原来的8个小时缩短至1个小时,业务方感受明显。进步的空间还很大,系统优化永远在路上。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
canal 消息中间件 关系型数据库
系统重构数据同步利器之Canal实战篇
系统重构数据同步利器之Canal实战篇
642 1
|
4月前
|
运维 DataWorks 安全
DataWorks产品使用合集之在进行数据同步时,如何处理源系统表名不固定的情况
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
算法 Linux
Linux系统【文件传输】rsync命令 – 远程数据同步工具
rsync命令来自于英文词组“remote sync”的缩写,其功能是用于远程数据同步。rsync命令能够基于网络(含局域网和互联网)快速的实现多台主机间的文件同步工作,并与scp或ftp发送完整文件不同,rsync有独立的文件内容差异算法,会在传送前对两个文件进行比较,只传送两者内容间的差异部分,因此速度更快。
206 2
|
关系型数据库 MySQL 数据库
数据同步系统
数据同步系统
146 2
|
canal 存储 SQL
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-数据同步 DTS 篇
前言 前文架构篇,可以看到 MySQL + Tablestore 非常适合大规模订单系统这一类需求场景。那么,我们首先要做的是,利用 CDC(Change Data Capture) 技术将订单数据实时从 MySQL 同步到 Tablestore 中。对于订单系统的数据同步,我们需要关注同步的稳定性、实时性。目前,存在多款工具可以实现这一功能,他们有的是开源工具如 Canal,有的是阿里云端服务如
1094 0
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-数据同步 DTS 篇
|
canal NoSQL 关系型数据库
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-数据同步 Canal 篇
前言 在基于 MySQL + Tablestore 分层存储架构的大规模订单系统中,利用 CDC 技术将 MySQL 数据同步到 Tablestore 是不可缺少的一步。前文已经详细讲述了如何使用 DTS 向 Tablestore 同步数据。对于中小规模的数据库,或者个人开发者,还可以使用 Canal 从 MySQL 向 Tablestore 同步数据。Canal 部署简单,易于运维,且相比于 D
728 0
基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-数据同步 Canal 篇
|
关系型数据库 MySQL API
新老系统数据同步方案
新老系统朴素数据同步方案
1196 0
|
NoSQL 搜索推荐 Java
Solr(搜索引擎服务)和MongoDB通过mongodb-connector进行数据同步的解决方案,以及遇到的各种坑的总结(针对solr-5.3.x版本),mongodb和solr实现实时增量索引
Solr配置与MongoDB的安装      Solr安装配置到目前已经非常简单,参考官方文档:http://lucene.apache.org/solr/quickstart.html,官方文档中用的是cloud这个样例(-e 指定),最后,我采用的是techproducts,基本命令如下: 注意:如果unzip没有安装,请先安装:apt-get install unzip   r
3780 0
|
测试技术
POS门店数据同步-系统建模(1)
一个项目的开始先有需求,这个需求不管是直接客户提出还是由上级提出。 对应到rose里面就是用例图。 用例图分为use-case(用例也叫系统用例)和Business Use-Case(业务用例) 这两者的区别,简单的来说 业务用例和系统用例是分别站在客户的业务视角和系统建设视角来规划的。
701 0
|
测试技术
POS门店数据同步-系统建模(2)
我们可以用用例图可客户打交道,可以确认是否是用户所需要的, 接下来我们需要做更详细的设计。 可能会用到 活动图(Activity Diagram)     : 可以清楚的表述动作的流程,流向 序列图(Sequence Diagram)  : 详细的动作过程顺序设计 交互图(Collboration Diagram) : 各个动作直接的交互 序列图和交互图是可以互为转换(没有测试过),只是表现出来的角度不一样,比如交互图可以看到各个过程直接的关系。
715 0

热门文章

最新文章