• 1. OceanBase 千亿级海量数据库2011.4 日照:rizhao.ych@taobao.com1
  • 2. Agenda存储需求与现有方案 Oceanbase技术方案 收藏夹应用案例 系统展望2
  • 3. 海量数据的挑战2010部分运营数据 注册会员:3.7亿,来访人群峰值6000万 日PV:超过20亿 在线商品数:8亿 每分钟销售商品:4.8万 交易额:单日超10亿,光棍节 19.5亿 淘宝商品库、评价库、交易订单库、用户库、店铺库… 今后几年信息量还将增长几倍到几十倍 分库分表也不一定总是奏效3数据来源:http://www.alibuybuy.com/posts/52702.html
  • 4. 互联网数据库互联网时代的数据库 支持80%以上互联网在线应用 数据规模:百TB级,百台机器 OLTP:几十万QPS,几万TPS OLAP:支持千万级记录实时计算 定义支持的SQL子集标准 支持MapReduce等时髦计算模型 TPC-E 更多,。。。4
  • 5. 现有存储方案对照NoSQL系统 数据容量大、可扩展性好、容错能力强 没有跨行跨表事务、数据一致性弱5数据规模事务与数据一致性万亿记录(十PB)千亿记录(百TB)千万记录(百GB)十亿记录(TB)最终一致单行事务跨行跨表事务RDBMSCassandraHBaseMegastoreOceanBaseDynamoBigtable
  • 6. OceanBase始于2010年5月 海量数据存储特点的进一步分析 数据量大但修改量较小,一亿次更新 * 100B = 10G 区分最新修改的数据和老数据? OceanBase = RDBMS + 云存储 动态数据(增删改):单机之内存+SSD 静态数据:静态B+树,多机 数据 = 静态数据+动态数据 事务:集中化写事务+分布式读事务6
  • 7. OceanBase系统架构主控服务器RootServer:主+备,数据定位/全局Schema/机器管理… 动态数据服务器UpdateServer:主+备,实时修改(内存+SSD) 静态数据服务器ChunkServer:多台,静态数据存储 (磁盘或SSD) 动态数据不断地被合并到静态ChunkServer中实现分布式存储7JavaClientChunkServerChunkServerChunkServerChunkServerRootServer/ UpdateServer (主)RootServer/ UpdateServer (备)
  • 8. 数据结构分布式Hash表 随机读,不支持范围查询; Hash划分均匀; 两种Hash:取模Hash与一致性Hash 实例:Tair,Memcache,Dynamo,Cassandra 分布式B+ Tree 随机读和顺序扫描,支持范围查询; 顺序划分不均匀,需要叶子节点分裂合并 实例:Bigtable & HBase,Google Megastore Oceanbase数据结构 动态数据:单机B+树 静态数据:分布式B+树 新的静态数据 = 老的静态数据 + 动态数据8
  • 9. 可扩展性 & 可靠性可扩展性 静态数据服务器ChunkServer 机器动态上下线 动态数据服务器UpdateServer 内存+SSD服务,多网卡,万兆网卡 备提供读服务 可靠性 静态数据服务器ChunkServer 数据存储多份,一般为3份 动态数据服务器UpdateServer Commit log + RAID 1磁盘 实时本地热备(主+备) + 准实时异地热备 定位服务器RootServer 实时本地热备(主+备) + 准实时异地热备 9
  • 10. 事务&一致性数据库事务 单机写事务 +分布式读事务 支持跨表事务 一致性选择 弱一致性 最终一致性 强一致性 本地实时同步,异地准实时同步10
  • 11. 负载平衡 & 读写分离自动负载均衡 RootServer总体协调 负载均衡因素:内存,磁盘等资源占用,读写负载等; 数据迁移:迁移过程不影响对外服务 读写分离 ChunkServer只读,简化设计并提高读性能 UpdateServer采用copy-on-write数据结构,写不影响读 Oceanbase系统读和写基本不干扰11
  • 12. 其它特性其它特性 在线修改schema 没有随机写,SSD友好 内置数据压缩,减少机器数量和网络数据流量 在线(不停机)系统版本升级12
  • 13. 写节点是否成瓶颈?CPU,内存,网络,磁盘… 内存容量 新增的记录:1千万条/天,1KB/条10GB/天 记录的修改:1亿条/天,100B/条10GB/天 网络:100,000QPS,100B/条10MB/s 磁盘 Commit log (bin log):Group commit 改进方案 SSD 多网卡、万兆网卡 …13
  • 14. 收藏夹的挑战收藏夹挑战 需求:查找一个用户的所有收藏的所有商品详情 收藏信息表保存收藏信息条目,40亿+ 收藏商品表保存收藏的商品详细信息,4亿+ 执行两张表的暴力Join?一个用户可以收藏数千商品 冗余商品详细信息到收藏表?一件商品可被数十万用户收藏14
  • 15. 收藏夹解决方案解决方案 收藏夹数据 = 静态数据 + 动态数据 静态数据:收藏信息表冗余存储商品详情信息 动态数据:收藏信息表和商品详情表分别存放到UpdateServer内存中 操作步骤: 顺序读取静态数据中用户的收藏信息及商品详情; 将动态数据中的用户收藏信息更新到读取结果中; 将动态数据中的用户收藏的商品信息更新到读取结果中;15
  • 16. 收藏夹性能收藏夹性能 数据膨胀:冗余收藏item信息到收藏info表:~1.6TB(压缩前)/800GB(压缩后) 平均响应时间<50ms Mysql 16 * 2减少为Oceanbase 12 + 216
  • 17. Oceanbase性能Oceanbase性能 4 ChunkServer, 2 * E5520 @2.27HZ, 10 * 300GB SAS, 16GB 21亿条记录, 压缩后160GB * 3, 10k块, 随机读, cache基本不命中 17/26响应时间长:同步读 -> 预读CS load高:全异步模型
  • 18. UpdateServer性能UpdateServer性能 2 * E5520 @ 2.27HZ, 24G, 千兆网卡 待优化点 优化网络框架内存分配:优化后 QPS > 10W 减少任务队列导致的上下文切换:优化后 QPS > 20W 结论:UPS不是性能瓶颈 18Size(byte)2010010242048QPS78000760007000055000Context Switch26W25W21W13W
  • 19. 经验教训高性能服务器 数据拷贝:Direct IO,权衡接口模块化与性能 内存分配:内存池,线程缓存 锁:线程缓存,减少Cache锁冲突,copy-on-write数据结构 上下文切换:替换基于任务队列的网络模型19
  • 20. Oceanbase展望支持OLAP应用 列式存储 Blob支持 MapReduce TPC-E 代码开源 … 20
  • 21. 个人博客:http://nosqlnotes.net 21谢谢