写点什么

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:232005
用户头像

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

关注

评论 1 条评论

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

钓鱼网站:详解hosts文件

xcbeyond

Java 域名解析 hosts

易观郭炜:流动水系数造未来

易观大数据

MySQL5.7升级到8.0过程详解

Simon

MySQL

我的敏捷历程 —— 兼评《敏捷整洁之道 - 回归本源》

FollowFlow

敏捷开发 Agile 极限编程 XP

MySQL索引问题探究手记

架构精进之路

MySQL 索引

面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗?

程序员DMZ

JVM i++

恢复青春气息,就靠这套人像美肤算法了

博文视点Broadview

算法 计算机视觉 图像识别 人像

枚举算法练习例题(Python版)

罗罗诺亚

Python 算法 枚举

为啥PHP in_array(0,['a', 'b', 'c']) 返回为true?

架构精进之路

php 弱类型语言

CRM往事丨三件事,所有SaaS的缩影

人称T客

关于日期及时间字段的查询

Simon

MySQL sql查询

是时候学习Linux了

Simon

Linux

低/零代码干掉了传统的开发模式

代码制造者

编程语言 低代码 零代码 信息化 编程开发

影响音视频延迟的关键因素(一):流媒体系统

ZEGO即构

TCP udp RTC HLS RTMP

Java-技术专题-synchronized关键字

码界西柚

海量并发也没那么可怕,运维准点下班全靠它!

华为云开发者联盟

容器 网络 并发 华为云

如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

程序员DMZ

spring 生命周期

实践案例丨教你一键构建部署发布前端和Node.js服务

华为云开发者联盟

node.js 后端 服务器 代码 华为云鲲鹏

自从有了语音开黑小能手,队友再也不会骂我了!

anyRTC开发者

WebRTC 在线教育 直播 RTC RTMP

程序范式的意义

soolaugust

架构 程序设计

面试必杀技,讲一讲Spring中的循环依赖

程序员DMZ

spring

SpringCloud服务注册中心双节点集群(Eureka集群)

xcbeyond

Java 架构 微服务 Eureka 集群

SWARM学习1——Kademlia分布式路由表协议

AIbot

区块链 DHT 分布式存储 分布式文件存储 分布式路由

区块链、人工智能……警惕非法金融借创新概念迷惑投资人

CECBC

区块链 金融

一个数据库管理员的自我救赎之路

华为云开发者联盟

数据库 华为云 数据库迁移 企业上云 DRS

spring Cloud Eureka Rest接口重写

xcbeyond

Java SpringCloud Eureka

MySQL关于日期为零值的处理

Simon

MySQL

云上安全工作乱如麻,等保2.0来一下

华为云开发者联盟

安全 华为云 等保 云平台 多云服务

操作系统bochs安装及使用

allworldg

操作系统

ARTS week 4

锈蠢刀

跨域问题(CORS / Access-Control-Allow-Origin)

xcbeyond

Java CORS 跨域

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