点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

嗖的一下,让数据自动生效!

  • 2019-09-10
  • 本文字数:2104 字

    阅读完需:约 7 分钟

嗖的一下,让数据自动生效!

作为一名码农,你是否曾经遇到过如下这些令人头疼的问题:


  • 需要不定期更新某个线上文件,心力交瘁;

  • 有一组很大的数据文件,需要传送分发给大量的服务器,一台一台拷贝过去,费时费力;

  • 有成千上万个数据字典会不定期更新,更新后需要立即传送到线上提供服务,每天更新成百上千次,传输操作,痛苦不堪。


有读者可能会想到,使用上线的方式去解决上述问题不就可以了嘛?然而,上线是一个比较繁琐的过程,要经过一系列严格的审批。上线的主要对象为程序,程序变更引入的 bug 导致服务异常的概率要高于数据变更,并且程序变更频率也很低,因此上线会引入一系列严格的审批流程。在数据变更高频率与低风险的背景下,上线很难满足数据变更的需求。


百度的各项业务也面临着同样的问题,比如搜索业务的词典变更、地图业务的数据变更等。为了解决线上数据变更的难题,百度数据服务应运而生。

基本介绍

百度数据服务为百度线上服务所需的数据提供一整套的解决方案,包括数据名字服务与权限管理(数据注册)、分发生效(数据配送)等一系列数据生命周期涉及的操作。数据配送系统相当于 B2C 中的快递,将数据从生产者(源模块)按照使用者的要求快递(配送)给消费者(目标模块)。 为了解决线上数据不定期更新的问题,它还引入了自动化流程,即业务方一旦产出新的数据,无需人工干预,即可进行线上数据变更。



图 1 百度数据服务基础结构

数据注册

数据注册解决数据的管理以及上下游依赖解耦问题,同时包括变更通知和数据权限管理。业务方完成数据注册会获得一个数据 key,数据 key 可以理解为业务方数据的别名并记录数据的版本信息以及权限信息。


用户可以将数据 key 与配送任务进行绑定,当业务方产生新数据时会生成对应的版本号,记录数据源信息并触发对应的配送任务。


线上的多个服务可能会依赖同一份数据,数据的变更需要在多个服务中同时生效,这就要求数据与线上服务进行解耦。一份数据只能对应一个数据 key,但是数据 key 可以与多个配送任务进行绑定。因此,百度数据服务可以做到一份数据的变更在多个线上服务中同时生效。

数据配送

数据配送负责数据在线上生效,主要由业务方数据的变更触发。



图 2 配送任务触发流程


整个配送过程依赖百度集群控制系统(CCS),数据配送任务在启动之前会将配送信息封装成 CCS job,然后向 CCS 发送请求执行该 job。任务到达单机后,会执行配送插件,完成在单机的各种操作,如前置命令、数据下载和后置命令。前置命令与后置命令由用户自定义,完成数据在下载前和下载后的操作。

问题与方案

百度数据服务的宗旨是快速安全地将数据传输至线上并生效,因此要综合考虑风险控制与传输效率的问题,尽可能做到最优。

风险控制

既然百度数据服务引入了自动化流程,那必然要通过技术手段控制数据变更给线上服务带来的风险,因此它提供了分级配送的功能。


分级配送


分级配送是指将配送目标分成 N 个组,组与组之间串行配送,每个分组在完成配送之后回调检查接口对数据进行检查,检查失败则判定该组配送任务失败并将整个配送任务终止、向业务方发出报警,从而做到风险可控。


用户在创建配送任务时,通常把第一个分组中的机器设置为分级检查机器,如果第一个分组检查失败,数据将无法配送至线上,这进一步降低线上风险。



图 3 分级配送

传输效率

为了提高数据传输效率,百度数据服务还提供了预分发与 p2p 下载的功能并很好地支持数据跨地域传输。


预分发


在数据配送过程中,大部分时间耗费在数据下载。但是组与组之间串行配送将极大地增加数据变更生效时间,不符合数据变更高时效性的要求。为了解决这个问题,数据配送提供了预分发的功能。即允许所有的配送目标以并发的方式将数据下载至临时目录,然后再按照分组串行执行其他操作与分组检查。预分发的功能实现了数据下载与分组检查的解耦,将极大缩短数据生效时间。


p2p 下载


预分发功能使得配送目标并发下载数据,为了利用这种下载场景,我们通过 libtorrent 协议实现 p2p 下载工具 gingko,用于支持数十万台规模的机器同时进行 p2p 快速传输。预分发高并发下载的特点充分利用了 p2p 下载的优势,降低了对数据源的依赖,同地域下载平均速度提升十倍以上。


支持跨地域传输


当前百度的服务器有地域之分,主要为华北、华东和华南。这种现状导致数据在配送过程中涉及到跨地域数据传输问题。众所周知,跨地域传输成本高,而且还会出现网络拥塞状况,这将极大降低数据下载速度,降低数据变更时效性。


为了解决该问题,gingko 提供了链路选择功能,在 p2p 网络中每个节点仅从本地域 peer 获取数据。如果本地域没有种子,gingko 还提供了中转机功能,即本地域某一节点进行一次跨地域传输,当作本地域种子,从而尽可能减少跨地域甚至跨 IDC 流量。

总结

本文主要向大家介绍了百度数据服务以及在面对安全控制与传输效率两个问题时提出的解决方案,希望本文对大家有所帮助,起到抛砖引玉的作用。欢迎大家持续关注百度 AIOps,关注百度智能云。


作者介绍:


运小然,百度高级研发工程师,负责百度运维平台(数据传输)相关研发工作,致力于为百度云的用户提供安全、可靠与高效的数据分发服务。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/m8Jw_XCRs3pzu8uGuLz4wQ


2019-09-10 14:12598

评论

发布
暂无评论
发现更多内容

缓存在哪-HTTP缓存原理介绍

hasWhere

华为的活动

IT蜗壳-Tango

6月日更

【得物技术】得物WMS如何助力仓库拣货

得物技术

供应链 商品 仓库 供应链物流 仓储

【10分钟玩转腾讯游戏核心数据库】TcaplusDB华东客户Hands-on活动

tcaplus

数据库 TcaplusDB

校友会小程序开发笔记八:校友相册功能模块设计与实现

CC同学

校友录小程序 同学录小程序

JavaScript 学习(五)

空城机

JavaScript 大前端 6月日更

「SQL数据分析系列」7. 数据生成、转换以及操作

数据与智能

数据库 sql

Java各种场景获取路径

hasWhere

新员工最想要的10件事

hasWhere

华为新员工入职180天详细培训计划

hasWhere

web.xml文件中的7个错误的安全配置

hasWhere

校友会小程序开发笔记六:校友活动聚会功能模块设计与实现

CC同学

校友录小程序

log4j日常使用

hasWhere

Bzz矿机分币APP,深圳云矿机系统开发

第六次作业

Geek_9cf7b5

上云赋智的企业们,也许是这届618的最大赢家

脑极体

Linux之cd命令

入门小站

Linux

5分钟速读之Rust权威指南(二十五)Deref

wzx

rust

校友会小程序开发笔记七:校友互助功能模块设计与实现

CC同学

校友录小程序 同学录小程序

新视界 | 透过鸿蒙OS看手机操作系统

架构精进之路

操作系统 HarmonyOS 6月日更

java文件读写

hasWhere

☕【JVM性能调优】「CMS垃圾回收器」调优化方案

洛神灬殇

CMS GC jvm调优 6月日更

VideoLab - 高性能且灵活的 iOS 视频剪辑与特效框架

Bear

开源 视频处理 Metal 视频特效 AVFoundation

MySQL基础之十六:视图、DBA命令和三范式

打工人!

MySQL 6月日更

我曾与纪伯伦的对话

卢卡多多

6月日更

【21-11】PowerShell文件 IO 操作

耳东@Erdong

PowerShell 6月日更

ServeMux详解

Rayjun

HTTP Go 语言

深入浅出 Ajax 的核心原理

悟空聊架构

ajax 架构 大前端 6月日更 悟空聊架构

JVM读书笔记

hasWhere

无需JavaScript可以实现的9个网页功能

devpoint

html5 html/css 6月日更

网络攻防学习笔记 Day48

穿过生命散发芬芳

网络攻防 6月日更

嗖的一下,让数据自动生效!_文化 & 方法_运小然_InfoQ精选文章