写点什么

腾讯新闻的海量服务

  • 2014-04-11
  • 本文字数:3344 字

    阅读完需:约 11 分钟

在 2014 年 4 月 11 日的腾讯分享日活动上,腾讯 OMG 移动媒体产品部助总郑坚分享了有关腾讯新闻海量服务的一些技术技术原则。本文根据这次分享内容整理而成。

腾讯很多海量服务的意识和规则都是从 QQ 演化出来的,即使从移动互联网的角度来看,当时的很多规则也很贴切。我下面的分享主要从两点展开:

  1. 跟产品、运营的合作的一些技术原则
  2. 移动端海量服务的特点

我负责的移动新闻客户端,在两年半前接手的时候还是比较小的,到现在安装量早已过亿,日活跃用户量在千万级,很多用户从微信和手机 QQ 进来。从比较小的规模成长到现在这么大的规模,遇到很多问题。

移动新闻类服务有几个特点:

  1. 新闻是基础需求之一,使用频率属于次高级别,比通讯类服务低,比电商类服务高。有些很重要的新闻,虽然用户不一定要看细节,但必须要知道这件事,所以要 push 给所有的用户。
  2. 覆盖面广,不同的人群、地域、运营商都要覆盖到。
  3. 突发性强,尤其是重大新闻爆发时,瞬间 push 的流量是日常流量的好几倍,对服务质量的要求也很高。

下面从产品、技术、运营这三个层面分享一下我们的感受。

产品

聚焦核心需求,少即是多:我们从非常小的产品长起来,最初要做的比较小,功能少,现在的专题、直播、图文、离线都是后来加的。一开始是因为人和资源有限,必须逼迫自己要去聚焦最核心的需求;随着发展慢慢就会觉得很多东西可以做,但像是新闻这种基础性的服务,用户对产品是有预期的,他会预期一个新闻类客户端能够满足他的什么需求,所以,一定要把基础需求做到极致,之后才能考虑做别的,否则做了效果也不好。

不要过度设计,考虑普适性:海量产品是要接受所有用户群的。App 客户端跟 HTML 网页有一个不同在于,HTML 对于各种交互应该如何处理都有约定俗成的规则,用户对一个网页会如何响应自己是有预期的;而 App 则可以想怎么做就怎么做,比如 Flipboard 就做出很好的体验来,但是有这种自由度,反而会陷入怪圈。比如,新闻有一个基础需求是要切换频道,一开始所有的客户端都是把导航栏平铺的。后来有段时间有个趋势,很多 App 把导航系统改成了左划的方式。比较新颖的设计方式有一个问题,就是会导致用户要去想。对于比较新的设计,我们有一个简单的衡量方式:看看家里的老人能不能用这个 App,只需要观察一阵就知道适不适合上了。测试之后,我们觉得还是很土的设计比较没有障碍,就没有改。

要 90% 不要 80%:一个功能至少要做到 90%,最好是接近 100%。千万不要做很多功能,每个都是 80 分,找不到特别好的点。其实我们的 App 做了这么多东西,90 分的东西非常少。一共四个 tab 页面,图片跟视频占了两个,但是用户点进去之前预期是什么?点进去之后预期能不能达到?第二天用户会不会回来?这些问题现在都没有很好的解答,事实上现在我们 90% 的任务是在第一个新闻页卡完成的,后面的 tab 都没有做到 90 分。产品、技术都要想清楚,一个是因为只有这么多资源,哪个能做好就专注做好哪个;另外也因为用户的注意力有限,不要用不好的东西转移他的注意力。海量产品的每一个位置都要想清楚它能不能达到要求。

功能多闭环,多问 now what:相对垂直小众的产品,用户使用的比较深入,可以一直往下做;但是通用产品很难这样做。如果你有很多想法和设计思路,做完了原型之后要问一句:now what?举个最简单的例子,社交化、个性化的演化。腾讯有 qq 关系链,所以就有人提议新闻客户端做好友阅读圈,看别人阅读过、评论过的东西。于是原型做出来,用了几天之后,有一个问题:读了之后干什么?这是新闻,不像小说,新闻的特点是短、时效性强,用户进来好友阅读圈,看几天前看过的东西有什么用?另一个例子,就是个人中心,做个性化,比如点击别人的头像可以打开这个人发表过的评论。做了之后发现也有问题:进去一看,质量也不高,内容也是老的,而且是流水账居多。用户下一步做什么?这样的个人中心设计就很不好。所以,如果没想清楚一个东西做出来能干什么,就不要放出去,否则收不回来。一旦放出去就会有很多挑战和压力,团队难以控制。

开发

快速迭代,小步快跑(动态运营的开发模式):非常多子系统和功能都是这么做的,这是非移动互联网就已经认同的原则。

快和稳定超过精巧性。这个和干干净净做系统也是符合的,这样做出来的东西,下一步演化、debug 问题都很轻松。

快、允许出错。这一点可能跟上面说不要随便加东西有些矛盾,说到底还是一个度的问题。大方向是一定要把握的,不能乱放;但是细节调整是可以更快的放出去。运行一个版本要可以很快的纠正,这就是说你心里要有纠正的预期,放出去之前就要把功能开关都做进去。

边重构边生活。新闻客户端的后台从是腾讯网延续过来的,有很多基础服务,比如评论是 5、6 年前构建的,很老,后来的一些新功能,比如聚合回复、带上地理位置、支持上传图片和短视频,都是升级迭代上去的。这些功能的加入过程可以说是客户端和后台团队互相牵拉着走,有些时候我们客户端送到苹果应用商店审核的时候后台都还没做好,可能审核通过的时候是后台刚出来的时候,而且刚开始上线的时候机器、容量都没有放到最大,都是在运行中提高的。

运营

快速灰度。我们的新闻客户端做比较快速的灰度,比如常规灰度是按周,这边则是按天甚至小时来做灰度。为什么这样做呢,第一,我们产品客户端本身的迭代速度比较快,一般 4~6 周就有一个东西出去;第二,一个功能放出去如果不能很快灰度到一定数量级,就看不出表现,因为我们的技术功能跟运营商分布、网络稳定性有关,灰度太小,即使放到 20%,这 20% 里面又有 20% 的波动,误差太大,真实的效果就看不出来。所以我们的策略就是快速推出去,实在出问题就回滚,责任我这边担着。

有损服务。要分清哪些业务可以有损,哪些必须无损,另外无损也有严格的和非严格的。有损服务这块下面我会详细介绍。

扛住再优化。这个不需要多说。

立体监控。很早以前我们是按网站的监控级别,可能是 5 分钟抓一次数据,这样到移动端就不行了,可能监控出来有问题的时候就早已经崩溃了,回头看监控数据也不知道什么时间来的峰值、峰值到了多少。现在我们是按 5 秒的监控级别。

下面介绍一个有损服务实例,就是我们突发新闻 push 的一次经验。

突发新闻的特点是瞬间峰值极高,这点跟其他亿级产品有一些不同。比如马航失联的新闻,我们推送 iOS 客户端在千万级,Android 客户端千万级,发送时长 2 分钟,点击率大约在 25%。我们还配了头图专题和图文直播。实际上这里面还有个情况,就是我们北方节点的部分用户没有 push 到,因为北方节点有三分之一的机器配置比其他机器低一些,但我们 push 的时候没有调整分配规则,就导致这三分之一的机器死掉了,流量跑到剩下的三分之二的机器上,又把这三分之二也搞崩溃了。中间我们导流北方用户到深圳节点,后来深圳节点无法承担全国流量,又导回了北方。总之都这样下来,最终我们的访问量是 7 倍于日常的访问流量,以及 3 倍于日常的接口调用数。

对于本次新闻,我们制定了如下的有损服务规则:

重点接口重点保障,次要接口有损保障:28 原则,用 60-70% 的资源保证 20% 的重要接口。另外就是紧急降级,把图文直播自动刷新、下拉自动刷新等造成不必要的资源请求的功能取消。

缓存前移,分布化,用大量 memcache。前端 proxy 缓存,后面是 mc 集群,解决超热 key 问题和大 key(>200K)的问题。另外设置了 5 秒的 timeout,相当于是有损服务。

优化 TCP 协议,提高 TCP 初始化拥塞窗口大小(从 3 改到 10),减少 RTT,提高数据传输速度。

容量模型,接口设置最大连接数,通过预知及早拒绝,防止雪崩。现在已经有一些预知能力。

APC 缓存,高并发时底层页静态化以降低后台请求。另外就是分区域保障,一线城市做为重点,二线城市提供有损服务。

对于新闻客户端未来的挑战,我觉得有两点:

一个是视频时代的挑战。越来越多的内容带有视频,而视频带来的流量跟图片的数量级完全不同。这是关于突发、大流量支持方面,新闻客户端未来的挑战。

第二个是直播互动化的挑战。传统媒体可能是电视或者广播直播,一对多的模式,顶多加上热线电话拨入做为互动方式。而现在的直播是可以让用户直接接入并呈现他们的接入,这种模式会更加复杂。手机随时随地让用户可以跟踪,参与一场多媒体的互动直播。如果这个 scale 推广到微信新闻,手 Q 新闻的规模呢?在很快的将来,这些就会到来。

2014-04-11 20:363555

评论

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

兆骑科创赛事承办平台,高层次人才引进,创业服务平台

兆骑科创凤阁

阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计

JackJiang

架构设计 即时通讯 im开发

49张图带领小伙伴们体验一把 Flowable-UI

江南一点雨

spring springboot workflow flowable

《游戏机图鉴》:发展、继承、崩溃、复兴,游戏机的前世今生

图灵教育

开源一夏 |分布式事务

六月的雨在InfoQ

开源 分布式事务 2PC 3PC 8月月更

兆骑科创创新创业服务平台,双创活动承办,企业落地孵化

兆骑科创凤阁

【Metaverse系列二】3D引擎知多少

ThingJS数字孪生引擎

元宇宙

开源一夏 | 使用 HTML、CSS 和 JavaScript 的简单模拟时钟

海拥(haiyong.site)

开源 8月月更

StoneDB 读、写操作的执行过程

StoneDB

MySQL 数据库 大数据 #开源 8月月更

深度学习公式推导(1):神经元的数学公式

老崔说架构

构建元宇宙概念NFT商城系统——艺术数字藏品平台源码部署

开源直播系统源码

软件开发 数字藏品软件开发 数字藏品源码出售

CSS 移动光标使文本产生多个反差色特效

南城FE

CSS css3 前端 动画

深入浅出分布式事务的实现原理

清风

面试 分布式事务 后端 原理 事务

华为云SparkRTC面向低时延、大通量传输业务的技术探索

华为云开发者联盟

云计算 后端 华为云

开源一夏 |ModelScope--人像卡通化、人像美肤

六月的雨在InfoQ

开源 8月月更 ModelScope

开源一夏 | 为什么应该参与开源项目

baiyutang

开源 架构 微服务 开源文化 CloudWeGo

QCN9074, 802.11ax,Wallys, 4x4 MU-MIMO, 6GHz, wifi6E,

wallys-wifi6

QCN9074

需求子任务的数据管理提效实践

转转技术团队

开发工具 测试赋能

得物黑科技|AR测量脚型,解决尺码烦恼

得物技术

AR

水滴低代码搭建——6倍提效,新品首发素材审核系统实践之路

京东科技开发者

CMS 低代码 表单 素材 低代码开发

Github又爆神作!野生程序员自学SpringCloudAlibaba必备学习笔记开源(阿里2022最新版)

Java永远的神

Java 程序员 面试 微服务 SpringCloud

因果决策从YLearn开始,数据智能基础软件迎“风口”

九章云极DataCanvas

人工智能 GitHub 数据智能 YLearn 工具包

移动端四种热更新技术对比

Geek_99967b

小程序

底层原理源码+面试场景还原,阿里巴巴多线程JDK源码学习笔记全网首次公开

程序员小毕

程序员 面试 多线程 高并发 jdk源码

如何成就更高远控帧率和流畅度?向日葵SADDC算法浅析

贝锐

算法 视频解码 视觉策略 远程控制

首届腾讯云大数据峰会开幕在即,现场将发布全新一代产品矩阵

科技热闻

知识管理体系在企业中的作用

Baklib

浅谈成功的企业知识管理

Baklib

阿里SpringBoot实战手册横空出世!从此不再是易学难精

冉然学Java

Java 编程 程序员 Spring Boot 构架

人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11

刘悦的技术博客

Go Go web go语言 Go 语言

什么是知识管理系统?如何改善客户体验?

Geek_da0866

腾讯新闻的海量服务_腾讯_sai_InfoQ精选文章