作者丨魏旸:腾讯高级工程师,15年运维经验的老专家,负责QQ空间、微云、QQ空间相册的运维工作,亲历8亿军装照、QQ空间异地多活建设等重大架构升级事件。

2017年12月30日,元旦假期的第一天,你的朋友圈被18岁照片刷屏了吗?据说“晒18岁照片”的根源是2017年年未,最后一批90后将度过他们的18岁生日。这意味着,90后已全部成年,集体告别了青葱芳华。

这是一个青春的、也是怀旧的年华,QQ空间做为国内第一批社交平台产品,承载了较多的用户记忆,大量的用户涌入QQ空间翻找自己多年前的18岁照片晒上社交平台。集体引爆了空间相册山洪峰涌而至的照片流量。

下面这篇文章让我们回顾12月30日,空间相册面对突发四倍流量,七成访问落在后端冷存储的极端压力下,相册运维、开发团队如何凭借平时基础功底,从告警、容量、扩容、柔性、调度等全方面运维能力,扛过“18岁照片”的全民怀旧事件。

业务数据回顾

突然来袭的用户集中行为,给我们平台的能力带来了非常严峻的考验,先让我们先来看一组数据:

1) 图片下载量峰值达到平日晚高峰的4倍,且70%以上都聚集在平日不怎么访问的冷图片。

2) 图片上传量达到平日晚高峰的4倍。

3) 带图说说峰值达到平日晚高峰的12倍。

业务架构剖析

面对突然涌入的用户请求,相册开发与和运维是如何坚守阵地,度过这次难关的呢?

在介绍一系列的措施之前,首先不得不介绍下相册业务架构,下图较为抽像地介绍了相册的主要架构:

  1. 上传链路: 用户上传图片/视频,数据流主要由上图中间链路处理,经过proxy->逻辑(分片、权限、缓存等)->存储接入(分片整合、生成文件地址等)->落地存储
  2. 下载链路:
  3. 用户通过空间(说说、日志、动态等)访问相册图片,图片适配模块根据用户请求、终端、请求量等场景适配出最优图片规格,返回用户图片、视频URL。
  4. 用户通过上一步获取的URL 访问后端存储的图片、视频。

日常运维工作

同时,我们介绍一下腾讯SNG社交网络运营部平时进行的一些日常容量管理工作。

1) 链路梳理

如上节所述,我们梳理出相册核心链路,常用梳理过程有几种:

  • 通过抓包形式确定链路模块
  • 通过设备上报的主被调数据确定调用链路
  • 名字服务中获取相关的调用链数据。
  • 通过全链路数据汇总出相关的链路。

2)压测:

定期对整条链路做压测,压测手段有异地调度压测,或单机压测,通过压测找出链路内存在瓶颈的模块,及时修正链路模型。

3)高低负载处理:

依据压测容量数据,分配设备扩容。负载较低的模块设备进行缩容下线以节省成本。

容量应急措施

但是这里的问题是显而易见的:以上常规性的工作,只能发现常规场景下内部存在的瓶颈。像18岁照片这种特殊场景(用户大量读取空间相册,获取冷数据),无法通过常规压测检测出来问题, 这就需要一系列的机制来解决

1) 监控和容量弹性机制:

通过IaaS层监控对系统的基础特征进行监控,(如CPU负载,出入流量),当模块容量出现异常时,弹性扩容机制需要介入处理,进行扩容。

如何快速支持短时间扩容上千台设备呢?不得不介绍一下腾讯SNG的织云运维理念。

如上文所述,我们的设备被分配到不同的“业务模块”,而每一个模块有如下的属性:

1) 包:业务处理逻辑文件包,包含业务包与基础包。

2) 配置:包含业务包要使用到的各种配置

3) 权限:包含支撑业务包正常运行时需要的数据库、内部鉴权系统等权限

4) 测试工具:包含业务包启动后,能否接入现网的测试标准

织云提倡的自动化理念是:标准化 -> 配置化 -> 自动化,让企业的常用操作固化成流程工具。不依赖容易过期的文档,不依赖容易流失的人的经验。

参考持续交付的原则“为软件的发布创建一个可重复且可靠的过程”,运维团队为了解决人肉操作经验差异的难题,将运维操作通过流程DIY编排能力,实现标准操作的固化。“18岁照片”活动扩容,任何一个运维人员只需要执行QQ相册的扩容功能即可实现容量扩展,而织云流程会自动化的完成整个服务部署和上线的操作。(如下图)

柔性业务架构

前面我们说过,相册在当天的峰值下载量涨了4倍,且多是访问冷数据,但在短时间内无法筹集到4倍的资源,业务是如何应对的呢,在保证用户核心体验不受影响的前提下,我们采用了一些柔性手段。

回顾一下,当时我们在容量不足时碰到以下的问题,导致短时间内部分图片拉取耗时过长,影响用户体验。

1) 存储压力过大。

2) 自身模块压力过大。

针对存储压力过大的问题,我们采用了以下几个手段来降低业务负载:

1) 存储手段

a. 图片适配优化索引策略减少存储压力

减少拉取照片分批次数,降低后端存储处理压力。分批拉取照片列表数量增加3倍。交互次数直接下降近2/3。

b. 图片上传增加本地缓存空间减少存储高负载造成的用户上传失败

调整上传逻辑模块,从原来的本地内存缓存优化为内存+本地磁盘缓存,通过增加本地缓存空间减少后端存储高负载对用户侧上传图片/视频的影响。虽然底层存储高负载了,但是用户还是可以不受底层影响,将图片通过接入上传到逻辑层缓存。存储压力释放后即可将逻辑层缓存的数据上传到存储层。

c. 降低图片规则,减少图片下载流量:

一张图片分为小、中、大三种规格,为了节约存储容量中图是通过图片压缩模块实时压缩返回给用户的,小图和大图真实存储在存储模块。为了降低图片下载的流量压力,我们调整了适配策略,用户访问大图,适配直接返回小图的url,减少了图片压缩逻辑,并且降低了带宽。调整后图片下载带宽对比如下:

d. 上传不检查相册有效性,减少存储索引访问量:

正常情况,在用户上传图片时到相册时,会检查相册是否存在,如相册已被删除,则直接报错。柔性策略跳过相册有效性检查,直接上传图片到后端存储,降低索引访问量,降低索引模块负载。

同时在业务逻辑上,也做了以下的柔性措施:

a. 核心模块启用过载保护机制:

判断单机cpu使用率超过80%时,会自动丢弃多余的请求,以保证业务逻辑模块在大量用户请求场景下不雪崩。

b. 柔性关闭非核心业务功能减少业务自身负载

每张图片在高速存储会存储一份位置信息,图片裁剪时用于标示一张图片核心元素的位置。禁用此逻辑后,用户看到的图片无人脸中心点, 客户端裁剪可能不准确。

关闭用户删除标记,适配图片适配前会预先检测图片是否被删除,如已被删除则不会返回对应的图片列表。删除标记逻辑也会频繁和索引模块交互,高峰期时会占用大量计算资源。禁用此逻辑,用户访问相册时会看到已被删除的图片,但是会标记为灰色已删除。

调度:相册业务分布在三地,每地分别承载了约33%的用户,某地请求过高时,我们可以调度用户至其他容量相对较低的地域。

小结

从“18岁照片全民怀旧”热点社交事件可以看到,事发过程中留给运维的时间相当少,只有严格贯彻“养兵千日用兵一时”的标准化运维理念,建设完善的运维体系,才能在突发事件中游刃有余。

后记

这次18岁照片活动,相册通过多种手段顶住了业务压力。 同时通过这次活动,我们也对未来的运维工具进行了进一步规划,比如:

a) 基于容量的智能调度体系

b) 资源托管平台。

c) 自动演习系统。

织云平台的运维能力在不断迭代,期待在下一次活动来临时能够做到更加有条不紊。

看腾讯运维应对“18岁照片全民怀旧”事件的方案,你一定不后悔!相关推荐

  1. 献礼724运维日 | 首届腾讯运维技术开放日讲了啥? (附演讲PPT领取方式)

    你以为996就是互联网人的极致吗?有这样一个神秘工种,7×24随时随地待命,全年无休,以至于把7.24过成了他们的专属节日--这就是运维. 作为服务数十亿用户的互联网公司,腾讯运营着亚洲最大的网络.服 ...

  2. 大牛书单 | 腾讯运维大咖陪你过724

    导读:读书,伴随技术人的一生.技术人通过读书增长见闻.精进技术,提升人生境界.7·24运维日即将到来,我们特别邀请该领域的腾讯技术大咖推荐曾经读过的好书佳作,以飨读者. 推荐人介绍 推荐人介绍 周纪海 ...

  3. 首届腾讯运维技术开放日!对外报名正式启动!

    服务不停歇,运维不休息. 运维的工作长达7*24 小时,故而每年的 7月24日被视为运维日,代表着运维全天候的保障系统稳定.维护业务正常运行.时刻准备着一线工作的召唤. 腾讯运维技术开放日是由腾讯云, ...

  4. 超硬核!腾讯运维岗面试必问11题,我说的,不信就来看看

    不要怕大公司面试,找到核心的高频问题,就解决了80%的面试题 请你谈谈进程和线程的区别? 1)进程 进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有 ...

  5. 云时代的腾讯运维团队转型:ECUG 10周年大会演讲

    编者按:运维职能越来越多被云平台取代,运维如何转型 DevOps,以便继续为业务提供快速.低成本的支撑工具.运营系统?来自腾讯蓝鲸的产品总监党受辉在 ECUG 十周年大会上分享了腾讯运维团队的实际案例 ...

  6. 腾讯运维工程师认证(TCA)认证考试的知识点

    前言 腾讯运维工程师认证(TCA)认证考试的知识点,以下分享以下我的学习笔记. 下面是第一章 腾讯运维的概述 一.腾讯云产品概述 1.云网络 包括:负载均衡.私有网路.弹性网卡.专线接入.NAT网关. ...

  7. 让运维更高效:关于ECS系统事件

    摘要: 阿里云会针对ECS实例发布系统事件,当您收到阿里云计划维护的通知时,可以利用ECS系统计划事件了解与实例相关的计划维护操作,并根据您的业务特性选择合适的时间安排运维操作进行故障转移,减少对系统 ...

  8. 堪称范本!腾讯运维转型之 SRE 体系建设

    作者介绍 刘天斯,腾讯 IEG 在线营销 SRE 负责人,腾讯 T12 级技术专家,国家工程实验室兹聘专家.从事互联网技术运营近 16 年,热衷开源技术研究与应用,擅长海量服务运维(SRE)与规划.云 ...

  9. 看蓝鲸标准运维如何编排一切

    关注嘉为科技,获取运维新知 蓝鲸智云,简称蓝鲸,是腾讯游戏运营部"腾讯智营"下的子品牌.它是一套基于 PaaS 的企业研发运营一体化技术解决方案,提供了一个完整的研发.运维.运营的 ...

最新文章

  1. nginx系列:nginx反向缓存代理详解
  2. excel:替换问号?时会所有数据被替换掉(通配符问题)
  3. 在VS.NET中使用clickonce技术开发Winform程序
  4. flutter系列InheritedWidget介绍
  5. Linux C :系统调用-fork,wait,subreaper
  6. CEGUI添加自定义控件
  7. idea 添加servlet依赖_详解如何使用IntelliJ IDEA新建一个Servlet项目
  8. 编译WINDOWS版FFmpeg:编译SDL
  9. ELF格式文件符号表全解析及readelf命令使用方法
  10. vpp之node节点分析二: qs类型
  11. python中计算结果保留两位小数
  12. java:个人所得税计算器
  13. 史上最牛恶搞小游戏,快快转发,分享这份“快乐”
  14. 手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中)
  15. 基于反馈电阻法的恒流源小信号的检测
  16. 【opencv4.3.0教程】11之调整图像边缘(copyMakeBorder 与 borderInterpolate)
  17. 微型计算机硬盘安装在哪,微型计算机的硬盘是该机的
  18. 电子作业票系统:消除安全管理漏洞,科技赋能企业业务洞察
  19. SYSTEM32 下的几乎所有文件的简单说明(原由无忧启动论坛老毛桃出)
  20. 华为1+X网络系统建设与运维(中级)——IPv6协议概述

热门文章

  1. 【设计模式】三大类:创建型模式、结构型模式、行为型模式
  2. Qt中文手册 之 QHeaderView
  3. 推荐本人微博及浅谈发博原则
  4. 虚拟机管理你的服务器,全面解析VMware的虚拟机管理解决方案
  5. 98级计算机应用教材,西安外事学院98级计算机应用9806班毕业二十年校友返校
  6. 未找到beta版怎么解决_刚刚,谷歌正式发布Android 11 Beta版,带来多项重磅更新...
  7. 大学计算机专业副修课,计算机学院举行本科课程教学大纲修订工作研讨会
  8. 模具和java哪个好_93年,本科毕业一年(模具专业),想学Java转行怎么样?
  9. sql文本编辑器_专业文本编辑工具
  10. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...