导读:最近在 Yahoo 官方的工程博客上,透露了最新的图片及视频底层平台 Tripod,雅虎如何在如此大的规模上对多媒体数据进行处理,存储和检索,对很多类似服务都有借鉴意义。Tripod的设计和实现也基于微服务这一流行架构理念,本文也对微服务系统常见的问题做了阐述。本文由高可用架构翻译。
Flickr 传统的架构
高可用小编根据早些年的资料,整理其架构大致如下。
技术平台
PHP
MySQL
Shards
Memcached 用作缓存
Squid 反向代理.
Linux (RedHat)
Smarty 模板
Perl
PEAR for XML and Email parsing
ImageMagick, 用于图片处理
Java, for the node service
Apache
SystemImager 用作发布
Ganglia 用于系统监控
Subcon 用作配置
Flickr 的传统架构用现在的眼光看起来可能有些老旧,但在社交网络出来之前可是学习互联网架构的经典,高可用小编当年也是拿着其架构图参阅领会,更多传统的 Flickr 架构可以参阅 [4]。
然而到了社交网络时代,已经很长时间没有看到 Flickr 的架构更新说明了,上周 Yahoo 的工程博客上发表了其新的 Flickr 架构,我们来看看满足当前时代需要的新的图片及多媒体架构究竟是如何重新设计的。
Flickr 新的 Tripod 架构
今天,雅虎邮件引入了一个功能,允许自动同步手机照片到雅虎邮件,以便当您从写电子邮件的时候照片随时可用。这一功能背后的关键技术是新的图片和视频平台称为“Tripod”,这是出自 Flickr 团队的创新和能力。
Tripod 三大服务
顾名思义,Tripod 提供三大服务:
存储及转码服务(Pixel Service):用于上传,存储,调整大小,修改照片和视频。
增强服务(Enrichment Service):用于图像识别算法完善媒体元数据。例如,算法可以识别和标记场景,动作和对象。
聚合服务(Aggregation Service):用于应用程序和跨应用程序元数据聚合,过滤和搜索。
这三种服务的组合使得 Tripod 成为新一代图片服务平台。还有一个管理控制台,用于配置应用程序与Tripod的集成,以及身份服务,用于身份验证和授权。
The Pixel Service
Flickr 已经具有高可扩展性的照片上传和转码的流水线。在大规模处理海量照片和视频的情况下,Flickr 的移动和API团队调优相关技术(如断点上传和防重机制)以创建高品质的照片上传体验。Flickr 解决了优化存储而不影响照片质量的挑战,并添加了动态调整大小以支持更多样化的客户端照片布局的功能。
The Enrichment Service
在 2013 年,Flickr 取得了令人兴奋的飞跃。雅虎收购了两家计算机视觉技术公司 IQ Engines 和 LookFlow,并将这些团队转到 Flickr。使用他们的图像识别算法,我们增强了 Flickr 搜索和 Flickr Magic View。
The Aggregation Service
Aggregation 服务允许应用程序(如Yahoo Mail)根据任何条件查找媒体。例如,它可以返回属于特定应用中的特定人的所有照片(例如,2015年3月1日之前的旧金山)
APIs and SDKs
每个服务表示为一组 API。我们升级了 API 技术栈,从 PHP 切换到 Spring MVC,并利用最新的 Spring 特性,例如 Spring Data,Spring Boot 和 Spring Security 以及 OAuth 2.0。使用 Swagger (http://swagger.io/) 定义和记录 Tripod 的 API。每个服务都是从独立的 Git 存储库独立地开发和部署的,具有独立的构建生命周期和微服务容器。
Swagger Editor 可以根据 Yahoo 开发人员的需要,轻松自动生成各种语言的 SDK。iOS 和 Android SDK 是移动开发最常用的,JS SDK 是 Web 常用的,通过 SDK 可以实现移动及 Web 端轻松与 Tripod 集成。
Buckets and API Keys
Tripod 数据模型与 Flickr 数据模型不尽相同。Tripod 应用程序,存储桶和 API 加入了多租户的概念,具有强大的访问控制能力。应用程序是 Tripod 服务的使用方,如 Yahoo Mail;存储桶是应用程序存储的逻辑容器,应用程序中的媒体(media)受到存储桶设置(例如压缩率,容量,TTL 生存时间以及其他选项)的影响。
除了 Tripod 的通用属性,存储桶还可以由应用程序开发人员自定义组织属性。由 API key 控制对存储桶的读取/写入权限,生成的 OAuth 令牌对存储桶进行用户认证访问。
开发人员使用 Tripod 控制台:
创建存储桶和 API key
定义每个 API key 的存储桶设置和访问控制规则
与 Flickr API 的另一个不同的是 Tripod 可以处理非用户生成的内容(UGC)的媒体。这是许多 Yahoo 应用程序所要求的。
架构和实现
从单一架构到微服务架构面临很大挑战。特别是我们需要在服务之间找到合适的通信方式,其核心是我们的 Pulsar [1] 事件总线,我们通过总线发送 Avro 消息。这让每个 Tripod 团队迅速开发,而不会引入不兼容的更改。我们预计 Tripod 将占 Flickr 规模的 50%,Tripod 支持许多雅虎应用程序的多媒体需求,并且为移动和桌面版近 10 亿雅虎用户提供服务。
Q&A
提问:Tripod 会替代 Flickr 吗?
没有! Flickr 仍然在这里,比以往任何时候都好。 事实上,Flickr 上周庆祝了 13 岁生日! 在过去几年里,Flickr 团队在核心照片管理功能(例如优化的存储空间,动态调整大小,相机胶卷,魔术视图和搜索)上做出重大创新。 我们希望将这些技术进步提供给雅虎的其他团队提问:Flickr API 怎么样? 为什么不使用呢?
提问:如何加入贵团队?
tripodjobs@yahoo-inc.com。
高端研发岗位推荐
新年开始,很多高可用架构读者都有求职需求,因此高可用架构近期会精选一些岗位推荐给大家,这些岗位及团队负责人都经过高可用架构验证,年薪50万以上。
马哥教育 Python资深讲师兼学科创始人 北京
负责Python课程研发、设计、实现及迭代,负责学科教学整体建设
要求:5年以上工作经验,3年以上Python开发经验,2个以上大型项目设计及带队实现经历;有多次分享或授课经验优先;精通Python编程,熟悉前端框架(Django&Flask等)、Jquery、VUE、算法等;有C/C++或JAVA项目经验优先;
待遇:年薪50W-100W
邮箱:stanley@magedu.com
(高端招聘岗位发布欢迎与小编联系,仅供高可用架构后花园会员)
参考资源
https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale
https://yahooeng.tumblr.com/post/120730204806/sherpa-scales-new-heights
https://www.flickr.com/services/api/
本文英文原文:https://yahooeng.tumblr.com/post/157200523046/introducing-tripod-flickrs-backend-refactored
推荐阅读
本文最初出现在Yahoo官方技术博客,由高可用架构翻译,转载请注明出处,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
高可用架构
改变互联网的构建方式
长按二维码 关注「高可用架构」公众号