掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

存储130亿张图片的新平台:Flickr的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 团队的创新和能力。

十几年来,Flickr 一直是世界上最大的照片共享社区之一,用户总共上传超过 130 亿张照片。Tripod 提供了一个很好的机会,把 Flickr 功能带到雅虎其他网络产品。

Tripod 三大服务


顾名思义,Tripod 提供三大服务:

  • 存储及转码服务(Pixel Service):用于上传,存储,调整大小,修改照片和视频。

  • 增强服务(Enrichment Service):用于图像识别算法完善媒体元数据。例如,算法可以识别和标记场景,动作和对象。

  • 聚合服务(Aggregation Service):用于应用程序和跨应用程序元数据聚合,过滤和搜索。

这三种服务的组合使得 Tripod 成为新一代图片服务平台。还有一个管理控制台,用于配置应用程序与Tripod的集成,以及身份服务,用于身份验证和授权。

The Pixel Service

Flickr 已经具有高可扩展性的照片上传和转码的流水线。在大规模处理海量照片和视频的情况下,Flickr 的移动和API团队调优相关技术(如断点上传和防重机制)以创建高品质的照片上传体验。Flickr 解决了优化存储而不影响照片质量的挑战,并添加了动态调整大小以支持更多样化的客户端照片布局的功能。


多年以来,Flickr 团队已经证明可以支持每秒上传超过 500 张照片,完整的流水线包括 PHP 上传接口,后端 Java 服务(Image Daemon,Storage Master),美国西部和东部海岸的上传热点,以及五个全球照片缓存点以及大量 CDN。

在 Tripod 的 Pixel 服务中,我们利用所有这些核心技术基础设施,除了新的 Java API,我们还实现了一个新的基于桶的数据模型。

The Enrichment Service

在 2013 年,Flickr 取得了令人兴奋的飞跃。雅虎收购了两家计算机视觉技术公司 IQ Engines 和 LookFlow,并将这些团队转到 Flickr。使用他们的图像识别算法,我们增强了 Flickr 搜索和 Flickr Magic View。

在 Tripod 中,Enrichment 服务提供应用图像识别技术,产生丰富的元数据,可用于增强过滤,索引和搜索。Enrichment 服务可以识别地点,主题,地标,对象,颜色,文本,NSFW内容和最佳缩略图。它还执行 OCR 文本识别,并生成美学分数来指示照片的整体质量。

The Aggregation Service

Aggregation 服务允许应用程序(如Yahoo Mail)根据任何条件查找媒体。例如,它可以返回属于特定应用中的特定人的所有照片(例如,2015年3月1日之前的旧金山)

Vespa 是 Yahoo 的内部搜索引擎,索引每个多媒体的元数据。如果已运行 Enrichment Service 过,则元数据被 Vespa 索引,并且可用于 Aggregation API。 调用 Aggregation 服务的结果集取决于读取权限。

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 生存时间以及其他选项)的影响。

588-640.jpg.jpg

除了 Tripod 的通用属性,存储桶还可以由应用程序开发人员自定义组织属性。由 API key 控制对存储桶的读取/写入权限,生成的 OAuth 令牌对存储桶进行用户认证访问。

开发人员使用 Tripod 控制台:

  • 创建存储桶和 API key

  • 定义每个 API key 的存储桶设置和访问控制规则

与 Flickr API 的另一个不同的是 Tripod 可以处理非用户生成的内容(UGC)的媒体。这是许多 Yahoo 应用程序所要求的。


架构和实现

从单一架构到微服务架构面临很大挑战。特别是我们需要在服务之间找到合适的通信方式,其核心是我们的 Pulsar [1] 事件总线,我们通过总线发送 Avro 消息。这让每个 Tripod 团队迅速开发,而不会引入不兼容的更改。

对于数据持久化,我们将大部分数据移动到雅虎的分布式 NoSQL 数据库 [2]。我们一直在试验使用 Redis Cluster 作为缓存层,并使用 Vespa 来驱动聚合服务。对于 Enrichment 服务,我们广泛使用 Storm 和 HBase 的实时处理 Tripod 的计算机视觉算法。最后,我们使用 PIG,Oozie 和 Hive 在雅虎基础大数据平台上运行大量的计算任务。

在 2017 年,我们预计 Tripod 将占 Flickr 规模的 50%,Tripod 支持许多雅虎应用程序的多媒体需求,并且为移动和桌面版近 10 亿雅虎用户提供服务。



高可用架构

改变互联网的构建方式


长按二维码 关注「高可用架构」公众号

原文来自:高可用架构

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 全球天气预报

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future