首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新人分享系列-漫谈蘑菇街Dump系统

花名:黎云

部门:算法中心搜索组

入职时间:2016年

主要在蘑菇街搜索组开发和维护数据Dump系统

一、前言

作为一名纯宅直男,在校招之前是从来没有听过或者了解过蘑菇街的,我是在2016年蘑菇街校招内推进入蘑菇街,因为当时想的是来杭州这个美丽的城市,所以就投了蘑菇街这家公司,这是我人生拿的第一个offer。我记得当时的职位是数据平台开发工程师,来到蘑菇街后,进入了数据技术的搜索组,学生时代从来没有接触也没了解过搜索,所以开始的时候也是从零开始学习的。还记得入职第一天,搜索组的师兄就给我讲了整个搜索组的系统架构和数据流,讲完之后懵逼了(其实这很正常的,主要是有很多从来没听过的概念和名词,后面慢慢就会理解了,比如:Tesla原来不是车,而是自研的分布式服务框架),所以大家刚来蘑菇街的时候不要心慌,有疑惑或者有不懂是很正常的,每个人都会有一个适应阶段。说完了我来蘑菇街的来龙去脉,接下来讲一下我在蘑菇街做的主要事情,我在蘑菇街主要负责搜索组数据Dump系统方面的维护和开发。

二、何为Dump

Dump系统就是把数据从一个存储(比如:mysql数据),通过抽取、清洗、组装,写入到另一个存储(比如:搜索引擎或者其他存储介质),简单说Dump系统就是一个数据管道。Dump系统分为全量Dump和增量Dump两个系统,共同完成完整数据的构建。下面先讲一下什么是增量Dump,这也是我在蘑菇街接手的第一个系统。

1、增量Dump

什么是增量Dump?举个简单的例子如图1.1。假设商家修改了一个商品的价格,那么在修改之后,商家和用户当然希望在蘑菇街App搜索出来的商品价格是修改后的最新的价格,这就是增量Dump,把数据库中最新的数据同步到搜索引擎或者其他业务系统。可能有同学会疑惑商家修改了价格,那么在数据库中的价格肯定是最新的了,为什么还要经过增量Dump进入搜索引擎,直接查数据库不就好了,确实是的,当你只有几万或者几十万商品的时候,直接去查数据库确实可以查到最新的价格,但是当你的数据达到千万或者亿级别之后查数据库就会有问题了。

图1.1增量数据流

2、增量框架

前面讲了增量Dump的数据流过程以及为什么会有增量Dump,下面主要讲增量Dump的实现:增量框架。为什么要有增量框架,其实每个业务方去监听数据库最新的变化,然后将变动后的数据写入到搜索引擎也可以实现自己的业务需求。但是由于在蘑菇街有不同类型的业务线,不同的引擎实例,比如:商品,订单,用户等业务线,假如每个业务方都去监听数据库变化,然后按照引擎支持的数据格式写入到引擎,对他们来说就做了大量重复的工作,而且每个业务方都要关注下游系统的数据格式,不利于快速接入新的业务,而且对搜索引擎也不友好,不方便管理和监控,对于引擎来说,需要统一数据输入源,基于以上需求,我们就把监听数据库数据变化,数据抽取转换组装,写入引擎等步骤抽象为一个增量框架,目前增量框架的系统架构如图1.2。

图1.2增量框架

主要流程是,不同的业务方根据自己的需求监听不同的数据库表,通过公司的pegion(解析mysql binlog日志)推送到corgi(消息队列,类比kafka),增量框架按不同的业务实例和业务需求监听不同的队列。例如:当数据库中商品表商品价格有变化的时候,就会推送binlog消息到消息队列,由增量框架监听消息队列,对消息进行处理和过滤,再调用前面说到的Tesla数据组装服务组装数据,最后写入到存储介质中(搜索引擎,消息队列,Hbase)中,这就完成了一条增量数据从数据库变更到搜索引擎变更的过程,同时用户在App上搜索的结果也就是最新的了。

3、全量Dump

前面主要讲了下在Dump系统中的增量过程,包括增量数据流过程和增量框架,整个Dump系统分为全量Dump和增量Dump,下面主要讲下全量流程:全量Dump顾名思义就是数据的全量,完整的数据是由增量和全量两个数据来构成的。全量可以理解为是历史所有增量数据的累积,那为什么要有全量呢,一是因为搜索引擎会给文档建立倒排链(有兴趣的同学可以去学习下搜索引擎的索引结构),随着增量的不断累积,倒排链会越来越长,查询性能会越来越差,所以需要定时用全量数据来重新构建完整的索引来替换搜索引擎中的索引文件;二是当引擎出现故障的时候,需要一份全量索引文件来恢复引擎,下图是一个全量的过程流程图1.3:

图1.3全量Dump流程

增量的数据一是写入到搜索引擎,二是写入到Hbase累积为全量数据,通过调度现在每隔两小时会去扫描Hbase表生成一份全量文件数据,搜索引擎会根据他自己的运行周期去拉取最新的全量文件数据,同时全量文件会附带一个时间戳,作为引擎回溯增量的时间参数,通过这个时间戳将增量流程和全量流程结合在一起,构成了整个搜索组的Dump数据流过程。

三、个人总结

应届生刚入职的时候有些担心和疑惑是必不可免的。尤其对于公司的一些中间件和术语的陌生,开始的时候会让你觉得有点难以接受,这都很正常,随着你慢慢熟悉,最后就会变成顺其自然了。下面是我入职一年以来的一些感受和总结:

1、开放的工作环境和人际关系

在蘑菇街,同事与同事之间都是以花名相称,没有等级制度,都是以师兄弟相称,有任何问题或者疑惑你都可以TT或者直接面对面沟通,不用担心说了会有啥后果之类的。不用去考虑要维持什么样的人际关系,你只要把事情做好就可以了。

2、积极主动沟通

有时候你可能会面对一个问题很久时间都没有解决,这个时候你可以向组内或者组外的同事请教,不要觉得不好意思,不懂就问,反正最后学到的东西是自己的。有可能你一个人想了很久都没想出的问题,恰好别的同学就做过类似的,即使没做过,别人也可以给到你不同的意见或者不同的思路,因为人都是这样,很容易陷入自己的思维中形成思维定势而忽视了其他方法。

3、及时总结

在工作中,每天我们可能会遇到各种各样的问题,假如我们不善于总结的话,每天的时间都会花费在解答这些问题上。这个时候我们就需要花费一定的时间来回顾和总结这些问题。利用我们自己的专业知识,看是否能够将这些问题抽象出来,做个工具或者系统来自动化解决这些问题,这样也能促进自己进步,同时还能解放自己。

4、敬畏之心不可无

在蘑菇街,每个新入职的同学都能很快的接触到生产系统,也就是真实用户访问的系统。比如我,在入职三个月之后就一个人接手了增量Dump线上的业务,这个时候就需要我们对线上要有敬畏之心,对于自己的每次更改都要进行review,开始的时候最好要让师兄review代码和流程是否合理。线上故障对于程序员来说,是小概率事件必然发生的,但是也不要因此害怕线上,其实每次的故障对自己都是一次成长的过程。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G0BLVX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券