首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
loops
foreach
uml
netty
text
audio
version
buffer
char
jsp
random
scala
search
subset
cPlusPlus
go
split
input
heap
post
shell
bytecode
controller
join
cookie
c语言
ascii
testing
erlang
integer
cmd
stream
require
dockerfile
process
spring
python3
io
chat
future
eval
flutter
emoji
md5
copy
grid
httpclient
install
sum
bash
golang
window
merge
node.js
python
jar
cpython
replace
express
hashset
command
数组
range
substring
ip
php5
js
lua
typescript
match
runtime
format
yaml
plugins
web3
schema
callback
bit
instance
当前位置:
开发笔记
>
编程语言
> 正文
深入解析BookKeeper的设计与应用场景
作者:阿门路亚_ | 来源:互联网 | 2024-12-19 11:08
本文介绍了由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)
python
日志
storage
hadoop
hdfs
server
byte
文件
算法
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
go
全面解析运维监控:白盒与黑盒监控及四大黄金指标
本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ...
[详细]
蜡笔小新 2024-12-22 14:02:29
go
Flink 与 YARN 的集成
本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ...
[详细]
蜡笔小新 2024-12-24 11:15:38
input
Hadoop入门与核心组件详解
本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ...
[详细]
蜡笔小新 2024-12-26 13:12:48
input
深入解析Hadoop的核心组件与工作原理
本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ...
[详细]
蜡笔小新 2024-12-19 17:17:51
version
深入理解设计模式与七大原则
本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ...
[详细]
蜡笔小新 2024-12-27 19:10:10
random
Java并发编程:LinkedBlockingQueue的实际应用
本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ...
[详细]
蜡笔小新 2024-12-27 18:51:49
jsp
高效解决应用崩溃问题!友盟新版错误分析工具全面升级
友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ...
[详细]
蜡笔小新 2024-12-26 14:11:47
shell
微软Exchange服务器遭遇2022年版“千年虫”漏洞
微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ...
[详细]
蜡笔小新 2024-12-25 14:08:03
shell
深入解析 Apache Flink 的保存点机制
在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ...
[详细]
蜡笔小新 2024-12-24 16:57:24
shell
深入解析Redis内存对象模型
本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ...
[详细]
蜡笔小新 2024-12-23 14:50:23
join
Netflix利用Druid实现高效实时数据分析
本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ...
[详细]
蜡笔小新 2024-12-23 11:10:01
ascii
MapReduce原理是怎么剖析的
这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ...
[详细]
蜡笔小新 2024-12-16 18:23:06
ascii
网络攻防实战:从HTTP到HTTPS的演变
本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ...
[详细]
蜡笔小新 2024-12-27 11:34:50
ascii
寻找满足特定条件的整数N的最大和(a+b)
本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ...
[详细]
蜡笔小新 2024-12-26 19:26:18
go
Alluxio 1.5.0 版本发布:增强功能与优化
Alluxio 1.5.0 开源版本引入了多项新特性和改进,旨在提升数据访问速度和系统互操作性。 ...
[详细]
蜡笔小新 2024-12-10 10:47:59
阿门路亚_
这个家伙很懒,什么也没留下!
Tags | 热门标签
loops
foreach
uml
netty
text
audio
version
buffer
char
jsp
random
scala
search
subset
cPlusPlus
go
split
input
heap
post
shell
bytecode
controller
join
cookie
c语言
ascii
testing
erlang
integer
RankList | 热门文章
1
php mysql utf 8_PHP+MySQL中对UTF8,UTF8(utf8),set names gbk 的理解
2
2022.01.13 激活(JetBrains全家桶)
3
inet_ntoa()返回字符串的生命周期
4
使用crypto-js的md5加密
5
程序员怒怼外包公司HR:1万块钱还想招C语言开发,简直石乐志!
6
python 让繁琐工作自动化
7
ios POST 信息
8
php frame 空白,php加载frameset页面时显示空白怎么办
9
氟吡汀,Flupirtine,cas:56995201
10
获取键盘鼠标操作的函数(GetAsyncKeyState ())
11
初练接口测试脚本
12
org.apache.hadoop.hbase.security.visibility.Authorizations.
()方法的使用及代码示例
13
spark案例解析(全国农产品市场与省份)
14
sed命令解析
15
中文分词_中文分词技术小结几大分词引擎的介绍与比较
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有