网易分布式数据库平台王磊王磊王磊王磊@@@@网易杭研院网易杭研院网易杭研院网易杭研院wanglei@corp.netease.comwanglei@corp.netease.comwanglei@corp.netease.comwanglei@corp.netease.com平台简介平台简介平台简介平台简介•网易分布式数据库平台(DDB)是一种面向结构化数据存储的通用解决方案,基于关系数据库集群解决结构化数据的海量存储和高效访问。•设计目标:–海量结构化数据存储(10TB以上)–高并发、低延迟–面向关系数据模型和OLTP–方便应用开发、通用性强–可动态扩展–数据安全可靠–方便维护性–低成本功能特点功能特点功能特点功能特点•基于Sharding的ScaleOut•支持常用的RDB功能:DDL、DML、全局ID分配等•事务支持:节点内、跨节点、跨DDB。•多平台和多语言环境下的通用透明的SQL访问接口•支持MySQL和Oracle混合使用。•支持读写分离和读操作负载均衡•支持用户管理和权限控制•支持在线扩容•命令行和图形化管理工具。系统架构系统架构系统架构系统架构管理服务器MasterDBA管理工具客户机(Client)Java程序DBI查询服务器(QS)DDBJDBCQuryServer客户机(Client)应用程序C/Python/PHP/Java/...数据库节点(DBN)MySQL/Oracle数据库节点(DBN)MySQL/Oracle数据库节点(DBN)MySQL/Oracle控制流数据流ShardingShardingShardingSharding实现实现实现实现•均衡字段:用来定位记录所在DBN的表字段。•均衡策略:均衡函数、桶、存储映射表。•表--均衡策略:多对一逻辑IDHSN1SN2哈希函数(固定)哈希表存储映射表(可调整)负载信息DBN1DBN2均衡字段值均衡函数桶查询处理流程查询处理流程查询处理流程查询处理流程查询计划SN1SELECT*FROMTWHEREa=1ORDERBYbLIMIT100OFFSET100SELECT*FROMTWHEREa=1ORDERBYbLIMIT200SELECT*FROMTWHEREa=1ORDERBYbLIMIT200SN2语法解析计划生成计划执行MERGESORTLIMITSN1,SN2T,a=1存储映射表根据“存储映射表”与查询条件,可决定相关存储节点各后台数据库查询结果,按bbbb排好序ORDERBYbLIMIT100OFFSET100查询结果发送给后台的SQLSQLSQLSQL语句,可能与原语句不同DBN1DBN2查询处理实现原则查询处理实现原则查询处理实现原则查询处理实现原则•选择合适的DBN执行子查询:(表,均衡字段值)--DBN•子查询尽可能并行执行•排序操作尽量下推给DBN执行,可以充分利用索引•多表查询尽量不拆分子查询,充分利用DBN实现Join•消除子查询中的不必要条件,提高子查询的执行效率•尽量采用流(游标)的方式处理中间结果查询处理查询处理查询处理查询处理CacheCacheCacheCache优化优化优化优化•DBIDBIDBIDBI中的中的中的中的CacheCacheCacheCache–MetaDataCache–DBNConnectionPool–DBNPreparedStatementCache–SQLSyntaxTreeCache•基于基于基于基于MySQLMySQLMySQLMySQL的数据的数据的数据的数据缓存缓存缓存缓存–SQLCachehint–可持久化的MemoryTable分布式事务分布式事务分布式事务分布式事务•遵循XATransaction标准•两阶段提交+事务日志,保证ACID•悬挂事务处理•提高事务处理效率–“延迟”启动分支事务–并发执行分支事务–尽量避免两阶段提交,一阶段提交不写日志–尽量避免使用XA连接读写分离读写分离读写分离读写分离•支持对Master和各Slave节点的读操作设置权重•限制从延迟过大的Slave上读取数据•通过hint指定select语句的数据来源和延迟限制–MasterOnly:只在Master上执行(默认)–SlaveOnly:只在Slave上执行–SlavePerfer:优先在Slave上执行–LoadBalance:根据权重选择节点执行/*LOADBALANCE(TYPE=slaveonly,DELAY=60)*/select…Slave1MasterSlave2DBIWriteReadReadRead全局全局全局全局IDIDIDID分配分配分配分配•问题:问题:问题:问题:集群环境下依赖DBN分配的ID会产生冲突•挑战:挑战:挑战:挑战:依赖于中心节点分配ID容易造成单点故障和性能瓶颈•方案一:方案一:方案一:方案一:中心节点批量分配ID,缓存在DBI•优点:实现简单,执行效率高,可指定起始值。•缺点:分配的ID非全局递增,依然存在单点故障。•方案二:方案二:方案二:方案二:基于DBI的本地时间戳+ClientID+计数器构建ID•优点:ID全局递增,ID中包含了时间戳,分配效率高,无单点故障。•缺点:无法从某个指定值开始分配,ID不连续。管理工具管理工具管理工具管理工具•Schema和配置管理–DBN,Client,table,policy,trigger,view,routine•用户管理•系统状态监控和报警管理•SQL执行统计分析•数据备份•系统扩容•计划任务用户和权限管理用户和权限管理用户和权限管理用户和权限管理•访问认证访问认证访问认证访问认证–用户名、口令认证和IP地址检查–DDB认证+DBN(RDBMS)认证•权限管理权限管理权限管理权限管理–区分普通用户和管理员用户–权限粒度控制到表的读、写和授权–用户访问配额控制–管理员权限细分:Schema配置、维护、监控统计、用户管理–管理员操作日志状态监控状态监控状态监控状态监控•DBIDBIDBIDBI状态监视状态监视状态监视状态监视–DBN连接池状态,占用连接的线程堆栈–资源使用情况:Connection/Statement/PS–内部操作统计:内部资源创建销毁、Cache命中率、事务操作等•DBNDBNDBNDBN状态监控状态监控状态监控状态监控–心跳监视,故障时切换到StandbyNode。–Session自动监视、统计和报警–SlowLog自动监视、统计和报警–复制延迟和异常自动监视报警•QueryServerQueryServerQueryServerQueryServer状态监控状态监控状态监控状态监控–心跳和负载监控SQLSQLSQLSQL执行分析执行分析执行分析执行分析————————ExplainSQLExplainSQLExplainSQLExplainSQLisql@dbiexplainselectdocidfromFS_Fileorderbyiddesclimit10;+-------------------------------------------------------------------------------------+|PLAN|+-------------------------------------------------------------------------------------+|LIMIT/OFFSET||/\||/||\||||||PROJECT||Projectrecordto:docid,||/\||/||\||||||MERGE-SELECT||SQL:SELECTdocid,idFROMFS_FileORDERBYidDESCLIMIT10||DestNode:||db-17-1[jdbc:mysql://172.17.2.48:4331/filestation]||db-17-2[jdbc:mysql://172.17.2.48:4332/filestation]||db-16-2[jdbc:mysql://172.17.2.47:4332/filestation]||db-16-1[jdbc:mysql://172.17.2.47:4331/filestation]||Orderby:idDESC,withmergesort.|+-------------------------------------------------------------------------------------+SQLSQLSQLSQL执行统计执行统计执行统计执行统计•计算SQL签名select*fromTwherea=?Andb=#•DDBSQL执行情况收集tables,dbns,clients,count,time,avg_time,mysql_count,mysql_time,dbn_count,rows•MySQLSQL执行情况收集handler_read_first,handler_read_key,hander_read_next,handler_read_rnd,hander_read_next,explain•结果汇总统计支持条件过滤、排序、分组等基本统计功能SQLSQLSQLSQL执行统计执行统计执行统计执行统计计划任务计划任务计划任务计划任务•大多数管理操作支持命令行方式执行•多任务定时执行•支持异常处理•执行结果通知和报警•任务执行日志•支持多种模式:DBA、DBI、DBN、SSH系统扩容系统扩容系统扩容系统扩容•技术挑战技术挑战技术挑战技术挑战–降低对线上服务的影响–灵活地扩充资源–降低操作复杂度–保证执行效率•实现原理实现原理实现原理实现原理SN1SN2哈希表存储映射表(可调整)7597487负载9+7+7=23负载7+5+4+8=24SN3SN1SN2哈希表存储映射表(可调整)7597487负载信息负载9+7=16负载7+5+4=16负载8+7=15数据迁移后可选的扩容方案可选的扩容方案可选的扩容方案可选的扩容方案•方案一方案一方案一方案一:DBN间数据导出导入–优点:迁移效率较好,实现较简单,灵活性好–缺点:停服时间长,容易导致数据不一致,删除数据的负面影响•方案二方案二方案二方案二:基于事务的批量数据迁移–优点:不用停服,应用透明,灵活性好–缺点:实现复杂,迁移效率低,对线上访问有一定影响。•方案三方案三方案三方案三:基于数据复制的扩容–优点:对应用透明,不需停服,效率高,对线上访问基本无影响。–缺点:操作较为复杂,只能实现成倍扩容,灵活性较差。基于复制的DDB扩容0123AB0123C0123基于数据复制的扩容基于数据复制的扩容基于数据复制的扩容基于数据复制的扩容平台使用情况平台使用情况平台使用情况平台使用情况•目前应用的产品–网易博客–网易微博–网易相册–网易企业邮箱–邮箱网盘和超大附件–网易POPO(即时通信)–社区类游戏•存储节点数量400+•总数据量60TB面临的问题和挑战面临的问题和挑战面临的问题和挑战面临的问题和挑战•DBN连接资源限制•历史数据处理•NoSQL+RDB?•云存储–扩展的灵活性、自动化和可靠性–访问隔离小结小结小结小结•基于Sharding实现海量数据存储和高并发访问•优化查询处理提高执行效率和并发能力•支持分布式事务和复杂查询提高平台通用性•监控、分析和统计工具帮助开发和DBA发现和解决问题•功能丰富的管理工具简化集群系统的运维