写点什么

从手机 QQ 技术发展,看架构设计核心 3 原则

  • 2019-05-16
  • 本文字数:1498 字

    阅读完需:约 5 分钟

从手机QQ技术发展,看架构设计核心3原则

《从 0 开始学架构》专栏的第 8 期,我介绍了架构设计的三条核心原则:合适原则、简单原则和演化原则。我们在架构设计实践中,应该时刻谨记这三条设计原则,指导我们设计出合适的架构。即使是代表中国互联网技术最顶尖水平的 BAT,其架构的发展历程也同样遵循这三条原则。今天我就以大家耳熟能详的手机 QQ 作为案例,来简单分析一下。


注:以下内容部分摘自《QQ 1.4 亿在线背后的故事》。


手机 QQ 的发展历程按照用户规模可以粗略划分为 4 个阶段:十万级、百万级、千万级、亿级,不同的用户规模,IM 后台的架构也不同,而且基本上都是用户规模先上去,然后产生各种问题,倒逼技术架构升级。

1. 十万级 IM 1.X

最开始的手机 QQ 后台是这样的,可以说是简单得不能再简单、普通得不能再普通的一个架构了,因为当时业务刚开始,架构设计遵循的是“合适原则”和“简单原则”。


2. 百万级 IM 2.X

随着业务发展到 2001 年,QQ 同时在线人数也突破了一百万。第一代架构很简单,明显不可能支撑百万级的用户规模,主要的问题有:


  • 以接入服务器的内存为例,单个在线用户的存储量约为 2KB,索引和在线状态为 50 字节,好友表 400 个好友 × 5 字节 / 好友 = 2000 字节,大致来说,2GB 内存只能支持一百万在线用户。

  • CPU/ 网卡包量和流量 / 交换机流量等瓶颈。

  • 单台服务器支撑不下所有在线用户 / 注册用户。


于是针对这些问题做架构改造,按照“演化原则”的指导进行了重构,重构的方案相比现在来说也还是简单得多,因此当时做架构设计时也遵循了“合适原则”和“简单原则”。IM 2.X 的最终架构如图所示。


3. 千万级 IM 3.X

业务发展到 2005 年,QQ 同时在线人数突破了一千万。第二代架构支撑百万级用户是没问题的,但支撑千万级用户又会产生新问题,表现有:


  • 同步流量太大,状态同步服务器遇到单机瓶颈。

  • 所有在线用户的在线状态信息量太大,单台接入服务器存不下,如果在线数进一步增加,甚至单台状态同步服务器也存不下。

  • 单台状态同步服务器支撑不下所有在线用户。

  • 单台接入服务器支撑不下所有在线用户的在线状态信息。


针对这些问题,架构需要继续改造升级,再一次“演化”。IM 3.X 的最终架构如下图,可以看到这次的方案相比之前的方案来说并不简单了,这是业务特性决定的。


4. 亿级 IM 4.X

业务发展到 2010 年 3 月,QQ 同时在线人数过亿。第三代架构此时也不适应了,主要问题有:


  • 灵活性很差,比如“昵称”长度增加一半,需要两个月;增加“故乡”字段,需要两个月;最大好友数从 500 变成 1000,需要三个月。

  • 无法支撑某些关键功能,比如好友数上万、隐私权限控制、PC QQ 与手机 QQ 不可互踢、微信与 QQ 互通、异地容灾。


除了不适应,还有一个更严重的问题:


IM 后台从 1.0 到 3.5 都是在原来基础上做改造升级的,但是持续打补丁已经难以支撑亿级在线,IM 后台 4.0 必须从头开始,重新设计实现!


这里再次遵循了“演化原则”,决定重新打造一个这么复杂的系统,不得不佩服当时决策人的勇气和魄力!


重新设计的 IM 4.0 架构如图所示,和之前的架构相比,架构本身都拆分为两个主要的架构:存储架构和通信架构。


  • 存储架构



  • 通信架构



作者寄语:


每个程序员都有成为架构师的梦想,程序员成长也绕不开架构设计。在专栏中,我从架构基础、三大架构模式和实战的角度分享一整套架构设计方法论。照着做,你也能成为架构师。专栏共 50 期,已更新完毕。目前有超过 3 万人加入学习,互动留言字数超过 20 万。期待你的加入!


作者简介:


《从 0 开始学架构》专栏作者,资深技术专家李运华,目前带领多个研发团队,承担架构设计、架构重构、技术团队管理、技术培训等职责,曾就职于华为和 UCWeb,写过《面向对象葵花宝典》一书。


内容选自极客时间《从 0 开始学架构》专栏


2019-05-16 15:0414029

评论

发布
暂无评论
发现更多内容

BEV 感知算法评价指标简介

地平线开发者

自动驾驶; 算法工具链 地平线征程6

ArkUI-X在Android平台动态化开发指南

龙儿筝

AI 智能体到底应该如何构建?分享 Github 上收获 4k stars 的 12 条原则

Baihai IDP

智能体 LLMs AI Agent

鸿蒙开发实战之Enterprise Data Guard Kit构建美颜相机金融级数据防护

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Function Flow Runtime Kit优化美颜相机AI流水线

yimapingchuan

HarmonyOS NEXT

鸿蒙开发日记之NearLink Kit实现美颜相机近场极速传输

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Performance Analysis Kit优化美颜相机流畅度

yimapingchuan

HarmonyOS NEXT

专家管理系统(源码+文档+讲解+演示)

深圳亥时科技

秋招上岸拿大厂offer有望了!12万字Java面试题及答案功不可没!

程序员高级码农

Java 程序员‘

HarmonyOS开发笔记之MDM Kit实现美颜相机企业级管理

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Multimodal Awareness Kit实现美颜相机智能感知

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Network Boost Kit优化美颜相机网络传输

yimapingchuan

HarmonyOS NEXT

一颗卫星的诞生,不一定要靠“发射”

DevOps和数字孪生

航空航天

从概念到场景化落地,灯塔低代码平台重构企业数字化生态

中烟创新

鸿蒙开发实战之Input Kit实现美颜相机智能交互

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Pen Kit实现美颜相机专业级手写批注

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Remote Communication Kit实现美颜相机远程协作

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Driver Development Kit打造美颜相机硬件加速方案

yimapingchuan

HarmonyOS NEXT

机器人描述文件xacro(urdf扩展)

芯动大师

xacro urdf

如何选择云上业务的安全防护产品?

等保测评

深入研究:淘宝店铺所有商品API接口详解

tbapi

淘宝API 天猫API 天猫店铺所有商品接口 淘宝店铺所有商品接口 淘宝店铺商品采集

StarRocks Community Monthly Newsletter (May)

StarRocks

数据湖 存算分离 StarRocks 物化视图

436 PIRF: Life Hack - Sabotage

Echo!!!

English

ArkUI-X框架LogInterface使用指南

龙儿筝

鸿蒙开发实战之Distributed Service Kit实现美颜相机多设备协同

yimapingchuan

HarmonyOS NEXT

等保费用多少才合理?一文为你揭秘

等保测评

使用 Amazon Bedrock Agents 加速生物标志物的分析和发现

亚马逊云科技 (Amazon Web Services)

鸿蒙开发实战之Online Authentication Kit构建美颜相机安全认证体系

yimapingchuan

HarmonyOS NEXT

鸿蒙开发实战之Sensor Service Kit实现美颜相机智能环境感知

yimapingchuan

HarmonyOS NEXT

征程 6|Cache 使用场景

地平线开发者

自动驾驶; 地平线征程6

HarmonyOS开发实战之Network Kit重构美颜相机网络层

yimapingchuan

HarmonyOS NEXT

从手机QQ技术发展,看架构设计核心3原则_架构_李运华_InfoQ精选文章