Facebook的实时流处理技术——Scuba是Facebook的一个非常快速、分布式的内存数据库,用于实时分析和查询

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介:

Scuba,Facebook的一个非常快速、分布式的内存数据库,用于实时分析和查询。是Facebook的回归分析代码、错误报告监控、广告收入监控和性能调试的背后主力。

Facebook的实时流处理技术

随着云计算大数据的发展,有越来越多的场景需要借助于实时数据处理技术,为此有很多公司开发了自己的实时处理系统,Facebook就是其中的一员,他们构建的实时数据处理生态系统每秒钟能够处理数百GB的数据。本文介绍了Facebook在设计该系统时从易用性、性能、容错、可伸缩性以及正确性等方面考虑所做的重要设计决策,这些决策和系统如何满足秒级的延迟需求,以及在构建该系统的过程中Facebook所总结的经验教训。

Facebook认为在设计一个实时数据处理系统的时候首先要想清楚下面5个问题:

  • 易用性:处理需求有多复杂?SQL是否足够?是否必须要使用C++或者Java这样的编程语言?用户编写、测试和部署一个新的应用程序需要多长时间?
  • 性能:允许多长时间的延迟,毫秒级,秒级,还是分钟级?单机或者总体需要多大的吞吐量?
  • 容错能力:可以容忍哪些类型的错误?数据处理或输出的次数通过什么语义来保证?系统如何存储和恢复内存状态?
  • 可伸缩性:数据是否支持分片从而进行并行处理?系统是否能够容易地随着数据量的变化进行调整?是否可以重新处理之前的有价值的老数据?
  • 正确性:是否需要ACID特性?作为输入的所有数据是否都需要被处理并在最终的结果中出现?

针对这些问题,Facebook提出了5个设计决策:语言范式、数据传输、处理语义、状态保存机制以及数据再处理。下面的图表展示了每一个设计决策对数据质量属性的影响:


以及不同的流处理系统所做的设计决策:

语言范式决定了编写应用程序的难易程度以及开发者对性能的操控程度。基本有三种选择:声明式,函数式以及过程式编程语言。对于Facebook而言,单一的某种语言无法满足所有的用例,因此他们开发了三种不同的流处理系统。 
数据传输对流处理系统的容错性、性能和可伸缩性都有非常大的影响,传统的数据传输方式包括:直接消息传输、基于代理的消息传输和基于持久化存储的消息传输。Facebook使用Scribe,一种持久化的消息总线,来连接不同的处理节点。 
处理语义包括状态语义(每一个输入事件最少被计数一次、最多被计数一次还是只被计数一次?)和输出语义(给定的输出值在输出流中最少出现一次、最多出现一次还是只出现一次?)。其中无状态的处理器只有输出语义,而有状态的处理器这两种语义都有。Facebook对不同的应用通常有不同的状态和输出语义需求,因而开发了Puma、Stylus和Swift三个支持不同语义的系统。 
状态保存机制的实现方式有很多,包括复制副本、本地数据库持久化、远程数据库持久化、上游备份以及全局一致性快照等。Facebook实现了两种状态保存机制,其中Puma实现了远程数据库存储,而Stylus则实现了本地和远程数据库存储。 
再处理的方式有三种:仅使用流处理;维护两个单独的系统,一个用于流处理,一个用于批处理;开发一个能够在批处理环境中运行的流处理系统。Facebook采用了一种与Spark Streaming以及Flink都不同的处理方式,他们使用标准的MapReduce框架从Hive中读取数据并在批处理环境中运行流处理应用程序。Puma应用可以运行在Hive环境中,而Stylus则提供了三种类型的处理器:无状态的处理器,通用的有状态的处理器和一个居中的流处理器。

在系统建设方面,Facebook的主要设计目标是秒级的延迟,每秒钟能够处理几百GB的数据,为此他们通过一个持久化消息总线将所有的处理组件连接起来进行数据传输,同时也将数据的处理和传输解耦,实现容错、可伸缩、易用性和正确性。整个系统的架构图如下:


该图阐述了Facebook实时处理系统的数据流,数据从左侧的移动和Web产品中产生,然后被送入Scribe(一个分布式数据传输系统),而Puma、Stylus和Swift等实时流处理系统则从Scribe中读取数据并将处理结果写入Scribe。Puma、Stylus和Swift可以根据需要通过Scribe连接成一个复杂的DAG(有向无环图)。

接下来是使用该实时处理系统的一个示例应用,该应用识别一个输入事件流中的趋势事件,以5分钟为单位对这段时间内产生的话题按事件数排序。每个事件包含一个事件类型,一个维度ID(用于获取事件的维度信息,例如使用的编程语言)和一个文本(用于分类事件主题,例如电影或者婴儿)。该应用有4个处理节点,每一个都可以并行执行,整体流程图如下:


在该图中,Filterer会根据事件类型过滤输入流,然后将输出按照维度ID进行分片,这样下一个节点就能够并行处理分片数据了。Joiner通过维度ID从一个或者多个外部系统检索信息,然后根据事件的文本内容对其按照话题进行分类。Scorer记录着最近一段时间内每一个话题的事件数,同时还会跟踪这些计数器的长期趋势。Ranker则计算每N分钟每一个话题的前K个事件是什么。

最后是Facebook在构建该系统的过程总结的一些经验教训:首先,没有一个单独的流处理系统能够适应所有场景,针对不同的点使用不同的系统才能更好地解决问题;其次易用性不仅包括使用,还包括开发、调试、部署、监控和运维等方面;最后,流处理和批处理并不是互斥的,组合使用这两种系统能够加速数据的处理速度。











本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6400900.html,如需转载请自行联系原作者


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
18天前
|
KVM 虚拟化
KVM的热添加技术之内存
文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。
37 4
KVM的热添加技术之内存
|
25天前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
58 1
|
21天前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
40 8
|
18天前
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
20天前
|
SQL Java OLAP
Hologres 入门:实时分析数据库的新选择
【9月更文第1天】在大数据和实时计算领域,数据仓库和分析型数据库的需求日益增长。随着业务对数据实时性要求的提高,传统的批处理架构已经难以满足现代应用的需求。阿里云推出的 Hologres 就是为了解决这个问题而生的一款实时分析数据库。本文将带你深入了解 Hologres 的基本概念、优势,并通过示例代码展示如何使用 Hologres 进行数据处理。
78 2
|
27天前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
54 5
|
28天前
|
Cloud Native 数据库 开发者
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
|
28天前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
|
8天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。