原创百度大数据12-11 01:16

摘要: 2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕。百度大数据部的在线数据服务团队工程师杨嘉义为大家带来了主题演讲《SimpleDB-高性能在线数据服务系统》。

2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕。

作为国内最受关注的数据库技术大会,本届大会以“数据驱动·价值发现”为主题,汇集多个领域的百余位同行,与大家共同打造一场以数据为驱动力、为企业进行价值创造的技术盛会。

12日下午的NoSQL技术进展专场中,来自百度大数据部的在线数据服务团队工程师杨嘉义为大家带来了主题演讲《SimpleDB-高性能在线数据服务系统》。

杨嘉义从应用背景、系统架构、主要技术点、应用效果四个方面进行了分享:先分析了百度在线数据服务面临的主要问题,然后详细分析了在高性能、高可用在线数据库的设计思路及折中,给大家重点介绍了百度在K-V类型的NoSQL数据库的最新进展,最后介绍了SimpleDB的应用效果及收益。

第一部分应用背景,杨嘉义介绍了SimpleDB的需求、应用场景及设计目标。

需求包括:超高并发、超低延迟的在线数据读写;多地域数据写入、数据完整一致、服务高可用;同时需要访问实时和批量数据,访问权限控制;有复杂的业务计算逻辑,方便快速迭代的业务需求。应用场景主要有:session、用户属性等存储场景;分布式cache、id-mapping、RTB等实时辅助决策场景,及其他同时需要低延迟、海量数据存储的在线场景。系统的设计目标:性能上,支持数百万ops,10ms级延迟,P级存储;功能上,支持异地多活,多点写入,最终一致性,复杂UDF,过期淘汰等。


第二部分杨嘉义展示了系统架构(如下图)


杨嘉义分享的第三部分是最重要的也是主要技术点:高性能、高可用、最终一致性、实时批量数据融合、复杂业务计算服务、权限控制


第一点:高性能NoSQL数据库都会在传统特征和新兴场景之间做权衡取舍,SimpleDB为了满足高性能(高吞吐低延迟),舍弃或弱化了事务ACID与隔离级别支持、复杂查询支持、数据绝对不可丢等。单机引擎分为实时读写引擎和批量只读引擎。实时读写引擎,索引在内存,数据在RAMSSD,读数据最多一次落盘,写数据先写write-buffer然后异步flush SSD,没使用write-ahead log方式,提高了读写性能。批量只读引擎,自己设计了基于B+树只读KV引擎,MR产出数据文件,数据已分片且有序,按小时或天批量更新,只读不加锁,实现了从HDFS文件到在线服务全流程。


第二点:高可用。通过多副本实现服务高可用。多DC场景下,每个DC 3副本可以降到2副本,数据丢失概率不会增加,大幅减少机器资源。数据分库方面,实时和批量词表,都4096片数,分片数对用户透明,也能使得同一用户的实时和批量落到同一分片,加速跨表计算过程。也支持类似Twemproxy key tag方式将指定多个key强制分到同一库,这种方式在GraphDB中也经常使用(邻居节点存储在同一分片)。异地多活,用于灾备恢复、保证系统持续可用。每个DC都有数据读写,多点写入相互同步,任意一个DC故障时,流量可以切到其他临近DC DC内部主从同步:Read/writemaster,异步同步replicas,故障时数据从分片可切换成主。DC数据同步:链式同步, 减少跨地域网络带宽。元数据服务的高可用是多个无状态master加上Zookeeper来实现。


第三点:最终一致性。一致性方案是基于数据操作日志中的segmentIDsequenceID来实现的。数据操作日志,用来记录分片的所有数据操作并持久化,只存key相关信息,value从存储中读取。数据段segmentID标识当前DC内某partition正在写入的数据片段,sequenceID标识当前日志在数据片段中的序号。segmentID在数据M/S切换时会使用新版本,不同DC之间也会使用不同segmentID。对于某个partition的完整数据,包含所有segmentIDsequenceID段的数据。DC内及DC间分片之间通过交换版本及序列信息,拉取diff数据,记录同步进度,最终会达到各个DC所有副本数据的一致性。(示意图如下)

第四点,SimpleDB是典型的Lambda服务架构,融合batchreal-time数据;批量部分是DW + MR,经过精细化离线挖掘计算处理,按小时级或按天更新;实时部分是Kafka + ETL,简单计算,实时更新,端到端延迟低。第五点,支持复杂业务计算服务;抽象出两类计算类型:DIFData Independent Function)综合处理底层数据返回定制化的数据视图,DDFData Dependent Function)嵌入存储单元,高效简单处理本地数据;为提高迭代效率,实现了DIF的插件化和配置驱动,并支持迭代过程中的实验需求。第六点,权限控制:数据角色包含 admin, data provider, data user,有两层访问控制Table privilegeFunction privilege,通过 Grant命令做严格的权限管理。


最后,展示了应用效果,目前SimpleDB应用到大部分商业系统及部分用户产品,新系统大幅提升性能和可用性,并降低1/3资源消耗。如下图。