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

深入解析BookKeeper的设计与应用场景

本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。
### BookKeeper简介
BookKeeper是由Yahoo于2009年开发,并于2011年开源的一个日志流存储系统。该系统设计用于存储系统生成的日志或其它数据,通过BookKeeper集群提供的第三方存储服务,确保数据的可靠性和一致性。

#### 应用场景
BookKeeper特别适合用于Write-Ahead Log(预写式日志)的场景,即在将数据写入内存数据结构之前,先将其写入BookKeeper。此外,任何需要单点写入并保证高性能和数据持久性的场景都非常适合使用BookKeeper。

### 技术背景
BookKeeper最初是为了解决Hadoop 2.0中NameNode高可用性的问题而设计的。在Hadoop中,NameNode在修改记录前会先将日志写入本地磁盘,但这种做法存在风险:如果NameNode发生故障,可能连本地磁盘都无法访问,导致日志丢失。因此,引入了BookKeeper作为可靠的外部存储解决方案,以提高系统的容错能力。

### 系统架构
BookKeeper的核心组件是多个负责读写日志的服务节点,称为Bookies。每个Bookie存储了写入BookKeeper的预写日志及其数据内容。这些日志流被称为Ledgers,每个Ledger是一个日志文件,其中的每个日志单元称为Ledger Entry。Ledgers仅支持追加操作,并且同一时间只能由一个线程进行写入。ZooKeeper则作为BookKeeper的元数据管理服务,存储Ledgers的相关元数据,如当前可用的Bookies列表和Ledgers的分布情况。

#### 高可用性和扩展性
BookKeeper通过向多个存储节点写入数据来实现高可用性,并通过数据一致性算法来解决因异常导致的多节点数据不一致问题。只要系统中有足够的Bookies可用,BookKeeper就能保持服务可用。启动BookKeeper时,需要配置ensemble值(最小可用Bookies数量)和quorums值(日志冗余份数)。BookKeeper的扩展性体现在可以通过增加Bookies的数量来提升系统的读写吞吐量。

### 存储机制
在BookKeeper中,Ledgers的记录会被汇聚并顺序写入Entry Log,而读取则是随机的。为了提高读取性能,每个Bookie为每个Ledger维护一个Ledger Indexes,该索引映射了日志实体的位置与Ledger的关系。通常,Journal(日志)与日志实体(Entry Log和Ledger Indexes)分开存储,以减少写入I/O的竞争。Journal采用同步落盘的方式持久化,而Entry Log则先缓存在Page Cache中,然后异步刷盘。

### 实际应用案例
BookKeeper在Yahoo的消息系统中得到了广泛应用,尤其是其多租户分布式消息系统(Cloud Message Service, CMS)。CMS支持尽力投递和保证投递两种模式,后者能够应对网络、磁盘和服务器故障。CMS利用BookKeeper作为消息存储和可靠的消息队列,同时在BookKeeper上维护每个消息的消费位置,确保至少一次的投递。

#### CMS使用BookKeeper的优势
- **广泛的部署**:CMS已在10多个数据中心部署,实现全网备份。
- **大规模消息处理**:每天处理约100亿条消息,预计到2015年底将达到1000亿条。
- **强大的硬件支持**:已部署250多台服务器,计划到2015年底扩展至1500台以上。
- **丰富的队列资源**:目前拥有25000个队列,预计增长至百万级别。
- **广泛的应用**:支持Yahoo内部60多个应用,包括移动消息系统、天气系统、广告平台等。
- **可靠的表现**:BookKeeper在CMS中的表现优异,为达到2015年的目标提供了信心。

### 未来挑战
尽管BookKeeper在可扩展性和可靠性方面表现出色,但仍面临一些挑战,包括但不限于:
1. **优化缓存**:提升每台Bookie的吞吐量至10倍。
2. **增加Ledgers数量**:使每台Bookie能支持更多Ledgers。
3. **增强租户隔离**:确保在高读负载下的性能。
4. **降低延迟**:将发布延迟降至1毫秒以下。

### 参考资料
1. [BookKeeper: Yahoo’s Distributed Log Storage is Now Open Source](https://yahooeng.tumblr.com/post/109908973316/BookKeeper-yahoos-distributed-log-storage-is)
2. [Apache BookKeeper Overview](http://BookKeeper.apache.org/docs/master/BookKeeperOverview.html)
3. [Apache BookKeeper Ledgers to Logs](http://BookKeeper.apache.org/docs/master/BookKeeperLedgers2Logs.html)
推荐阅读
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 本文介绍了在CentOS 6.4系统中安装MySQL 5.5.37时遇到的启动失败和PID文件问题,并提供了详细的解决方案,包括日志分析、权限检查等步骤。 ... [详细]
  • 深入解析:主流开源分布式文件系统综述
    本文详细探讨了几款主流的开源分布式文件系统,包括HDFS、MooseFS、Lustre、GlusterFS和CephFS,重点分析了它们的元数据管理和数据一致性机制,旨在为读者提供深入的技术见解。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 优化使用Apache + Memcached-Session-Manager + Tomcat集群方案
    本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ... [详细]
  • 本文详细介绍了Rsync的数据同步工具,包括其核心算法、安装配置方法以及实际应用中的注意事项,适合IT运维人员和技术爱好者阅读。 ... [详细]
  • 本文详细介绍了 Apache ZooKeeper 的 FileTxnLog 类中的 setPreallocSize 方法,并提供了多个实际应用中的代码示例。通过这些示例,读者可以更好地理解如何在不同场景下合理设置日志文件的预分配大小。 ... [详细]
  • 本文详细记录了一次 HBase RegionServer 异常宕机的情况,包括具体的错误信息和可能的原因分析。通过此案例,探讨了如何有效诊断并解决 HBase 中常见的 RegionServer 挂起问题。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ... [详细]
  • 本文详细介绍了如何在路由器上配置PPP(点对点协议)PAP(密码认证协议)认证,包括DCE和DTE两端的具体配置步骤,旨在帮助网络管理员有效实施安全的链路认证。 ... [详细]
  • 大数据时代的机器学习:人工特征工程与线性模型的局限
    本文探讨了在大数据背景下,人工特征工程与线性模型的应用及其局限性。随着数据量的激增和技术的进步,传统的特征工程方法面临挑战,文章提出了未来发展的可能方向。 ... [详细]
author-avatar
阿门路亚_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有