写点什么

中国技术力量:腾讯技术十七年

  • 2015-11-12
  • 本文字数:2327 字

    阅读完需:约 8 分钟

11 月 16 日, QCon 全球软件开发大会将在美国旧金山隆重开幕,在本次特别设置的中国技术开放日专场上,来自腾讯社交事业群的高级技术总监廖念波,将向国外技术同行分享腾讯的海量服务之道。

让腾讯来代表中国互联网的技术力量,我想没有人会表达什么疑问,刚好近日腾讯度过其十七周年,借着这个难得的机会,还是让我们来回顾一下腾讯这些年来技术的发展之路,看看技术是如何支撑当年一个小小的聊天软件成长为如今的巨头的。

从0 到1 亿的架构

关于腾讯早期的技术架构,有一个流传很广的说法:腾讯联合创始人、前CTO 张志东,在早期为QQ 设计了前后端架构,这个架构沿用了很长时间,支撑着当时的QQ 业务从无到有,直到后来上亿用户同时在线。

不过,传说总有夸大的部分,真正的架构需要不断的演变。QQ 在2010 年3 月5 日同时在线人数突破1 亿,2011 年腾讯高级技术总监icezhuang 分享了让很多人印象深刻的演讲《1.4 亿在线背后的故事》,讲述了QQ 架构是如何支撑它从0 到1 亿的。2014 年时任腾讯技术副总监也在QCon 上分享了 QQ 面向移动时代的架构演变。事实表明,QQ 的后台架构至少做了三次大的改变:

  • 十万级(同时在线人数):简单的存储服务和接入服务器的架构。只能支持一些简单的业务。后面又增加了长连接服务器,为无法直连的客户端进行实时宽带数据中转。
  • 百万级:QQ 在 2001 年达成百万级在线。第一代架构在达到百万级在线时面临瓶颈,于是进行了一次大的演变,将上面的单台服务器扩展成集群,添加了状态同步服务器,在接入服务器之间同步状态。后来,QQ 发布了其最重要的业务之一 QQ 群,又增加了群相关的服务器和集群。这两个阶段的关注点主要是高性能以及 7X24 小时连续提供服务。
  • 千万级:2005 年 QQ 达成千万级在线。第二代架构在这个数量级面前同样难以支撑,例如,状态同步服务器根本存不下所有人的状态,只能继续进行改造。它们将状态同步服务器改造为集群,并将业务进行分离。然而,此时它们的服务器越来越多,并且都在一个 IDC,一旦 IDC 出现问题,整个业务都将停摆。针对这个,它们进行了机房规划和容灾改造,开始推动灰度发布,提升运维自动化能力。这个阶段的关注点在高可用性以及高可运维性。
  • 亿级:2010 年 QQ 在线突破 1 亿,并且持续提升,这是因为移动互联网来临,开启了 24 小时在线时代。持续的打补丁已经难以支撑亿级在线,老架构以及众多补丁让系统缺乏灵活性,比如,要将昵称长度增加一般,按当时的速度需要两个月。因此只能重新设计实现整个架构。新的架构分为存储系统和通信系统,分别历时数年完成,足以支撑 5-10 亿同时在线人数,同时保持业务的灵活性。值得一提的是这个架构是基于云计算的架构,这也为后面的腾讯云打下了基础。

QQ 是腾讯最早也是最核心的业务,它的架构演变也可以看做是腾讯技术发展和成长的一个缩影。除此之外,QQ 空间作为国内最大的 SNS、支撑 QQ 整个账号体系的 Basic 数据库也分享了它们的架构演变过程。从这些演讲中,我们可以看到如“大系统小做”、“灰度发布”这些理念逐渐清晰,成为腾讯独特的技术哲学,后来,它们将这些提炼出来,形成了腾讯的海量之道。

腾讯的海量之道

2014 年腾讯云技术专家在 QCon 上分享了腾讯的海量之道,将腾讯多年在技术研发的经验提炼出了一些关键词:

  • 小步快跑:对用户的需求快速反应,或者快速求证对用户猜想是否正确。它一个典型例子就是微信,微信 1.0 的时候只有聊天功能,界面还很简陋,但随着快速迭代,响应用户需求,现在的微信已经成为一个平台。小步快跑在技术上要求初始设计可扩展,自动化部署,轻松上线以及快速沉淀的能力。
  • 灰度发布:是指一种平滑过渡的发布流程。腾讯现在的灰度发布流程一般按照公司内部员工 > 忠诚度高的核心用户 >10% 活跃用户 >50% 活跃用户 > 所有用户,这样的人群来进行。要使用灰度发布,一般在最开始进行架构设计的时候就需要考虑进去。
  • 大系统小做:其实就是模块拆分,将一个大的系统尽量拆分成功能单一的模块,在架构设计上尽量使用插件式设计,高度解耦。腾讯 QQ 乃至到后来的腾讯云都是依凭这个思想,小到代码中一个类的设计,大到涉及数个集群的云服务,都按照模块来划分。
  • 边运营边重构边生活:世界上没有完美的系统,总是会出现问题,重要的是提供持续服务的能力。另外必须重视技术负债,在研发的过程中也要不断的重构。
  • 快速沉淀:其实就是将业务和解决方案服务化,将解决一个复杂问题的方法沉淀下来给后人使用。腾讯还将业务逻辑也进行服务化,比如将摇一摇、漂流瓶等都做成服务供微信、QQ 等开发团队调用。
  • 有损服务:重点接口重点保障,次要接口有损保障,并提供紧急时刻的降级能力,同时在前端设计即使降级也能保证用户体验。

当然,多年的经验并不仅仅凭几个关键词就能完整总结,我们还可以从其它地方看到一些端倪,比如 15 年春节时的微信红包。

据事后统计,春晚微信总共摇动 110 亿次,峰值请求达到 1400 万次 / 秒,微信技术专家在 ArchSummit 全球架构师峰会上分享了微信春晚红包如何应对 100 亿次请求

到了微信时代,腾讯应对海量请求基本上已经驾轻就熟,在分享中我们可以看到上面这些理念的应用,当然由于这并非产品而是一次热点策划,因此在细节上有所不同。此时微信服务器分布在三个数据中心,有着强大的容灾能力,带宽 1Tb/s 以上,微信本身已可以支持全国 14 亿以上人同时在线,但是,数量级每上升一个级别,其难度也相应上升。这次红包活动的架构设计和优化思路仍然值得学习。

腾讯虽以产品出色著称,但无人忽视其技术实力,是因为十七年如一日的持续服务,以及微信春晚红包这样让人直观感受到的应用场景,出色的产品背后也需要强大的技术支撑。随着腾讯这次走向海外公开分享,相信腾讯的技术影响力将辐射到全球,让整个世界见识中国的技术力量。

2015-11-12 20:024342
用户头像

发布了 164 篇内容, 共 100.0 次阅读, 收获喜欢 387 次。

关注

评论

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

Spring 5 中文解析测试篇-集成测试之概要和注解

青年IT男

单元测试 Spring5

传统产业数字化转型的思考与建议

CECBC

经济转型 企业经济

面试不会微服务没关系,跟着我4天学会微服务!

小Q

Java spring 架构 分布式 微服务

通证与通证经济你真的理解吗

CECBC

区块链 通证经济

为什么我的缓存设置在chrome中不生效

书虫

chrome 缓存 浏览器 HTTP

去中心化交易所搭建,虚拟币去中心化交易系统

交易所开发

USDT承兑商币支付系统搭建,USDT跑分承兑商app

面试官:TCP/IP 协议到底在讲什么?想彻底搞懂TCP协议:还得从 TCP 三次握手四次挥手说起

编程 程序员 互联网 面试 计算机网络

解Bug之路-串包Bug

无毁的湖光

redis socket Java 分布式

Docker 容器编排利器 Docker Compose

哈喽沃德先生

Docker 容器 微服务 Docker-compose

oeasy 教您玩转 linux 010207 黑客帝国 matrix

o

数据质量管理工具的意义和定位

苏槐

数据治理 数据质量管理 数据质量平台

嘿,我想要寄一封挂号信,收件时间是 6 年后,标题是: 让 6 年后的我,加倍奉还。

叶小鍵

学习 成功学 心理学 李笑来

java安全编码指南之:表达式规则

程序那些事

java安全编码 java安全 安全编码规则

新基建夯实粤港澳大湾区高质量发展基础

CECBC

区块链 人工智能 大数据

云图说 | GPU共享型AI容器,让AI开发更普及

华为云开发者联盟

AI 容器

JavaScript七大语言类型你知多少?

Walker

Java 大前端 编程语言

甲方日常 9

句子

Java 运维 工作 随笔杂谈 日常

大厂运维必备技能:PB级数据仓库性能调优

华为云开发者联盟

架构 数据

第4周总结

Vincent

极客时间 极客大学

The Go Blog-Article index

卓丁

【原创】经验分享:一个Content-Length引发的血案(almost....)

一枝花算不算浪漫

深度解析!--阿里开源分布式事务框架Seata

周果

分布式 分布式事务 微服务 分布式锁 Seate

用 Python 实现一个简易版的 Pong 游戏 (二)

Matrix Chan

Python Python Turtle Python 游戏编程

敏捷教练的软技能

研发管理Jojo

软技能 敏捷教练 引导者

媒体电视台跟进,船长梁晓玲平台拉人头卖课引起多方报道!

成周

模板方法模式——看看 JDK 和 Spring 是如何优雅复用代码的

Java架构师迁哥

【万字长文】探讨可信构架之道

华为云开发者联盟

架构 服务端

MySQL高性能架构设计原则

洛神灬殇

干货!如何平稳用户无感知的完成系统重构升级

X先生

架构 运维 后台

第4周作业

Vincent

极客时间 极客大学

中国技术力量:腾讯技术十七年_腾讯_徐川_InfoQ精选文章