存储一万亿张图片,需要怎样的架构?
原创转自:http://36kr.com/p/5095882.html
QQ 空间(Qzone)是腾讯的 2005 年开发出来的个性化空间,12 岁月过去了,目前 QQ 空间用户数已达到 6.233 亿。其中,QQ 空间背后的平台照片总数接近 1 万亿元背后的存储架构是什么?
2017 年 10 月 17-19 日,QCon 全球软件开发大会将在上海宝华万豪酒店举行。本次大会邀请了腾讯 QQ 空间后端开发 Leader 付强老师前来分享《亿万图片服务平台——QQ 空间海量照片服务平台架构设计与实践.
我们借此机会采访了付强老师,他为我们带来了有关 QQ 希望设计海量空间系统的思考和经验能为大家提供灵感。
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 B型大容量存储系统 TSSD,内存与 SSD 混合型存储的 CKV,基于目录管理的海量文件系统 TFS 和冷存储系统 BTFS。
可以说,主流互联网公司使用的大多数开源组件都可以在腾讯上找到标杆产品和解决方案。目前,我们使用的自研组件比例相对较高,主要是因为这些组件有专门的内部维护团队,并且基本经过了大规模的在线业务测试和优化,保证了可靠性和实用性。
同时我们工程中也有较多的使用开源组件,比如 Redis, Kafka, Ngnix, raft 等都有在我们工程中应用。目前一般独立的模块,中小型的系统我们比较倾向采用开源的框架,灵活性比较好。目前腾讯本身的思路也是尽量把内部好的组件开源出去。
6、为什么要引入机器学习?
机型学习目前的三大应用方向:图片(计算机视觉)、语音、文字。我们积累了超海量的有价值的图片数据。同时之前从我们部门发展出的优图实验室,在机器学习上面积累很深技术储备。最后,基于我们的产品形态、机器学习的成果能够很好的与业务场景结合并进行产品价值的最大化。
所以综合来说,我们具备“天时”、“地理”、“人和”三大因素,进行图片相关的 AI 项目的组合是很自然的。今年上半年,我们主要从事两个结合图像的项目:
第一个是使用机器学习来进行图片内容的识别与用户身份的识别,我们主要使用线上机器的空闲时段来进跑训练好的模型进行图片处理,目前应该是业界规模最大的图片处理系统,每天高峰时处理图片上百亿。
另一个主要是利用客户端的 GPU 和 CPU 能力来进行图片的超分辨率的应用,这个项目也已经上线,能够充分把客户端的处理能力发掘出来,在保证清晰度的情况下节省用户 75% 带宽。经过极端优化后,可以 80% 训练好的模型可以在上述手机上运行。
以上两个项目都取得了良好的效果。随着移动设备性能的提高,包括现在 GPU 逐渐成为手机的标配功能,同时不断积累数据,突破算法研究,AI 相关应用应该是未来的一个主要方向,我们也希望在这方面有更多的努力。
7存储的未来和建议
存储发展到今天,数据规模与性能目前来看已经不是最大的挑战。这两者目前来看应该都是走在业务前面的。目前比较有挑战的问题主要还是集中在储存系统自带的数据加工处理能力,包括智能数据处理以及大规模存储对价格的要求。目前我们比较关注近几年出现的 NewSQL 和 JBOD并且有望通过参考引入我们的系统。
作为后端开发 Leader, 这些年最大的感受应该是不要把自己完全局限在后台这个领域。实际上前台相关的知识、业务相关的知识,还有通用的包括流程处理相关的知识能够很好地帮助你全面成长。
目前的分布式数据库架构很多,而且不断有新的架构涌现出来,如果要学习这方面的知识的话,建议结合自己的项目或者所做的工具,引入一种最好是开源的框架进行深入学习,最好是以应用过程中碰到的问题来驱动。只要深入进行你会发现,其实很多高并发系统的设计思想是相通的。
QCon:感谢付强老师接受我们的采访,期待您在 QCon 上海火车站共享的亿图服务平台——QQ 空间海量照片服务平台架构设计与实践.
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除