HBase 在小米中的应用实践


HBASE AT XIAOMI 小米科技 基础平台开发组 大纲  HBase原理简介  HBase在小米的现状  HBase在小米业务的应用  小米对于HBase的重要改进  结构化数据存储服务  将来的工作 HBase原理简介  数据模型  Column, Rowkey, Table HBase原理简介  HBase架构  Region & Region Server  (RowKey, CF:Qualifier, Timestamp) => Value HBase原理简介  HBase架构 HBase在小米的现状  集群与业务(截止2014.03.24)  15个HBase集群:9个在线集群、2个离线处理集群、 4个测试集群  服务十多个不同业务  百台机器:每个数据节点24TB  开发与贡献(截止2014.03.24)  源于社区、回馈社区  217个改进,125个被采用 HBase在小米业务的应用  服务十多个不同业务  米聊消息全存储  小米云服务(MiCloud)  短信、通话记录  小米推送服务  选用HBase的原因  水平扩展能力:MiCloud大数据场景  高可用性:7 * 24 小时服务  灵活的Schema:业务不断发展也会有修改Schema需求  多版本特性:追踪米聊消息状态  写性能优化:小米Push推送消息时高吞吐量写  强一致性 HBase在小米业务的应用  配置  控制节点,数据节点 HBase在小米业务的应用  Minos集群部署和监控系统  https://github.com/xiaomi/Minos  bootstrap/install/start/stop/restart/rolling_update…  集群监控和展示 小米对于HBase的重要改进  写吞吐优化  HLog旧写模型 WriteHandler WriteHandler WriteHandler …… Local Append Buffer WriteHandler : Write to HDFS WriteHandler : Sync HDFS WALEdit WALEdit WALEdit WriteHandler之间 抢锁恶性竞争 …… 小米对于HBase的重要改进  写吞吐优化  HLog新写模型 WriteHandler: txid_0 WriteHandler: txid_1 WriteHandler: txid_n …… Local Append Buffer AsyncWriter: Write to HDFS AsyncFlusher: Sync HDFS WALEdit WALEdit WALEdit AsyncNotifier: Notify all WriteHanders …… Notify with maxTxid Notify with maxTxid Write 和Sync Hdfs由单独 线程完成,无锁竞争 Notify with txid Notify with maxTxid 小米对于HBase的重要改进  写吞吐优化  0.98 : https://issues.apache.org/jira/browse/HBASE-8755  trunk : https://issues.apache.org/jira/browse/HBASE-10156 0 10000 20000 30000 40000 50000 60000 70000 1 3 5 10 25 50 100 200 优化前 优化后 反向扫描  https://issues.apache.org/jira/browse/HBASE-4811  性能:比正向scan差30%,与levelDB下降相当 row1: v11 row1: v12 row4: v41 row4: v42 …… row2: v21 row2: v22 row5: v51 row5: v52 row3: v31 row3: v32 row6: v61 row6: v62 …… …… …… MemStore StoreFile_1 StoreFile_n Max 反向seek到当 前行首 反向seek到上 一行行首 可控粒度的跨机房备份  改进:per-peer可以配置从master集群replicate哪 些数据(per-table / per-CF)  使用:set_peer_tableCFs  https://issues.apache.org/jira/browse/HBASE-8751 Peer 1 T2:cf1 T1, T3, Master : T1/T2/T3/T4 Peer 2 Region内跨行原子性  现状:同一次batch操作的同region跨行写没有 原子性保证  改进:同一次batch操作的同region的所有写在 获得所有行的锁后一次落地  确保按照rowkey顺序抢锁、避免死锁  局部二级索引  前缀分割策略:KeyDelimiterPrefixRegionSplitPolicy  局部二级索引必须使用KeyDelimiterPrefixRegionSplitPolicy 结构化数据存储服务  现状  目前HBase的使用方式是使用原生接口直接访问独 占的HBase集群  运维成本、资源浪费  开发难度、学习成本  解决方案  DAAS – Database as a Service  基于HBase,为(移动)应用开发者提供便捷,安全,共享, 可扩展的分布式NoSQL托管存储服务 结构化数据存储服务  目标  服务器端通用存储服务  提供通用数据存储服务。类似Amazon DynamoDB服务  App云端存储:存取用户私有数据  比如记事本应用,游戏进度同步,App的设置同步备份等。 类似于iCloud提供的key-value存储服务  App云端存储:存取应用公共数据  比如天气应用的天气数据 结构化数据存储服务  目标 App用户 私有数据 App 公共数据 结构化数据 存储服务 App Server AppTerminal … … 公有云存储服务 小米开放平台 结构化数据存储服务  主要功能  共享的分布式数据库  多租户集群资源共享  可配置的存储空间和QPS配额控制  安全访问控制  DDL/DML操作支持  丰富数据类型  局部二级索引支持  便捷的访问模式  RESTful API与SDK支持  支持服务器端通用存储服务(DynamoDB模式)  支持移动客户端直接访问数据(iCloud kv-store模式) 认证登录  管理功能  便捷的界面管理  MapReduce支持 结构化数据存储服务  快速使用  开发者到http://developer.xiaomi.com  选择“结构化存储服务”注册帐号  文档:http://dev.xiaomi.com/doc/?p=1958  开发者创建app,获得appid和appsecret  appsecret需要保密,不能发布到客户端  appid假定会分发到客户端  开发者创建属于他们app的表 结构化数据存储服务  快速使用  应用:云通讯录  用户查询公共号码  用户安全的访问自己的通讯录 结构化数据存储服务  快速开始  创建表 结构化数据存储服务  快速开始  创建表 结构化数据存储服务  快速开始  创建表 结构化数据存储服务  快速开始  创建表 结构化数据存储服务  快速开始  表操作 结构化数据存储服务  安全访问控制  匿名访问:只能读取允许匿名方法的公共表  支持小米账号登陆  第三方OAuth登陆  已支持小米、新浪、腾讯、人人 结构化数据存储服务  系统架构 结构化数据存储服务  数据模型 结构化数据存储服务  数据模型  主键rowkey存储格式  table name : record group key : pk index key parts  属性值存储  记录所有属性值存储在名为C的Family下  Column名字为属性名, cell的value存储属性值 结构化数据存储服务  DDL操作  CreateTable  DescribeTable  ShowTable  AlterTable  AlterAppInfo/GetAppInfo  DML操作  Set : Put/Increment/checkAndPut/checkAndDelete  Get  Delete  Scan  Batch  ScanAppUser 结构化数据存储服务  数据类型  整数类型  INT8, INT16, INT32, INT64  浮点数类型  FLOAT, DOUBLE  布尔类型  BOOLEAN  字符串类型  STRING  二进制  BINARY 结构化数据存储服务  条件查询  操作符  EQ, NE, GT, GE, LT, LE  逻辑运算  AND, OR 结构化数据存储服务  局部二级索引  原理: 同Region跨行事物的原子性  二级索引rowkey存储格式  table name : record group key : idx name : index key parts : pk index key parts  投影属性(projected attributes)的存储  数据放到独立的列簇 I 内 结构化数据存储服务  局部二级索引  通过二级索引查找跟通过主键查找具有统一的接口 (Scan API) 通过索引查询过程如下:  根据指定的索引属性值找到对应的索引项,从索引项中 读取主键指针  根据主键进行读取,如果存在则返回记录,如果不存 在,说明记录不存在且索引失效,清理索引项 结构化数据存储服务  表定义 结构化数据存储服务  应用记事本 结构化数据存储服务  应用现状  小米内部已经开始使用  每天过亿条数据量 将来的工作  HBase  跨行跨表原子性(实现原理同Google Percolator)  全局二级索引  Compaction优化. HBASE-9528  Failover优化. HBASE-9873  公有云服务  隔离与SLA  负载均衡  全局事务与全局索引  监控与统计  多语言SDK Q/A 微博:jianweicui, http://weibo.com/u/2694474163 邮箱:cuijianwei@xiaomi.com 博客:http://bigdata-blog.net/
还剩39页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

zoudzh

贡献于2014-05-25

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf