一个HBase优化案例分析:Facebook Messages系统问题与解决方案

HDFS设计的初衷是为了存储大文件(例如日志文件),面向批处理、顺序I/O的。然而架设在HDFS之上的HBase设计的初衷却是为了解决海量数据的随机读写的请求。把这两种设计初衷截然相反的组件怎么揉在一起的呢?这种分层的结构设计主要是为了使架构更清晰,HBase层和HDFS层各司其职;但是却带来了潜在的性能下降。在很多业务场景中大家使用HBase抱怨最多的两个问题就是:Java GC相关的问题和随机读写性能的问题。Facebook Messages(以下简称FM系统)系统可以说是HBase在online storage场景下的第一个案例(《Apache Hadoop Goes Realtime at Facebook》, SIGMOD 2011),最近他们在存储领域顶级会议FAST2014上发表了一篇论文《Analysis of HDFS Under HBase: A Facebook Messages Case Study》分析了他们在使用HBase中遇到的一些问题和解决方案,使用HBase做online storage的同学们可以参考下。

该论文首先讲了Facebook的分析方法包括tracing/analysis/simulation,FM系统的架构和文件与数据构成等,接下来开始分析FM系统在性能方面的一些问题,并提出了解决方案。

FM系统的主要读写I/O负载

Figure 2描述了每一层的I/O构成,解释了在FM系统对外请求中读占主导,但是由于logging/compaction/replication/caching导致写被严重放大。

HBase的设计是分层结构的,依次是DB逻辑层、FS逻辑层、底层系统逻辑层。DB逻辑层提供的对外使用的接口主要操作是put()和get()请求,这两个操作的数据都要写到HDFS上,其中读写比99/1(Figure 2中第一条)。

由于DB逻辑层内部为了保证数据的持久性会做logging,为了读取的高效率会做compaction,而且这两个操作都是写占主导的,所以把这两个操作(overheads)加上之后读写比为79/21(Figure 2中第二条)。

相当于调用put()操作向HBase写入的数据都是写入了两份:一份写入内存Memstore然后flush到HFile/HDFS,另一份通过logging直接写HLog/HDFS。Memstore中积累一定量的数据才会写HFile,这使得压缩比会比较高,而写HLog要求实时append record导致压缩比(HBASE-8155)相对较低,导致写被放大4倍以上。    

Compaction操作就是读取小的HFile到内存merge-sorting成大的HFile然后输出,加速HBase读操作。Compaction操作导致写被放大17倍以上,说明每部分数据平均被重复读写了17次,所以对于内容不变的大附件是不适合存储在HBase中的。由于读操作在FM业务中占主要比例,所以加速读操作对业务非常有帮助,所以compaction策略会比较激进。

HBase的数据reliable是靠HDFS层保证的,即HDFS的三备份策略。那么也就是上述对HDFS的写操作都会被转化成三倍的local file I/O和两倍的网络I/O。这样使得在本地磁盘I/O中衡量读写比变成了55/45。

然而由于对本地磁盘的读操作请求的数据会被本地OS的cache缓存,那么真正的读操作是由于cache miss引起的读操作的I/O量,这样使得读写比变成了36/64,写被进一步放大。    

另外Figure 3从I/O数据传输中真正业务需求的数据大小来看各个层次、各个操作引起的I/O变化。除了上面说的,还发现了整个系统最终存储在磁盘上有大量的cold data(占2/3),所以需要支持hot/cold数据分开存储。

总的来说,HBase stack的logging/compaction/replication/caching会放大写I/O,导致业务逻辑上读为主导的HBase系统在地层实际磁盘I/O中写占据了主导。

FM系统的主要文件类型和大小

时间: 2024-10-26 06:08:17

一个HBase优化案例分析:Facebook Messages系统问题与解决方案的相关文章

MySQL下的RAND()优化案例分析_Mysql

众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行.事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时. 首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表: [yejr@imysql]> show create table t_innodb_random\G *************************** 1. row *************************

一个MySQL优化案例的初步思路

今天想起这件同事处理的一个性能优化案例,当时虽然解决了,但是还是留下了几个未解的问题,和大家一起讨论一下. 首先,这个问题是根据反馈sql响应很慢,已经开始影响前端应用的登录了.稍后DBA介入,发现是由于CPU使用率过高导致,为了能够延缓问题和进一步分析,因为数据库中的数据量不大,直接就迁移到了另外一台配置不错的服务器上,但是迁移之后,CPU配置好了很多,问题依旧,同时也在进行问题的诊断和分析. 得到的慢日志如下,发现大多数的响应时间都耗费在了两个SQL上,其实出自同一个存储过程. 1.慢日志

性能为王:SQL标量子查询的优化案例分析

黄廷忠(网名:认真就输) 云和恩墨技术专家 个人博客:http://www.htz.pw/ 本篇整理内容是黄廷忠在"云和恩墨大讲堂"微信分享中的讲解案例,SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能,从而为解决性能问题打下根基. 本篇为系列案例之一:标量子查询优化   以下案例来自于某省电信系统EDW性能优化实践,数据库版本为11.2.0.3,运行在ORACLE Exadata一体机上,是个典型的OLAP环境,表上

一个课堂打印案例分析

作者构造了Picture类,汇总需求细节,见招拆招,尤其在"接口设计"这一节里,把自己当成客户,跟自己一问一答("我希望有些什么操作,如何表述这些操作?"),逐步分析不断复杂的需求,然后抽象出接口,其中不乏作者的经验之谈:要想决定具体操作的形式,有一个好办法,就是试着使用这些操作,从使用的例子推导出操作的定义形式要比从头苦思冥想地发明这些操作容易得多. 1.最初需求是打印如下文字: Paris in the Spring 2.构造的Picture类,只需要一个构造函

从两个错误优化案例分析如何更好的处理重复内容

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 一个站点在长久的经营中不可规避的会出现相同的内容.假如一个站点上出现大量相似或者相同的内容,可想而知对于访客和搜索引擎都是十分的不友好的.如果你的相同重复内容问题很严重的还可能会被搜索引擎定义为是滥发来及信息,最终引来不必要的K站问题.根据笔者的经验,一般出现重复内容的原因有以下几点. 1.内容的重复更新:这是由于我们在发布内容的时候可能有意

IBM一个智慧城市案例分析

我们将介绍一个业务规则管理系统 (BRMS) 的完整的应用程序开发生命周期.我们将探讨 BRMS 架构.规则发现流程.规则应用程序开发和规则维护.这个智慧城市用例涉及到实现一个决策子系统,以在恶劣天气应急事件中在多个城市部门间进行智能协调.这个决策子系统基于 IBM WebSphere® ILOG® JRules 来自动化决策制定流程. 这个文章系列适用于不熟悉业务规则管理系统 (BRMS) 且希望理解创建决策服务的流程的架构师和开发人员.本文将说明选择 BRMS 和 IBM WebSphere

MySQL 传统复制中常见故障处理和结构优化案例分析

虽然MySQL5.7 的主从复制已经很稳定了,但在备库可读写的情况下,总是会出现部分数据不一致的情况,例如常见的1062.1032和1050错误.下面就介绍下这类报错的常见处理方法和常见主从复制结构的调整. 环境描述 1.mysql 5.7 以上, 2.binlog format 是row格式(5.7默认) 3.传统复制(生产强烈推荐使用gtid) 4.log-bin , log_slave_updates 开启 5.复制结构:101:3306> 103:3306 > 104:3306 常见主

Facebook的系统架构

根据我现有的阅读和谈话,我所理解的今天http://www.aliyun.com/zixun/aggregation/1560.html">Facebook的架构如下: Web 前端是由 PHP 写的.Facebook 的 HipHop 会把PHP转成 C++ 并用 g++编译,这样就可以为模板和Web逻贺业务层提供高的性能. 业务逻辑以Service的形式存在,其使用Thrift .这些Service根据需求的不同由PHP,C++或Java实现(也可以用到了其它的一些语言--) 用Jav

百度快速排名之案例分析

百度快速排名之案例分析-(一个医药网站的百度30天优化案例分析)网站名称香草醇.阿魏酸.高哌嗪.酚磺乙胺.羟苯磺酸钙-苏州布莱恩斯国际 :网站域名:http://www.szbles.com 网站在10月份接到优化的任务,11月中旬已经有词香草醇已经到第一名了.大家可以在百度上查的到. 先来分析一下关键词:香草醇百度收录(找到相关结果约2,070,000个)也就是说百度数据在200多万条.应该来说优化的难度不是很大.百度指数查不到关键词的指数可以说是很少人会查这样的词,换句话说只有专业的人士才会