Twitter 开源分布式高性能日志复制服务

日前,Twitter在Github上基于Apache 2许可证协议开源了其日志服务DistributedLog(DL)。

DL是一个高性能的日志复制服务,提供了持久化、复制以及强一致性的功能,这对于构建可靠的分布式系统都是至关重要的,如复制状态机(replicated-state-machines)、通用的发布/订阅系统、分布式数据库以及分布式队列。

DistributedLog会分类维护记录的序列(sequences of records),并将其称为Log(又叫做Log Stream),将记录写入到DL Log的进程称之为Writer,从Log中读取并处理记录的进程称之为Reader。因此,它整体的软件栈如下所示:

具体来讲,它包含如下几个组成部分:

Log

Log是有序的、不可变的日志记录(log record),它的数据结构如下所示:

日志记录

每条日志记录都是一个字节序列。日志记录会按照序列写入到日志流中,并且会分配一个名为DLSN(分布式序列号,DistributedLog Sequence Number)的唯一序列号。除了DLSN以外,应用程序还可以在构建日志记录的时候设置自己的序列号,应用程序所定义的序列号称为TransactionID(txid)。不管是DLSN还是TransactionID都能用来定位Reader,使其从特定的日志记录开始读取。

Log分段(Log Segments)

Log会被分解为Log分段,每个分段中包含了其记录的子集。Log分段是分布式的,应该放到Log分段存储中(如BookKeeper)。DistributedLog会基于配置好的策略来轮询每个Log分段,要么是可配置的时间段(如每两个小时),要么是可配置的最大规模(如每128MB)。所以Log的数据将会分为同等大小的Log分段,并且均匀分布到Log分段存储节点上。这样,Log的存储就不会局限于单台服务器的限制,同时,能够在集群中分散读取的流量。

Log的数据可以永远保存,直到应用程序显式地将其截断,也可以在一个可配置的时间段内保存。对于构建复制状态机来说,显式截断会非常有用,如分布式数据库。在数据何时能够截断这一点上,它们往往有着严格的控制。基于时间保留Log对于实时分析的场景更为有用,它们只关心一定时间内的数据。

命名空间

属于同一组织的Log流通常会归类在同一个命名空间(namespace)下,并据此进行管理。DL的命名空间基本上就是用来定位Log流在何处的。应用程序可以在某个命名空间下创建和删除流,也能将某个流截断到给定的序列号上(DLSN或TransactionID均可以)。

Writer

Writer会将数据写入到它们所选择的Log中。所有的记录都会按照顺序添加到Log之中。序列号是由Writer所负责的,这就意味着对于某个Log,在给定的时间点上,只能有一个激活的Writer。当出现网络分区(network partition),导致两个Writer试图往同一个Log进行写入的时候,DL会保证其正确性,这是通过Log分段存储的屏障(fencing)来实现的。

Writer由名为Write Proxy的服务层来提供和管理,Write Proxy用来接受大量客户端的fan-in写入。

Reader

Reader会从它们所选择的Log中读取记录,这会在一个给定的位置开始。这个给定的位置可以是DLSN,也可以是TransactionID。Reader将会严格按照Log的顺序读取记录。在同一个Log中,不同的Reader可以在不同的起始位置读取记录。

与其他的订阅/发布系统不同,DistributedLog并不会记录/管理Reader的位置,它将跟踪的任务留给了应用程序本身,因为不同的应用在跟踪和协调位置上可能会有不同的需求,很难用一种方式就将这些需求全部解决。在应用程序层面,借助各种存储(如ZooKeeper、FileSystem或Key/Value存储)能够很容易地跟踪Reader的位置。

Log记录可以缓存在名为Read Proxy的服务层中,从而应对大量Reader的读取。

Fan-in与Fan-out

DistributedLog的核心支持单Writer、多Reader的语义。服务层构建在DistributedLog Core之上,支持大量的Writer和Reader。服务层包含Write Proxy和Read Proxy,Write Proxy管理Log的Writer,并且在机器宕机时,能够对它们进行故障恢复。它能够从众多来源聚集Writer,允许不必关心Log的所有权(又称为Fan-in)。Read Proxy通过将记录放到缓存中,优化了Reader的读取路径,以应对成百上千的Reader读取同一个Log流的状况。

作为一个日志服务,DistributedLog的优势可以总结为:

高性能:面对大量的并发日志时,在可持久化的Writer上DL能够提供毫秒级的延迟,同时还能应对上千客户端每秒大量的读取和写入操作。

持久化和一致性:消息会持久化到磁盘上,并且以副本的形式存储多份,从而避免丢失。通过严格的顺序,保证Writer和Reader之间的一致性。

各种工作负载:DL支持各种负载,包括延迟敏感的在线事务处理(OLTP)应用(如分布式数据库的WAL和基于内存的复制状态机)、实时的流提取和计算以及分析处理。

多租户:针对实际的工作负载,DL的设计是I/O隔离的,从而支持多租户的大规模日志。

分层架构:DL有一个现代化的分层设计,它将有状态的存储层与无状态的服务提供层进行了分离,能够使存储的扩展独立于CPU和内存,因此支持大规模的写入fan-in和读取fan-out。

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-07-30 02:14:46

Twitter 开源分布式高性能日志复制服务的相关文章

Twitter开源分布式高性能日志复制服务

Twitter在Github上基于Apache 2许可证协议开源了其日志服务DistributedLog(DL).DL是一个高性能的日志复制服务,提供了持久化.复制以及强一致性的功能,这对于构建可靠的分布式系统都是至关重要的,如复制状态机(replicated-state-machines).通用的发布/订阅系统.分布式数据库以及分布式队列. DistributedLog会分类维护记录的序列(sequences of records),并将其称为Log(又叫做Log Stream),将记录写入到

详解Twitter开源分布式自增ID算法snowflake,附演算验证过程

1.snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并发巨大的业务要求ID生成效率高,吞吐大:比如某些银行类业务,需要按每日日期制定交易流水号:又比如我们希望用户的ID是随机的,无序的,纯数字的,且位数长度是小于10位的.等等,不同的业务场景需要的ID特性各不一样,于是,衍生了各种ID生成器,但大多数利用数据库控制ID的生成,性能受数据库并发能力限制,

盘点Linux下的开源云平台&&云存储服务

15个您可能不知道的开源云平台 桉树云服务环境 Eucalyptus 开源协议及语言 GPL Java C/C++ 1 2 1 2 官方网站 http://www.eucalyptus.com/participate 介绍 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开源的软件基础结构,用来通过计算集群或工作站群实现弹性的.实用的云计算.它最初

大众点评开源分布式监控平台 CAT 深度剖析

一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报表.自2014年开源以来,CAT在携程.陆金所.猎聘网.找钢网等多家互联网公司生产环境应用. CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团点评上海侧所有核心应用.目前在中间件(MVC.RPC.数据库.缓存等)框架中得到广泛应用,为美团点评各业务线提供系统的性能指

Apache Eagle:eBay开源分布式实时Hadoop数据安全引擎

日前,eBay公司隆重宣布正式向开源业界推出分布式实时安全监控方案:Apache Eagle,该项目已于2015年10月26日正式加入Apache基金会成为孵化器项目. http://goeagle.io  Apache Eagle提供一套高效分布式的流式策略引擎,具有高实时.可伸缩.易扩展.交互友好等特点,同时集成机器学习对历史模型训练建立用户画像以实现智能实时地保护Hadoop生态系统中大数据的安全. Eagle在eBay的使用场景 目前,Eagle的数据行为监控系统已经部署到一个拥有250

Twitter开源云环境时间序列数据断层检测工具BreakoutDetection

[编者按]区别于传统环境,鉴于云环境中众多不可预测的因素和异常,其时间序列breakout检测并不容易.近日,Twitter开源了一款基于E-Divisive with Medians(EDM)的breakout检测工具,旨在更好地分析复杂环境中的时间序列数据. 以下为译文 当下,大数据已经深入影响到各个领域,其中包括新产品决策制定.用户参与程度衡量.产品的定制化推荐.医疗.数据中心效率等. 而着眼数据类型,时间序列数据无疑是非常常见的一种形式.随着数据收集和挖掘成本的下降,包括Twitter等

Apache Cassandra v0.8.0-final发布 开源分布式Key-Value存储系统

Apache Cassandra是一套开源分布式数据库管理系统.它最初由Facebook开发,用于储存特别大的数据. Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable.Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其它节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取.对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里

高性能高并发服务的瓶颈及突破思路

关于高性能高并发服务这个概念大家应该也都比较熟悉了,今天我主要是想讲一下对于如何做一个高性能高并发服务架构的一些自己的思考. 本次分享主要包括三个部分: 1. 服务的瓶颈有哪些 2. 如何提升整体服务的性能及并发 3. 如何提升单机服务的性能及并发 一.服务的瓶颈有哪些 通常来说程序的定义是算法+数据结构+数据,算法简单的理解就是一种计算方式,数据结构顾名思义是一种存储组织数据的结构,这两者体现了程序需要用到的计算机资源涉及到CPU资源.内存资源,而数据部分除了内存资源,往往还可能涉及到硬盘资源

Twitter开源Summingbird:近原生编码下整合批处理与流处理

根据使用场景不同,大数据处理逐渐的发展向两个极端--批处理和流处理.其中流处理更注重于数据的实时分析,代表工具有Storm及S4.而批处理更注重于数据的长期挖掘,典型的工具则是从Google 三大论文上衍生的Hadoop. 随着数据的"爆棚",各个公司在大数据的处理上可谓是绞尽脑汁,目的无非就是更快.更准.然而近日Twitter 开源的新工具Summingbird却打破了这个节奏,在流处理与批处理的无缝整合上更进了一步. 开发背景 众所周知,Twitter的系统基本上完成了面向服务的架