前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大型图片网站 500px 是如何处理图片的?

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

作者头像
dys
发布2018-04-03 17:31:25
1.5K0
发布2018-04-03 17:31:25
举报
文章被收录于专栏:性能与架构性能与架构

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 还在试验更多的优化方法,以达到更低的响应时间

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档