写点什么

Facebook 开源分布式日志存储系统 LogDevice

  • 2018-10-08
  • 本文字数:1096 字

    阅读完需:约 4 分钟

Facebook开源了他们的内部分布式日志存储项目LogDevice。它通过复制、持久日志存储和故障恢复实现写入高可用性。

Facebook 的大多数需要记录日志应用程序都需要写入高可用性、持久的日志存储以及在性能和延迟方面要求各不相同的工作负载。另一个非常重要的要求是能够承受硬件故障。Facebook 有一个叫作 Scribe 的旧项目侧重于将日志聚合到集中式存储中,但这种方案存在数据丢失的情况。Scribe 现在使用 LogDevice 作为日志存储后端。

Facebook 将 LogDevice 用在数据中心内部的流式处理管道、数据库索引更新的发布、机器学习管道、复制管道和持久任务队列(每秒摄取超过 1TB 的数据)中。尽管 Facebook 已经构建了很多用于管理 LogDevice 集群的开源工具,但还没有将它们开源出来,除了一些基本的工具集。 LDShell 工具可用于从命令行管理集群,并且可以使用 LDQuery 命令来查看集群统计信息。

LogDevice 使用“日志记录”抽象来划分单个日志事件,为每个记录分配一个称为日志序列号(LSN)的唯一 ID。LSN 由“Sequencer”组件基于时间点生成,而时间点保存在 ZooKeeper 中。LogDevice 只能以追加的模式写入记录,也就是说,一旦写入记录就无法修改。与大多数日志存储系统一样,LogDevice 会“修剪”记录,即基于时间或空间策略的日志轮换。它还可以按需进行日志修剪。除此之外,对日志的存储时间没有限制。

LogDevice 通过在不同的计算机节点上存储每个日志记录的多个副本来实现高可用性,尤其是写入高可用性。每条记录可以跨20-30 个存储节点复制。不过,如果某些具有某条日志副本的计算机速度很慢或不可用,那么该日志写入次数的增加会限制吞吐量。LogDevice 可以自动检测哪些节点已失效,并不再往这些节点写入新记录。它试图通过尽可能多的复制尽减少硬件故障的影响,并尽可能快地“重建”丢失的副本。在重建过程中,“可以以每秒5-10GB 的速率进行恢复”。LogDevice 底层存储基于RocksDB,它也是由Facebook 开源的一个键值存储系统。

LogDevice 团队还必须应对其他挑战,他们发现,LogDevice 的用户会执行回填(backfill),请求几个小时或几天内的旧数据。这些请求由使用 LogDevice 日志的下游服务发出,当这些服务从故障中恢复并重新处理日志时就会发生回填。LogDevice 通过在“节点集”之间分摊读取负载来应对这些读取高峰。

LogDevice 可以与 Apache BookKeeper Apache Kafka 等其他日志存储系统进行对比。其中与 Kafka 的主要区别似乎是LogDevice 将计算和存储进行了分离,主要是为了应对Facebook 规模的日志。LogDevice 是用C++ 开发的,并托管在 GitHub 上。

查看英文原文 Facebook Open Sources LogDevice - a Distributed Data Store for Log Storage

2018-10-08 10:232375
用户头像

发布了 731 篇内容, 共 481.8 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

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

谈一谈“数字资产”

小天同学

思考 数字时代 5月日更 数字文物 数字内容

把Redis当作队列来用,真的合适吗?

Kaito

数据库 redis 队列

腾讯iOS开发要达到咋样的水准?

一意孤行的程序员

ios 程序员 腾讯 面试 ios开发

实时音视频通讯过程中声音的那些事儿

liuzhen007

音视频 5月日更

(深入篇)漫游语音识别技术—带你走进语音识别技术的世界

攻城先森

深度学习 音视频 语音识别 5月日更

Spark为什么会流行

大数据技术指南

大数据 5月日更

🚀【高并发技术专题】你需要了解的秒杀方案

码界西柚

高并发系统设计 高并发优化 5月日更

Golang 程序实体

escray

学习 极客时间 Go 语言 5月日更

全文检索的介绍

五分钟学大数据

大数据 5月日更

[Netty]- Reactor实现

topsion

reactor Netty io nio

ES_her0

5月日更

区块链—重构新商业体系和全新商业生态环境

CECBC

开源流媒体服务器SRS学习笔记 - 安装、推流、拉流

赖猫

音视频 SRS SRS流媒体服务器

数据挖掘从入门到放弃(二):决策树

数据社

机器学习 5月日更

MySQL数据库学习笔记(1)

lenka

5月日更

工业互联网产业数字化,区块链如何协同发力?

CECBC

全国大学生物联网设计竞赛(华为杯)巡回技术讲座“八校联动”,HarmonyOS与校园开发者面对面

科技汇

高性能JavaScriptの笔记(二)

空城机

JavaScript 大前端 5月日更

Netty引导器Bootstrap学习笔记

风翱

Netty 5月日更

项目管理学习到的教训

胡迪伦

项目管理

深入Linux C/C++ Timer定时器的实现核心原理

Linux服务器开发

Linux 后端 网络编程 定时器 Linux服务器开发

k8s POD hosts 文件怎么与主机保持同步那?

Geek_f24c45

Docker Kubernetes

企业数字化转型分为三个阶段

石云升

数字化 5月日更

【LeetCode】罗马数字转整数Java题解

Albert

算法 LeetCode 5月日更

网络攻防学习笔记 Day15

穿过生命散发芬芳

5月日更 网络攻防

全国大学生物联网设计竞赛(华为杯)巡回技术讲座“八校联动”,HarmonyOS与校园开发者面对面

Geek_283163

鸿蒙

学习笔记之:孩子学习老是跑?日更好“难”

Nydia

学习

什么是线程安全?一文带你深入理解

程序猿阿星

线程安全 信号量 线程同步 互斥锁

测试开发需要掌握哪些技术?

夏兮。

方法论 测试 CI/CD automation 语言 & 开发

ceph-csi源码分析(7)-rbd driver-IdentityServer分析

良凯尔

Kubernetes 源码分析 Ceph CSI

ceph-csi源码分析(8)-cephfs driver分析

良凯尔

Kubernetes 源码分析 Ceph CSI

Facebook开源分布式日志存储系统LogDevice_Meta_Hrishikesh Barua_InfoQ精选文章