春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

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

  • 2019 年 9 月 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 年 9 月 10 日 14:12467

评论

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

性能基础之CPU、物理核、逻辑核概念与关系

zuozewei

Linux 性能测试 基础 签约计划第二季

Linux之ls命令

入门小站

Linux

工业4.0时代:低代码的兴起,或将掀起制造业格局的变革

优秀

低代码 工业4.0

盘点2021:一年读完的50本书

石云升

书单 年终总结 28天写作 12月日更 盘点2021

实用机器学习笔记九:数据部分总结

打工人!

机器学习 算法 学习笔记 12月日更

TypeScript 之模块

冴羽

JavaScript typescript 翻译 前端 web前端

深度揭秘技术创新:全球首个知识增强千亿大模型是怎样炼成的?

百度大脑

人工智能

记录-最骄傲的事(3)

将军-技术演讲力教练

Hoo虎符研究院 | 币海寻珠——2021年区块链投融大事记

区块链前沿News

区块链 虎符 Hoo虎符 Hoo 虎符交易所

【Promise 源码学习】第十六篇 - 了解 co 库

Brave

源码 Promise 12月日更

睁眼、耸肩、觉醒:人形机器人的吊诡与最终幻想

脑极体

iKuai与DNSPod合作,搞了一个大动作!

网络安全 DNS DNS劫持

数据库大赛50强之「华东师范大学」:恰同学少年,代码激扬!

OceanBase 数据库

数据库 学习 开源 oceanbase

40 K8S之Calico网络插件

穿过生命散发芬芳

k8s 28天写作 12月日更

性能工具之Java分析工具BTrace入门

zuozewei

Java 性能测试 性能分析 签约计划第二季

性能分析之构建 Linux 操作系统分析决策树

zuozewei

Linux 性能测试 性能分析 签约计划第二季

Xcode13 适配之打印启动时间

CRMEB

Apache Log4j 2 报高危漏洞,CODING 联手腾讯安全护卫软件安全

CODING DevOps

Apache DevSecOps CODING Log4j 2 腾讯安全

即时通讯(IM)开源项目OpenIM本周版本发布- v1.0.7web端一键部署

OpenIM

记录docker,k8s,oneops,.netcore搭建个人博客过程

哔啵哔啵

.net Docker k8s .net core oneops

架构实战营第 4 期 -- 模块二作业

烈火干柴烛灭田边残月

架构实战营

性能分析之单条SQL查询案例分析(mysql)

zuozewei

MySQL 性能测试 性能分析 签约计划第二季

性能监控之Telegraf+InfluxDB+Grafana+Python实现Oracle实时监控

zuozewei

数据库 oracle 性能监控 签约计划第二季

数据情报在金融行业的探索系列

nexpose

数据分析 目标追踪 风险识别 数据分析预测 数据情报

使用 Apache APISIX serverless 能力快速拦截 Apache Log4j2 的高危漏洞

Apache APISIX 中国社区

Serverless log4j APISIX

性能工具之常见性能工具一览

zuozewei

工具 性能测试 签约计划第二季

伙伴大会报名截止倒计时3天!

明道云

时间紧资金少人才缺?8位产业专家带你破局AI智能化升级

百度大脑

人工智能

下周上海见!超越商业,创业邦100未来独角兽峰会议程抢先看

创业邦

XTransfer技术专家康康:从普通程序员到架构师的进化之路

XTransfer技术

程序员 创业心态 创业公司 跨境支付 XTransfer

Android单页应用如何在Activity与Fragment中共享状态

Changing Lin

12月日更

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