`
fastwei
  • 浏览: 24560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

QQ IM架构学习总结

阅读更多
今天学习了腾迅的ppt分享《1.4亿在线背后的故事》,tecent技术果然是很NB的,对ppt进行了精简总结,以备不时之需。



10万-百万的演变
在线状态的获取
1.定期拉取
2.实时通知

实时通知的3种方式,各有什么优缺点?
直接发包:最简单,但是不能应对某些NAT,也不能应对TCP接入。
伪装IP发包:编程难度大,可以应对NAT,但是不能应对TCP接入,有时还会被IDC自己的网络设备拦住。
通过真正的接入服务器发包:可以应对所有情况,但是成本高。

所以实际演变的顺序就是上面的顺序

QQ后台如何实现高性能
 绝不使用企业级解决方案
 逻辑层多进程
 万有一失的无锁设计
 用户态IPC
 MySQL分库分表
 好友表自写文件存储

绝不使用企业级解决方案:Google牛人的话。
万有一失的无锁设计:通过业务流程的巧妙设计来避免使用锁。举例:设置隐身可见(状态进程)与加好友(好友进程)的冲突没关系;但是LocalOnlineRecord中对好友表位置指针的修改只有登录进程能做。
用户态IPC:使用共享内存设计出用户态的FIFO

QQ后台如何实现7X24小时连续服务
 大系统小做
 平滑重构
 在高速行驶的列车上更换发动机
 核心数据放入共享内存
 接入层与逻辑层分离
 命令分发动态配置化

百万-千万的演变
发生现象:
 手机从不敢离身
 发布新代码提心吊胆
 时不时要扩容,又烦又怕
 时不时要紧急恢复服务
 时不时被用户骂、被老板K
 到底怎么了?
原因:
1.后台机器越来越多,单机死机/故障经常出现,IDC故障也不少,影响服务,也影响人员生活
a) 传统行业设备少单价高,故障很少出现
b) 互联网行业设备多单价低,故障是常态
c) 只在一个IDC内是没前途的

容灾改造的思路
 存储集群:半自动切换模式
 主/从服务器
 从服务器死机,业务不受影响
 主服务器死机,多数命令不受影响,修改资料命令受影响
 业务集群、接入集群、同步集群:自动切换模式
 迅速应对死机等情况,基本不影响业务
 分布在两套IDC
 可以应对IDC整体故障


2.每周有新代码发布,BUG不断出现,严重影响服务
 大部分子系统每周发布一个版本的新代码
 解决方法
 代码review
 灰度发布(每天只发布部分特性)

3. 监控机制原始、报警设置不全,出事了都不知道
 CPU 100%的故事
 解决方法
 完善监控和报警
4. 运维操作通过vim或者mysql进行,非常容易失误
 Grandy的故事

 解决方法
 运维操作Web化(半自动化)、自动化



强调两套、有容灾指挥中心,且在两个IDC


千万级在线的关键技术
 对外提供高可用性的服务
 对内提供高可运维性的系统
 灰度发布
 运营监控
 容灾
 运维自动化/半自动化

亿级在线的关键技术
存偖架构



提供高灵活性的业务支持
 传统IT行业可以半年到两年出一个新版本
 互联网行业要求每个月出一个新版本
同时保持高性能、高可用性、高可运维性

QQ IM后台技术演化的启示
   1.0十万级、2.0百万级
 高性能;7乘24小时连续服务
   3.0千万级
 高可用性;高可运维性
   4.0亿级
 高性能;高可用性;高可运维性;高灵活性


 只实现功能,不难
 高性能/低成本
 高可用性
 高可运维性
 高灵活性
 很难!
在线量每提升一个量级,技术难度也提升一个量级





从下到上一次是:价值观、意识、方法

  • 大小: 35.2 KB
  • 大小: 59 KB
  • 大小: 35.7 KB
  • 大小: 61 KB
  • 大小: 44.2 KB
分享到:
评论
1 楼 cfyme 2012-06-04  
学习学习架构方面的知识

相关推荐

    1.4亿在线背后的故事-——-腾讯-QQ-IM后台架构的演化与启示.ppt

    腾讯 QQ IM 后台架构的演化与启示 腾讯 QQ IM 后台架构的演化与启示是指腾讯QQ即时通讯(IM)后台架构的演化过程和启示,从十万级到亿级在线的整个过程中,吸取了很多教训,对海量服务的理解是长期积累的结果。 ...

    delphi 类QQ IM 即时通讯工具

    总结来说,"delphi 类QQ IM 即时通讯工具"项目涉及到了Delphi的UI设计、网络编程、消息处理、文件传输等多个方面,是学习和实践Delphi应用程序开发的绝佳案例。通过理解并实现该项目,开发者不仅能掌握Delphi的基本...

    仿QQIM框架网络版源码

    仿QQIM框架网络版源码 一个使用C#编写的高仿QQ,具备通讯功能的聊天软件 实现了网络通讯,聊天功能等,请下载查看!功能很强大 使用多层架构,扩展性也很强 数据库文件在DB下,附加即可(MS Sql2008) 开发工具:...

    腾讯IM架构

    ### 腾讯IM架构演进关键知识点 #### 一、背景与挑战 - **初期架构**:腾讯的即时通讯(IM)系统最初采用的是较为简单的架构设计,适用于较小规模的在线用户数量(如十万级别)。然而,随着用户基数的增长,这种架构...

    高仿qq IM通讯源码,包括聊天,发现附近好友,发送表情图片等

    【描述】:该高仿QQ IM通讯源码旨在提供一个可直接运行的解决方案,允许开发者快速理解并学习IM系统的架构和实现细节。源码的完整性和实用性确保了用户可以放心下载并进行实践操作,这对于想要学习即时通讯技术或者...

    即时通信服务端数据库 QQ IM

    即时通信(Instant Messaging,IM)服务是现代网络通信的核心部分,尤其像QQ这样的大型IM平台,其服务端数据库的设计和管理对于确保用户能够快速、稳定地进行消息传递至关重要。在这个背景下,"即时通信服务端数据库...

    IM通讯软件类QQ源代码

    首先,C/S模式是IM通信的基础架构。在这种模式下,客户端(Client)作为用户界面,负责与用户交互并发送请求到服务器;服务器端(Server)则负责处理这些请求,维护用户状态、管理会话,并将信息转发给其他客户端。...

    Qt-IM-client.rar_QQ_Qt IM_im qt_qt qq_qt开发im

    在本文中,我们将深入探讨如何使用Qt框架来开发一个即时通讯(IM)客户端,类似于QQ。这个项目,称为"Qt IM client",是基于Qt库的实现,它展示了如何利用Qt的强大功能创建一个功能丰富的聊天应用程序。 首先,Qt是...

    ICQ.rar_ ICQ-IM-Chat_QQ界面_icq_仿QQ_仿QQ界面

    标题中的“ICQ.rar_ ICQ-IM-Chat_QQ界面_icq_仿QQ_仿QQ界面”表明这是一个关于ICQ即时通讯软件的项目,它模仿了QQ的用户界面。这个项目可能是用Visual Basic(VB)编程语言实现的,旨在创建一个基于客户端-服务器(C...

    c++源代码 一款类似QQ聊天的IM聊天软件 功能强大 值得学习

    这款C++源代码实现的IM聊天软件是一款类似QQ的通讯工具,它展示了C++在开发实时通信应用中的潜力。为了创建这样一个功能强大的聊天平台,开发者可能运用了多种技术和设计模式,其中包括网络编程、多线程处理、数据...

    仿QQ即时通信源码(包括客户端和服务器的IM源码)

    【标题】"仿QQ即时通信源码(包括客户端和服务器的IM源码)"涉及的核心知识点主要涵盖即时通讯(Instant Messaging, IM)系统的设计与实现,其中包括客户端开发和服务器端开发两个重要方面。以下是对这些知识点的详细...

    极光IM全功能

    通过分析和学习这些源码,开发者可以了解如何在Android应用中集成极光IM,实现聊天功能,包括消息的发送、接收、显示以及各种交互逻辑。 总的来说,极光IM全功能为开发者提供了一套完整的即时通讯解决方案,大大...

    即时通信服务端 Server QQ IM

    Server QQ 是一个典型的即时通信服务端实例,它可能采用了类似腾讯QQ的技术架构,用于支持大规模用户同时在线聊天。 即时通信服务端的设计通常涉及以下几个关键知识点: 1. **协议选择**:即时通信系统通常基于TCP...

    QQ仿写程序代码(delphi源码)

    QQ仿写程序是一款基于Delphi开发的即时通讯(IM)软件,它包含了客户端和服务器端的源代码,以及使用Access数据库进行数据存储的功能。这款软件虽然可能存在一些小错误,但其设计和实现的特性相当丰富,能够支持文本...

    完全模仿QQ2011源代码

    即时通信(Instant Messaging,简称IM)是一种允许用户实时交流的在线通信技术,QQ作为国内最流行的IM应用,其源代码模仿具有很高的学习价值。QQ2011版本是腾讯公司推出的一个重要版本,它在功能、性能和用户体验上...

    miranda-im-v0.6.8-src

    通过阅读和分析源代码,开发者不仅可以了解Miranda IM的基础架构,还能深入探究QQ插件的实现机制。这对于学习即时通讯软件的设计、优化现有功能,或是开发新的插件都具有极高的价值。此外,对于有兴趣自定义界面、...

Global site tag (gtag.js) - Google Analytics