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

窥探QQ基础数据库架构演变史的更多相关文章

  1. [转载]大型网站应用中 MySQL 的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  2. 大型网站应用中MySQL的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  3. 浅谈JavaWeb架构演变

    一  JavaWeb架构演变 在java架构模式中,我们可以将MVC架构模式抽象为如下结构: 1.View层.View层即UI层,可采用的技术如JSP,Structs,SpringMVC等 2.Con ...

  4. Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅 ...

  5. 从100PV到1亿级PV网站架构演变

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不 ...

  6. 【转】图说Android的8年演变史

    原文网址:http://tech.gmw.cn/2016-02/17/content_18916338_14.htm 图说Android的8年演变史 我有话说    0      2011年10月谷歌 ...

  7. 转:Mysql在大型网站的应用架构演变

    原文来自于:http://www.cnblogs.com/Creator/p/3776110.html 原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文 ...

  8. MyCat 启蒙:分布式系统的数据库架构演变

    文章首发于[博客园-陈树义],点击跳转到原文<MyCat 启蒙:分布式系统的数据库架构演变> 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现. ...

  9. [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务

    一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...

随机推荐

  1. php虚拟主机下实现定时任务(仅供参考)

    因为要做简单的中控  在实现心跳包的时候遇到了困难 正常的心跳包思路是这样的  举个例子 我写一个登陆签到脚本   当我登陆成功的时候 会把登陆成功这个状态传递给网络上的中控端 当我签到完成的时候会把 ...

  2. 【译】高级T-SQL进阶系列 (三)【中篇】:理解公共表表达式(CTEs)

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 一个简单的CTE例子 如前所述,CTE‘s提供给你了一个方法来更容易的书写复杂的代码以提高其可读性.假设你有列表 ...

  3. 洛谷 P1563 玩具谜题(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1563 这道题主要问题就是弄明白顺逆时针的问题,其实可以简化成一个异或的问题:当head与x异或值为零时,即为顺时针 ...

  4. 黑帽JS跳转

    一.常规的JS页面跳转代码 .在原来的窗体中直接跳转用 <script type=”text/javascript”> window.location.href=”http://www.g ...

  5. Java连载81-枚举类型,生成五个不重复的随机数,集合简介

    一.枚举类型 1.枚举类型的格式就是enum+枚举类型的名称,可见下面的例子. package com.bjpowernode.java_learning; ​ public class D81_1_ ...

  6. 10.Redis的RDB和AOF两种持久化机制的优劣势对比

    1.RDB和AOF两种持久化机制的介绍 2.RDB持久化机制的优点3.RDB持久化机制的缺点4.AOF持久化机制的优点5.AOF持久化机制的缺点6.RDB和AOF到底该如何选择 我们已经知道对于一个企 ...

  7. opencv python:ROI 与 泛洪填充

    提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...

  8. java 8 list的stream操作 list中的对象中的某一个成员取出转为该成员的list,以及对象过滤,筛选某个属性后的成员

    取成员属性list List<String> configList = codeEntityList.stream().map(t -> t.getName()).distinct( ...

  9. vs2017 vs2019配置sqlite3连接引擎(驱动)指南(二)vs2019续集

    在写完上一篇博客后,一觉醒来,又又又又不行了,介绍一个终极大招,如果你的fuck vs又提示无法打开sqlite3.h的问题 环境win10  vs2019 debug x86 实在没心情写文字了,直 ...

  10. ConcurrentHashMap 实现缓存类

    参考:https://blog.csdn.net/woshilijiuyi/article/details/81335497 在规定时间内,使用 hashMap 实现一个缓存工具类,需要考虑一下几点 ...