窥探QQ基础数据库架构演变史

openkk 12年前
   <p>        作为腾讯最核心最基础的后台服务之一,QQ 基础数据库是存储 QQ 用户帐户信息和关系链信息的海量集群,它承载了百万级每秒的访问量、十亿级的账户数、百亿级关系链。如此大规模的集群,它是如何从 300 万的数量级一步一步演变而来?在它数据量不断增长的过程中,它经历了哪些困难,又是如何解决的?如今,它的架构是怎么样的?4月 10 日晚,腾讯大讲堂《QQ 基础数据库架构演变之路》活动在武汉人文馆主厅举办。超过 1000 位学生和业内人士到场参加,整个会议厅人山人海。</p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/db09c2ac0db74805361e8f19a9e81f72.jpg" width="554" height="367" /></a></p>    <p>        廖念波先生从 QQ Basic DB 是什么讲起,开始了本次的讲座。</p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/0641124fc8b7ea381d4ca6042db84647.jpg" width="554" height="364" /></a></p>    <p>        QQ Basic DB 是什么?是 QQ 用户帐号(用户密码与资料)与关系链等基础数据的分布式海量存储集群。是 QQ IM 业务的后台 DB;是腾讯几乎所有其他业务的基础,提供用户帐号和关系链服务。它与 QQ IM 集群并列为腾讯最核心、历史最久的两大集群。</p>    <p>        <strong>早期的难题</strong></p>    <p>        在 2000 年,QQ Basic DB 将每 300 万连续 QQ 号码存储在一个机器上。我们碰到的最大问题是在登录比较频繁的情况下,磁盘非常忙,登录超时。找到了影响磁盘随机寻址能力的因素,我们提出了解决方案在进 程空间内,动态分配一些内存,将用户热点数据 cache 到内存中。使得处理能力显著提升,单机能够处理1-2千次每秒的请求。</p>    <p>        时间进入 2002 年,随着机器台数增多,死机是家常便饭。QQ Basic DB 通过 IDC 级容灾、数据复制等方法将(500+)*2台机器;数百亿的关系链,数十亿的账户数;每秒上百万次读,数万次写的数据库的全年可用性做到了 99.99%。</p>    <p>        如何做到高可用?</p>    <p>        <strong>1、IDC 级的容灾</strong></p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/9ef62c64e2a4ce647c6bc6af18bba42a.jpg" width="384" height="419" /></a></p>    <p>        <strong>2、灰度发布</strong></p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/e37429af53b57e0119f22d3d463204ce.jpg" width="554" height="235" /></a></p>    <p>        <strong>3、强监控,及时处理</strong></p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/303e112475c550471e9bde7c43fac8c1.jpg" width="554" height="328" /></a></p>    <p>        Bison 提到,随着时代的变迁,需求不断增加,QQ Basic DB 走入了 V2.0。当前的需求与 DB 能力的脱节;一地的机房已饱和,异地部署逼在眉睫!新增一个帐号相关字段,需要 2 个月,把内存全部重新 load 一遍,风险极高。老的架构不能很好的支持异地部署,因此 QQ Basic DB V2.0 应运而生。</p>    <p>        在演讲中 Bison 特别强调,要做到产品特性灵活扩展,最关键的是用户数据结构的灵活性!QQ Basic DB 在 V2.0 版本中,对数据结构扩展性上进行了大量优化。现场 Bison 例举了一个很简单的例子:采用 XML 开式存储用户数据的优劣性。存储海量数据的 QQ Basic DB,不适宜采用类似 XML 方式进行存储,原因是当存储量超过亿级时,冗余信息将极大占用通讯带宽!QQ 团队通过 tag 整数化、必选的定长字段共用一个 tag 等手段,最终让 DB 有效载荷相对 XML 模式提升了 10 倍,pack/unpack 效率提升了 100 倍!</p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/66d97ba41bbfa2f1bc8d6a2df6393ce4.jpg" width="554" height="234" /></a></p>    <p>        <strong>Bison 列举的一个简单 XML 存储例子</strong></p>    <p>        在下一个部分,Bison 主要提到了大家比较关心的 QQ Basic DB 安全性问题,其中一个非常重要的点就是异地部署。他特别强调,数据安全最关键的是有一套简单健壮、适应窄带化的数据复制机制。QQ Basic DBV2.0 通过类似 mysql 复制机制做到了简单健壮,带宽占用窄带化,在专线故障情况下,流量可以在内外网灵活切换。目前在全国各地都有部署。</p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/a8c6f48730bc8c5fe0c2b6e481047bb5.jpg" width="553" height="237" /></a></p>    <p>        接下来,廖念波先生给大家介绍了优化了分片(sharding)方式、超长关系链解决方法、过载保护等方面的内容,给大家全面展示了腾讯的一些技术积累和总结。</p>    <p style="text-align:center;"><a title="窥探 QQ 基础数据库架构演变史" rel="lightbox[21771]"><img title="窥探 QQ 基础数据库架构演变史" alt="窥探QQ基础数据库架构演变史" src="https://simg.open-open.com/show/de87bf801a59a0c0f0c83e87b444ae1d.jpg" width="554" height="289" /></a></p>    <div id="come_from">    来自:     <a id="link_source2" href="/misc/goto?guid=4958344134027448313" target="_blank">djt.qq.com</a>    </div>