热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分布式基础架构中的DataPipeline

​DataPipeline,就是分布式系统里的数据传输,在大型互联网后端基础架构中,已

Data Pipeline,就是分布式系统里的数据传输,在大型互联网后端基础架构中,已经是重要的组成部分。其实从做数据仓库开始的ETL,就可以算做是Data Pipeline了,只不过随着互联网公司大数据处理的需求更加频繁,对于Data Pipeline的要求也越来越多样化和自动化。例如早期的Sqoop,Flume等,分别都用于数据管道传输,它们也着实解决了部分需求,但是,这些软件,都只是着眼于开发一个工具完成某项任务,而没有把Data Pipeline当作一个服务来运行,可以放到数据中心操作系统中去调度。这么做有什么好处呢?在大型分布式系统中,数据的传输多样化,给运维和开发工程师都造成了很大的困扰,例如Web服务器,各类数据库,搜索引擎,Hadoop,Storm,Spark,OLAP,它们之间都需要数据的传输,诚然,以日志为中心的基础架构设计可以解决部分问题,但也存在许多情况无法一切数据存储都围绕中心日志来做,服务化Data Pipeline,可以让这个工作变得不那么Dirty,自然也是DevOps理念的继续延伸。


Linkedin是在Data Pipeline和数据日志设计上最有心得的公司,开源的一系列软件包含日志型消息队列,CPC(Change Data Capture),等等都是从实践中提炼总结出来的系统。在以Java为核心后端的公司中,Linkedin/Netflix是笔者认为最值得学习的互联网公司,就在于分别对数据处理和云上构建架构的丰富实践经验和总结。早在2013年,Linkedin就放出了Camus这样一个系统,这是很少有人去关注的一个工具,因为它解决的是到Hadoop的Data Pipeline传输过程的写入事务。没有该工具时,因为序列化的缘故,在做数据传送时常常因为网络或者其他IO方面的原因而导致传输丢失,这让Flume或者其他自写工具的开发者很挠头,因为这意味着数据不得不经常手工重做,导致低效和巨大的人力浪费,而通过把Data Pipeline作为一个Hadoop上的Job并同时记录状态,就可以很方便的进行容错处理以及自动把高吞吐量的IO并行到不同节点处理,很轻松地就解决了这个小问题。Camus系统是Linkedin在Data Pipeline向自动化上努力的第一个产品。Data Pipeline要解决的另一个麻烦事是异构数据源,Linkedin的CPC系统Databus可以看做是在这上面的努力,但它更着眼于解决数据库数据传输的实时性和一致性,跟Data Pipeline还是有差异,因为后者对于延迟有时候要求并不很高(数据传输可以是流式执行,也可以是批处理),但对于异构数据源的支持却必不可少。


日本人在这方面颇有心得,很早就推出了fluentd这样用Ruby写成的系统,fluentd看上去跟Flume很像,但更加灵活,只需要几十行代码就可以为它添加数据源和数据传输目的地的插件实现。Fluentd的作者随后去了硅谷做了日志SaaS服务的大数据公司TreasureData,在本公众号前边的“盘点美帝大数据创业公司”一文中也有提及。Fluentd负责Data Pipeline的传输,但它还是跟Flume类似的系统,在其他方面考虑并不多。在2014年日本人还做了个工作叫做Embulk,目的是在提供Fluentd类似的灵活性的基础上,引入一些高级功能,包含:批量加载,并行执行,事务控制,数据验证,错误恢复,听起来仿佛Fluentd+Camus。


已经相当不错了,异构数据源(可任意编写输入输出插件),事务,并行执行,等等。不过,Linkedin今年VLDB上放出的Gobblin,可算得上更近一步,因为真正做到了服务化。


对于软件的使用和介绍,只需要看相关的文档即可。这里想要多提及的是,为了让Data Pipeline服务化,Gobblin都做了哪些工作。首先,Gobblin针对数据传输任务做了统一管理,在任务调度上可以跟Hadoop上的流行工作流引擎集成,例如Oozie,Azkaban,以及Mesos上的Chronos;其次,任务状态统一保存在Hadoop中,便于容错和中断恢复;最后,Gobblin通过Helix可以运行在Yarn中,因此,就彻底解决了统一资源管理的问题。


这里多提下最后一点。Helix是Linkedin针对分布式数据存储所抽象出来的公共需求而构建的系统,主要功能包含:资源管理,分区管理,容错设计,伸缩性管理,以及监控。总体上,Helix把分布式存储系统看做是一个状态机,因此暴露相关的接口方便不同的分布式存储系统进行状态迁移。例如,启动或者下线,节点增加或者减少,分区增加或者减少,以及各类异常情况等。利用Helix可以很方便的开发集群运行的程序,例如分布式数据库,在Github上有个Fullmatix项目就是一个拿Helix给MySQL做Sharding的例子。由于MySQL本身在高可用设计上的弱点(切换时容易丢数据),因此Fullmatix只能是一个简单的玩具项目,但它的确可以展现出如何给一个不具备Sharding的存储系统增加分布式集群管理功能并且做到好的可运维性。Helix可以在Yarn和Mesos上运行,由后者给它分配资源。


在Gobblin中对Helix的使用较为简单,因为没有涉及到分区处理,主要通过Helix来控制任务平均分配在从Yarn上获得的节点上,从而确保Gobblin任务运行的负载均衡和容错。


服务化运行的另外一点是监控设计,不论是Gobblin,还是Helix,都提供JMX输出Metrics的能力,因此这方面不多谈论。尽管Gobblin已经不错了,但是相比Embulk,Gobblin没有过多考虑输出端的需求,目前只是为Hadoop服务的,因此,这并不是说Gobblin就是终点了,需要改进的地方仍然会不断涌现并得到最终解决。






推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
author-avatar
手浪用户2602914837
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有