微信号:infoqchina

介绍:有内容的技术社区媒体

存储一万亿张图片,需要怎样的架构?

2017-09-29 08:04 付强
嘉宾|付强
编辑|David
QQ 空间(Qzone)是腾讯公司于 2005 年开发出来的个性化空间,12 年过去,目前 QQ 空间用户数量达到 6.233 亿。其中,QQ 空间背后的平台照片总数接近 1 万亿,在这背后的存储架构是怎样的?

2017 年 10 月 17-19 日,QCon 全球软件开发大会将在上海宝华万豪酒店举行。本次大会设置了《快速变化的互联网架构》等技术专题来深入解读互联网圈超快速发展的公司在业务架构进行的各种创新和尝试,其中邀请了腾讯 QQ 空间后台开发 Leader 付强老师前来分享《亿万图片服务平台——QQ 空间海量照片服务平台架构设计与实践》。

我们借此机会采访了付强老师,他为我们带来了有关 QQ 空间海量系统设计的思考和经验,希望可以为大家带来启发。如果读者想了解更多 QQ 空间图片平台架构设计的过程和总结,欢迎报名参加 QCon 上海站与付强老师进一步交流。

1 受访嘉宾介绍

付强,腾讯 QQ 空间后台开发 Leader。

负责国内最大的 UGC 图片平台架构设计与开发工作。有着多年的海量系统设计与移动环境下优化经验,对分布式数据库架构,高可用高并发系统设计等方面都有较深刻的理解,目前平台照片总数接近 1 万亿。

负责过多个技术优化项目,每年带来成本节省超过 1 亿元。目前致力于推动机器学习在图片领域的探索。

2 QQ 空间后台开发团队的背后协作

首先先介绍我们 QQ 空间后台开发团队,QQ 空间相册后台整条链路相关的团队有 5 个:

  • 负责相册业务开发与整体优化的相册后台团队;

  • 负责图片处理的存储开发团队;

  • 负责底层结构化数据库开发的数据开发小组;

  • 负责冷数据备份研究的一个小组;

  • 负责业务运维与机器管理的运维团队

除此之外我们对接对接客户端 IOS,AND,前端 H5 与 WEB 开发的各有一个小组,对接具体项目的推进。

目前我们团队主要负责相册的架构优化,整个系统的性能提升,成本优化,产品特性开发与相册历史数据的挖掘以及推动机器学习在相册照片相关场景的探索与应用。

我们不同技术团队的分工与配合主要有两种方式:

  • 一种是具体项目合作的方式。这种一般是目标比较明确的具体项目推进,各个团队一起参与进来,会有具体的项目负责人和项目经理进行职能的分工与项目进度管理。

  • 另外一种是基于各小组的职能划分,做一些长线探索与技术预研。比如存储方面的深入预研,新型图片格式的研究与推广,低成本的数据备份技术,统一运营管理平台等。很多技术成果同时复用与推广到到内部产品比如微信,微云,邮箱,腾讯云上。

在腾讯内部,只要你目标比较明确并且有足够的挑战,这方面的推动合作往往比较顺利。比如我们上半年与音视频合作的采用 TPG 图片流量优化项目,涉及 4 个部门的多个团队。整个移动端流量优化掉 60%。对于 GIF 格式的图片的节省流量 90% 以上。

3 回顾 12 年老产品的开发之道

QQ 空间已经是有 12 年的“老”产品了,经过 12 年的反复迭代与演化,可以说空间是目前最复杂的产品之一。因为涉及业务广、入口与场景多、历史包袱重,所以一度我们饱受开发效率和维护代价的困扰。目前针对这个问题我们的做法是:

第一,多从产品层面切入与优化,包括历史逻辑(业务)的清理与下线。

同时对于新上的业务逻辑,在设计之初就充分考虑逻辑的解耦与下线逻辑内置。事实证明,基于产品层面业务逻辑的优化对于清理历史包袱有很直接的贡献,这一点往往很容易被开发者忽视。

第二,代码架构设计多考虑扩展性与功能复用。

这一部分我们的做法是多做一些底层的通用标准化组件框架,比如我们现有的 CGI 的组件、Server 开发的组件、移动端接入的组件等等,这样可以把和很多的业务逻辑处理标准化起来,节省不少开发与维护成本。

即使这样,随着业务的不断变化,目前我们的代码还是存在很大的冗余与需要优化的地方,这里的矛盾是业务的重构与优化是无止境的,而对于业务开发来说,资源与时间都很紧缺。

这里我们的经验是把代码重构与需求开发结合起来,在我们的业务开发过程中附加上部分重构优化的工作,或者把架构优化跟成本优化结合起来,这样能更好地推进重构的进展。

4 平台照片接近 1 万亿的困境与架构优化的四个阶段

从用户层面考虑,随着业务规模的变大,意味着所面临的问题会随指数级放大。

对于业务规模比较小的系统,万分之一概率出现的系统问题可以不用太关注,但当业务规模达到万亿级别时,哪怕是百万分之一、千万分之一概率的问题也会因为这个系统规模进行极端放大,因为会影响到相当基数的用户而变成不得不优化解决的问题。

同时从业务层面考虑,你的体量起来了,这里的业务成本与运营代价也会变成不得不经常考虑的问题。

我们业务的第一次架构优化是从 MySQL 集群升级成自研的海量文件系统 TFS(Tencent File System), 支持用户数据规模可以达到 EB 级别,在这当时看来基本相当于整个系统的无限容量的平等扩展了。这个阶段一举解决了容量问题,为业务量的爆发打下了基石。

我们优化的第二阶段主要集中解决用户的接入问题,包括极速上传、跨运营商接入、下载加速,优化后带来了用户较大体验的提升与数据量的大量增长。

随着新型存储介质的出现,以及用户面对照片容量与性能的要求,第三阶段我们的优化重点主要是进行 TFS 的重新设计,主要支持了单个用户的无限容量,同时采用了基于 SSD 介质(TSSD)和高速索引升级版的 TFS,同时对冷数据进行特殊处理以降低成本。

架构优化的第四阶段主要是针对移动端、弱网络进行优化。目前我们优化方向主要集中在高性能,低成本与更强的数据处理能力方面。

现有的系统从存储容量上来看,我们实际容量目前达到了 0.4EB,单从容量这一维度来看,目前的架构完全可以满足未来十年的发展。

在整个架构迭代过程中我们仍保持了高性能,一方面我们架构设计主要的设计思想是简单,包括业务逻辑的简化,与处理过程的简化;另一个点是我们目前采用的是结构化存储,能够针系统进行针对性的优化,这也对高性能有比较大的贡献。

最后我们会考虑整个系统全端优化,能够从用户端到终落地的存储各环节进行系统的优化来保证高性能。目前我们的存储架构也面临主要问题是结构化存储的灵活性比较差一些,这里我们也在借鉴业界的一些思想。

5 自研和开源

其实腾讯内部有很丰富的内部组件与开源软件。

存储来说,像基于 SSD 盘 Key-value 型海量存储系统 TSSD,内存与 SSD 混合型存储的 CKV,基于目录管理的海量文件系统 TFS 和冷存储系统 BTFS。

可以说,在主流互联网公司使用的开源组件在腾讯基本都可以找到对标的产品与解决方案。目前我们使用的组件自研的占比相对多些,主要原因是这些组件都有专门的内部维护团队,而且基本都经过了线上大规模业务的考验与优化,可靠性与实用性比较有保证。

同时我们工程中也有较多的使用开源组件,比如 Redis, Kafka, Ngnix, raft 等都有在我们工程中应用。目前一般独立的模块,中小型的系统我们比较倾向采用开源的框架,灵活性比较好。目前腾讯本身的思路也是尽量把内部好的组件开源出去。

6 为什么要引入机器学习?

机型学习目前的三大应用方向:图片(计算机视觉)、语音、文字。我们积累了超海量的有价值的图片数据。同时之前从我们部门发展出的优图实验室,在机器学习上面积累很深技术储备。最后,基于我们的产品形态、机器学习的成果能够很好的与业务场景结合并进行产品价值的最大化。

所以综合来说,我们具备“天时”、“地理”、“人和”三大因素,进行图片相关的 AI 结合的项目是比较自然的。上半年我们主要在做两个与图片相结合的项目:

第一个是使用机器学习来进行图片内容的识别与用户身份的识别,我们主要使用线上机器的空闲时段来进跑训练好的模型进行图片处理,目前应该是业界规模最大的图片处理系统,每天高峰时处理图片上百亿。

另一个主要是利用客户端的 GPU 和 CPU 能力来进行图片的超分辨率的应用,这个项目也已经上线,能够充分把客户端的处理能力发掘出来,在保证清晰度的情况下节省用户 75% 的带宽。经过极致优化,能够在 80% 以上的手机上能把训练好的模型跑起来。

上述两个项目都取得了不错的效果。随着移动端性能的越来越强,包括现在 GPU 慢慢成为手机的标配,同时结合数据不断积累与算法研究不断突破,AI 相关的应用应该是未来的一个大方向,我们也希望在这一块有更多的发力。

7 存储的未来与建议

存储发展到今天,数据规模与性能目前来看已经不是最大的挑战。这两者目前来看应该都是走在业务前面的。目前比较有挑战的问题主要还是集中在储存系统自带的数据加工处理能力,包括智能数据处理以及大规模存储对价格的要求。目前我们比较关注近几年出现的 NewSQL 和 JBOD,并且有望借鉴引入到我们系统中来。

作为后台开发 Leader, 这些年最大的感受应该是不要把自己完全局限在后台这个领域。实际上前台相关的知识、业务相关的知识,还有通用的包括流程处理相关的知识能够很好地帮助你全面成长。

目前的分布式数据库架构很多,而且不断有新的架构涌现出来,如果要学习这方面的知识的话,建议结合自己的项目或者所做的工具,引入一种最好是开源的框架进行深入学习,最好是以应用过程中碰到的问题来驱动。只要深入进行你会发现,其实很多高并发系统的设计思想是相通的。

QCon:感谢付强老师接受我们的采访,期待您在 QCon 上海站分享的《亿万图片服务平台——QQ 空间海量照片服务平台架构设计与实践》。

如对付强老师的演讲内容感兴趣,欢迎点击下方“阅读原文”进一步了解。


今日荐文

点击下方图片即可阅读

技术顶牛的公司为啥没有 CTO?


 
InfoQ 更多文章 如何保障微服务架构下的数据一致性? 技术顶牛的公司为啥没有CTO? 从核心概念和技术层面着眼,系统化认识RPC 百度开源移动端深度学习框架mobile-deep-learning(MDL) 从100到2.8亿用户,MIUI的发展、创新故事
猜您喜欢 也谈“精益”|洞见 创业如何四年结束战斗?| IDG资本私董会干货 我的h5最佳实践 Java 的最佳实践 【ACL开幕爆料】大会的三个「最」和三个「第一次」