HBASEATXIAOMI小米科技基础平台开发组大纲HBase原理简介HBase在小米的现状HBase在小米业务的应用小米对于HBase的重要改进结构化数据存储服务将来的工作HBase原理简介数据模型Column,Rowkey,TableHBase原理简介HBase架构Region&RegionServer(RowKey,CF:Qualifier,Timestamp)=ValueHBase原理简介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集群部署和监控系统bootstrap/install/start/stop/restart/rolling_update…集群监控和展示小米对于HBase的重要改进写吞吐优化HLog旧写模型WriteHandlerWriteHandlerWriteHandler……LocalAppendBufferWriteHandler:WritetoHDFSWriteHandler:SyncHDFSWALEditWALEditWALEditWriteHandler之间抢锁恶性竞争……小米对于HBase的重要改进写吞吐优化HLog新写模型WriteHandler:txid_0WriteHandler:txid_1WriteHandler:txid_n……LocalAppendBufferAsyncWriter:WritetoHDFSAsyncFlusher:SyncHDFSWALEditWALEditWALEditAsyncNotifier:NotifyallWriteHanders……NotifywithmaxTxidNotifywithmaxTxidWrite和SyncHdfs由单独线程完成,无锁竞争NotifywithtxidNotifywithmaxTxid小米对于HBase的重要改进写吞吐优化0.98:trunk:优化前优化后反向扫描性能:比正向scan差30%,与levelDB下降相当row1:v11row1:v12row4:v41row4:v42……row2:v21row2:v22row5:v51row5:v52row3:v31row3:v32row6:v61row6:v62………………MemStoreStoreFile_1StoreFile_nMax反向seek到当前行首反向seek到上一行行首可控粒度的跨机房备份改进:per-peer可以配置从master集群replicate哪些数据(per-table/per-CF)使用:set_peer_tableCFs:cf1T1,T3,Master:T1/T2/T3/T4Peer2Region内跨行原子性现状:同一次batch操作的同region跨行写没有原子性保证改进:同一次batch操作的同region的所有写在获得所有行的锁后一次落地确保按照rowkey顺序抢锁、避免死锁局部二级索引前缀分割策略:KeyDelimiterPrefixRegionSplitPolicy局部二级索引必须使用KeyDelimiterPrefixRegionSplitPolicy结构化数据存储服务现状目前HBase的使用方式是使用原生接口直接访问独占的HBase集群运维成本、资源浪费开发难度、学习成本解决方案DAAS–DatabaseasaService基于HBase,为(移动)应用开发者提供便捷,安全,共享,可扩展的分布式NoSQL托管存储服务结构化数据存储服务目标服务器端通用存储服务提供通用数据存储服务。类似AmazonDynamoDB服务App云端存储:存取用户私有数据比如记事本应用,游戏进度同步,App的设置同步备份等。类似于iCloud提供的key-value存储服务App云端存储:存取应用公共数据比如天气应用的天气数据结构化数据存储服务目标App用户私有数据App公共数据结构化数据存储服务AppServerAppTerminal……公有云存储服务小米开放平台结构化数据存储服务主要功能共享的分布式数据库多租户集群资源共享可配置的存储空间和QPS配额控制安全访问控制DDL/DML操作支持丰富数据类型局部二级索引支持便捷的访问模式RESTfulAPI与SDK支持支持服务器端通用存储服务(DynamoDB模式)支持移动客户端直接访问数据(iCloudkv-store模式)认证登录管理功能便捷的界面管理MapReduce支持结构化数据存储服务快速使用开发者到选择“结构化存储服务”注册帐号文档:=1958开发者创建app,获得appid和appsecretappsecret需要保密,不能发布到客户端appid假定会分发到客户端开发者创建属于他们app的表结构化数据存储服务快速使用应用:云通讯录用户查询公共号码用户安全的访问自己的通讯录结构化数据存储服务快速开始创建表结构化数据存储服务快速开始创建表结构化数据存储服务快速开始创建表结构化数据存储服务快速开始创建表结构化数据存储服务快速开始表操作结构化数据存储服务安全访问控制匿名访问:只能读取允许匿名方法的公共表支持小米账号登陆第三方OAuth登陆已支持小米、新浪、腾讯、人人结构化数据存储服务系统架构结构化数据存储服务数据模型结构化数据存储服务数据模型主键rowkey存储格式tablename:recordgroupkey:pkindexkeyparts属性值存储记录所有属性值存储在名为C的Family下Column名字为属性名,cell的value存储属性值结构化数据存储服务DDL操作CreateTableDescribeTableShowTableAlterTableAlterAppInfo/GetAppInfoDML操作Set:Put/Increment/checkAndPut/checkAndDeleteGetDeleteScanBatchScanAppUser结构化数据存储服务数据类型整数类型INT8,INT16,INT32,INT64浮点数类型FLOAT,DOUBLE布尔类型BOOLEAN字符串类型STRING二进制BINARY结构化数据存储服务条件查询操作符EQ,NE,GT,GE,LT,LE逻辑运算AND,OR结构化数据存储服务局部二级索引原理:同Region跨行事物的原子性二级索引rowkey存储格式tablename:recordgroupkey:idxname:indexkeyparts:pkindexkeyparts投影属性(projectedattributes)的存储数据放到独立的列簇I内结构化数据存储服务局部二级索引通过二级索引查找跟通过主键查找具有统一的接口(ScanAPI)通过索引查询过程如下:根据指定的索引属性值找到对应的索引项,从索引项中读取主键指针根据主键进行读取,如果存在则返回记录,如果不存在,说明记录不存在且索引失效,清理索引项结构化数据存储服务表定义结构化数据存储服务应用记事本结构化数据存储服务应用现状小米内部已经开始使用每天过亿条数据量将来的工作HBase跨行跨表原子性(实现原理同GooglePercolator)全局二级索引Compaction优化.HBASE-9528Failover优化.HBASE-9873公有云服务隔离与SLA负载均衡全局事务与全局索引监控与统计多语言SDKQ/A微博:jianweicui,邮箱:cuijianwei@xiaomi.com博客: