大型图片网站 500px 是如何处理图片的?

500px 是一个国际大型图片类网站,致力于摄影分享、发现、售卖的专业平台

需要处理海量用户上传的图片,并且有N倍于上传量的图片展示量

根据一年前公布的数据,500px 每天会产生20TB的数据传输量

500px 的基础架构

开发语言主要是 Ruby on Rails

前端请求处理使用 Nginx

服务集群使用 HAProxy 处理负载均衡

数据存储使用 MySQL, MongoDB, Redis, Memcached

Sidekiq 在后台做任务处理

服务器使用 Amazon 的弹性云服务 EC2

图片存储使用 Amazon 的云存储 S3

大规模的使用了微服务,例如:

搜索相关的服务,基于 Elasticsearch

内容相关服务

动态信息服务

图片处理服务

为前端提供接口的API服务

500px 的图片处理

图片处理是重点服务,500px 使用了3个微服务

这3个微服务都是使用Go开发的,500px的这个选择是因为:Go可以很好的处理并发、代码少、运行快,适合图片服务的场景

第一个服务是处理图片上传的 Media Service

接收用户上传的图片,做一些简单的逻辑处理,保存到S3,然后在 RabbitMQ 队列中添加一个任务,交给后续处理流程

第二个是图片转换服务 Converter Service

消费 RabbitMQ 队列,然后从S3中取得相应原图,对其进行一连串的处理,例如生成一系列不同尺寸的小图,再保存到S3,这些小图很重要,在网站和手机应用中的很多地方都会用到

前期,这两个服务已经够用了,能够对用户上传的图片进行相应处理,保存到S3,提供CDN源,这就满足了基本需求

后来,随着网站规模的增长,发现这套方案成本高、空间利用率低,并且当需要新尺寸的图片时非常不灵活

解决的方法就是新增了一个微服务 Resizer Service

把生成小图的功能从 Converter Service 中提取出来,由 Resizer Service 专门处理,他能根据原图动态的生成任意尺寸或者格式的小图、添加水印、对图片进行参数修改

CDN源也从 Converter Service 转到了 Resizer Service

Resizer Service 相当高产,这个服务集群可以在高峰期处理1000个请求/秒,图片的缩放和水印等是计算密集型操作,所以,在高峰期要保障合理的响应时间是个不小的挑战,500px为此做了很多优化,实现了在高峰期时,95%的响应时间在180ms以下,非高峰期,在150ms以下

优化的功臣之一是 VIPS 图片处理库,主要特点:

(1)提供了一系列滤镜、色彩处理、几何变换等强大功能

(2)支持相当多的格式,如 JPEG、TIFF、PNG、GIF、WebP、FITS、OpenEXR ……

(3)处理速度非常快、内存占用少

500px 还在试验更多的优化方法,以达到更低的响应时间

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhisheng

Python爬虫入门二之爬虫基础了解

1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓...

3386
来自专栏实用工具入门教程

如何部署 NTP 服务器

NTP 全称为 Network Time Protocol ,中文翻译为网络时间协议,1985年就已经被提出,旨在缩短互联网上所有计算机设备与 UTC 的时间差...

3711
来自专栏c#开发者

使用Web Client Software Factory构建企业级web应用

Web Client Software Factory初始 简介 Web客户端软件工厂( wcsf )提供了一套指导建筑师和开发人员来构建企业级的Web应用...

3414
来自专栏七夜安全博客

一款多平台网络穿透工具EW

该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。

1472
来自专栏假装我会写代码

基于 Laravel 的用户动态模块开发

1453
来自专栏张戈的专栏

SEO养博客神器:同步文章(或摘要)到新浪博客的WordPress插件

了解 SEO 的站长都会另外用心做几个博客,起到 SEO 辅助作用。通常说的养博客主要是养 BSP 博客。比如新浪博客,网易博客,百度空间,网易博客,新浪博客,...

4296
来自专栏葡萄城控件技术团队

优化Webpack构建性能的几点建议

1923
来自专栏逸鹏说道

Web前端性能优化教程01:减少Http请求和使用内容分发网络

性能黄金法则 只有10%-20%的最终用户响应时间花在接收请求的HTML文档上,剩下的80%-90%时间花在HTML文档所引用的所有组件(图片,script,c...

4297
来自专栏Youngxj

Markdown For emlog插件

2226
来自专栏大内老A

谈谈基于OAuth 2.0的第三方认证 [上篇]

对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成。具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确...

19310

扫码关注云+社区