Flickr 传统的架构 高可用小编根据早些年的资料,整理其架构大致如下。 技术平台 PHP My[color=rgb(68, 68, 68) !important]SQL Shards Memcached 用作缓存 Squid 反向代理. [color=rgb(68, 68, 68) !important]Linux (RedHat) Smarty 模板 Perl PEAR for XML and Email parsing ImageMagick, 用于图片处理 [color=rgb(68, 68, 68) !important]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):用于图像识别[color=rgb(68, 68, 68) !important]算法完善媒体元数据。例如,算法可以识别和标记场景,动作和对象。 聚合服务(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 生存时间以及其他选项)的影响。 除了 Tripod 的通用属性,存储桶还可以由应用程序开发人员自定义组织属性。由 API key 控制对存储桶的读取/写入权限,生成的 OAuth 令牌对存储桶进行用户认证访问。 开发人员使用 Tripod 控制台: 创建存储桶和 API key 定义每个 API key 的存储桶设置和访问控制规则 与 Flickr API 的另一个不同的是 Tripod 可以处理非用户生成的内容(UGC)的媒体。这是许多 Yahoo 应用程序所要求的。 架构和实现 从单一架构到微服务架构面临很大挑战。特别是我们需要在服务之间找到合适的通信方式,其核心是我们的 Pulsar [1] 事件总线,我们通过总线发送 Avro 消息。这让每个 Tripod 团队迅速开发,而不会引入不兼容的更改。 对于数据持久化,我们将大部分数据移动到雅虎的分布式 [color=rgb(68, 68, 68) !important]NoSQL 数据库 [2]。我们一直在试验使用 [color=rgb(68, 68, 68) !important]Redis Cluster 作为缓存层,并使用 Vespa 来驱动聚合服务。对于 Enrichment 服务,我们广泛使用 [color=rgb(68, 68, 68) !important]Storm 和 [color=rgb(68, 68, 68) !important]HBase 的实时处理 Tripod 的计算机视觉算法。最后,我们使用 PIG,Oozie 和 Hive 在雅虎基础大数据平台上运行大量的计算任务。 在 2017 年,我们预计 Tripod 将占 Flickr 规模的 50%,Tripod 支持许多雅虎应用程序的多媒体需求,并且为移动和桌面版近 10 亿雅虎用户提供服务。 Q&A 提问:Tripod 会替代 Flickr 吗? 没有! Flickr 仍然在这里,比以往任何时候都好。 事实上,Flickr 上周庆祝了 13 岁生日! 在过去几年里,Flickr 团队在核心照片管理功能(例如优化的存储空间,动态调整大小,相机胶卷,魔术视图和搜索)上做出重大创新。 我们希望将这些技术进步提供给雅虎的其他团队 提问:Flickr API 怎么样? 为什么不使用呢? Flickr API [3] 正被全世界数万第三方开发人员使用。通过 Flickr API 可以与 Flickr 帐户、照片和群组进行访问,这些使用方通常比 Flickr 网站本身的规模小;它不是为大规模、独立,高度可配置,多租户核心图片管理而设计。 参考资源 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 ... -backend-refactored |