NoSQL在腾讯应用实践在腾讯应用实践
一、前言
NoSQL的历史很长,最早可以追朔到Berkeley DB等嵌入式数据库的年代。互联网行业的高速发展对大数据的需求,为
NoSQL的发展起到了推波助澜的作用。互联网时代的NoSQL,源起于Google为解决大数据的存储与计算而提出的GFS +
Bigtable + Map Reduce。随后Hadoop(Hdfs+Hbase+MapReduce)、 Hypertable、Memcached,Tokyo cabinet,Redis,
Dynamo,Cassandra等等NoSQL产品雨后春笋般的推出,使得NoSQL技术广泛应用于互联网各个领域。
在腾讯过去的几年中,互联网社交平台取得令人瞩目的发展。包括平台用户基数、在线、应用数都取得突飞猛进的增长;另外
随着开放的加剧,还有越来越多的第三方选择社交平台开发应用。这些外部条件的变化对技术平台的而言,也带来了新挑战:
除需要为用户提供更强的海量服务外,同时还需要提供开放的软件基础架构来帮助第三方开发海量服务。
在解决这些问题的实践中,总结了很多经验。其中关键一点则是通过NoSQL技术来构建海量服务的数据层,并通过分析和总
结出不同的业务场景和技术特点,为各种场景提供更合适的数据层解决方案。具体而言:
相册、日志等UGC类应用,主要是自我产生数据,他人以浏览为主,其技术特点是读取量巨大,修改量低于读取量一个量
级,数据量从几百T至P级不等。提供SAS、SATA级的TDB、TFS解决方案。
农牧场等Social Game类应用,核心数据是用户背包数据,互动性很强,其技术特点是巨大读取量与修改量,数据量在百G级
别。提供MEM级的TMEM解决方案。
信息中心的Feeds类应用,其技术特点是巨大的修改量与读取量,数据量也在几十T到几百T不等。提供SSD级的TSSD解决方
案。
二、【2006~2008】因QQ相册而研发TFS、TDB
回顾NoSQL在腾讯的发展历程,需要从2006年腾讯分布式文件系统TFS的研发开始谈起,TFS目的是在公司内部构建统一的
存储平台,为各个BU提供文件系统服务。第一期的重点是要能够支持到QQ相册的快速发展。当时QQ相册使用传统企业级存
储硬件+标准Linux文件系统的老架构,在数百亿的图片数,每天近10亿长尾下载的规模下已难以为继。通过分析,老架构主
要有下面三个问题:
1.采用FC-SAN等高端企业级存储硬件,这些硬件主要是针对电信、银行等高ARPU值的行业客户而生,价格通常比较贵,对
盛行免费的互联网企业来说,成本压力大。
2.使用通用的Linux文件系统,对相册海量小文件的场景,空间利用和IO性能都不能很好的满足要求。
3.元数据与对象数据耦合,扩展性和可维护性较差,单机故障以及扩容都是异常繁琐的运维操作。
TFS采用廉价的存储设备,在软件层面使用类似软raid的技术来满足系统基于不可靠硬件的可靠性要求。将对象数据与元数据
分离:对象数据存储采用自研的CHUNK文件系统,inode节点更小,空间分配采用了基于append + delete更为紧凑的管理方
式,使得单机最大可以支持数10亿的图片文件;元数据使用MYSQL存储。系统架构如下: