微信号:qzonemobiledev

介绍:QQ空间终端开发团队官方账号,分享QQ空间在Android、iOS、H5等平台的开发经验、技术实践以及一些围绕技术研发的话题.

海量服务之空间相册实战 — 关于90后18岁的元旦

2018-02-06 16:32 vincent&ocean

我们是谁?

Pc时代最大的社交平台,移动互联网时代最大的图片平台,我们不惧人人网、开心网,我们和微博相爱相杀,我们是中国的facebook——QQ空间。空间作为有沉淀的产品,记忆着你我的青春,就想像诺基亚伴随着一代人成长,空间不仅承载着一代人的记忆,而且还在持续的影响下一代人。就像在心里偏安一隅,总有直击内心的时候。


爆发背景

2017年12月30日,最后一批90也快成年了,随着微博吴磊刷出18岁照片,彻底引爆90s晒18岁照片。对于那些80er或者更早的大叔大妈们,也纷纷晒出早年间的青涩照片。QQ空间相册,作为早些年的明星社区产品,承载了大家的青春,大家也纷纷会去挖坟,看看之前的杀马特或者清纯照片,18岁成了最热门的词。

图 18岁搜索指数

当日QQ空间相册承受了全民的访问,我们发现,相册的索引访问量、图片下载量暴涨,索引类的访问是平常周末峰值的321%,下载是流量达到了平时周末峰值的245%。按照相册业务高峰特性,周末高峰时平常的150%。空间相册的访问量,大概是平常的6倍左右。

如果是小业务,直接上机器也就能顶住。作为早年间大杀四方的空间来说,我们的数据总量有:

表 相册用户数据

作为用户海量用户、海量数据的相册业务:

  • 我们如何面对突如其来的请求?

  • 对于请求峰值我们如何快速响应?

  • 对于大量老照片的访问,如何保障可靠性服务?

带着这些问题,我们慢慢揭开QQ空间相册背后的面纱。


深入相册模块

整个相册模块,由接入、逻辑和存储层构成,接入层侧重处理链接保持、安全、流量;逻辑主要完成相册主体功能逻辑;存储层为用户提供高可靠性存储服务。各个模块都无状态,可以快速规模化、逻辑单元间解耦(高内聚、低耦合)、存储单元。模块也按流量、cpu、存储等进一步划分,整体系统具备分级控制、灵活调整能力。

相册模块主要分为逻辑单元和存储单元,逻辑单元为用户提供了丰富的产品形态:带图说说、主题相册、共享相册、照片流等功能。存储单元为用户提供了高性能的跨IDC、同城跨机房的高可靠性数据存储服务

图 相册总体框架图

  • 总体介绍

逻辑单元模块主要由以下模块组成:

  • 接入层通过TGW(TencentGateWay),为业务解决了接入的难题:多通接入、负载均衡、抗攻击能力、高可靠性。

  • 手机接入层主要是空间自研的WNS(WirelessNetwork Service)服务。解决无线网络下链路连通性、流量优化、数据安全以及一些容灾容错功能。

  • 图片适配服务,为用户统一收归图片URL。根据用户场景、网络等情况,下发特定规格的图片。

  • 相册逻辑模块,主要实现相册提供的各种功能实现。

  • 图片上传模块,主要为用户提供高速、可靠的图片上传服务。

存储单元:主要保存了用户的图片数据,采用TFS(TencentFile System)存储,提供跨IDC、同城跨机房、多份数据的可靠性服务。

下载模块:为用户提高快速可靠的图片下载服务,根据图片访问频率,去oc或者dc节点下载数据。

  • 相册逻辑模块

相册逻辑模块主要由接入层和逻辑层组成。

图 相册逻辑模块

CGI模块主要为PC端接入,处理PC相关的相册逻辑。相册业务是pc时代的霸者,现在作为历史的产物,我们尽可能向手机端的接入层切换,作为历史模块,这一块尽管变化较小,但是也做一些简单的迭代和改造。

WEBAPP模块主要为手机端接入,收归鉴权、版本控制等逻辑。这个模块对接WNS接入,向下对接内部逻辑模块。

Upload_proxy模块作为上传模块接入,处理鉴权、维持后端有状态upload模块的路由。

Upload模块主要为上传逻辑server,处理文件缓存、快速入库等逻辑。一个上传任务维持一个全局唯一的sessionid,支持续传,upload_proxy理解sessionid,并将请求路由到特定的upload机器,支持存储层失败容灾,配合上客户端的重试机制,为用户提供高速、可靠的图片上传服务。

Adapt模块,根据用户的场景(比如浏览相册feeds)、手机型号、当前网络环境,动态的下发不同规格的图片,用户图片有原图、高清、大图、中图、小图之分,图片规格又有sharp、webap、jpg之分,需要针对当前用户场景,下发合适的图片;另外,对于用于已经删除的图片、有人脸中心点的图片,也是通过适配模块下发。        

  • 存储模块

存储整体架构如下: