1.背景介绍
随着移动互联网的快速发展,各种移动终端设备爆发式的增长,社交类APP 或者电商网站为了提升访问速度、提高用户体验,必须根据客户端的不同性能,不同屏幕尺寸和分辨率提供适当尺寸的图片。这样一来开发者通常需要预先提供非常多种不同分辨率的图片组合,而这往往导致管理难度的提升和成本的增加。
在这篇博客中,我们将探讨一种基于S3的图片处理服务,客户端根据基于HTTP URL API 请求实时生成不同分辨率的图片。
2.解决方案架构
为了保证图片服务的高可用,我们会把所有的图片(包括原图和缩率图)储存于AWS 的对象储存服务S3中,把图片处理程序部署于AWS EC2 中。大部分的图片请求都会直接由AWS S3返回,只有当S3中不存在所需缩率图时才会去请求部署于EC2 上的图片处理服务来生成对应分辨率图片。
业务流程:
用户客户端(通常是浏览器或者APP)发起请求200×200像素的图片
S3中未存在该尺寸缩率图,于是返回HTTP 302 Redirect到客户端
客户端根据 HTTP 302响应,继续请求部署于 EC2 上的图片处理服务
部署于EC2的图片处理服务,会从 S3 获取源图
图片处理服务,根据请求参数生成对应尺寸图片缩率图
图片处理服务将对应的图片返回给客户端
图片处理服务把缩率图存回到S3中,加速下一次客户访问
3.架构特点