【AWS征文】使用 AWS Serverless 架构动态调整图片大小

无服务器图片缩放API
本文介绍如何使用Python和Serverless框架构建动态图像调整API,实现根据用户设备自动调整图片大小,提高网页加载速度和用户体验。

一、痛点

遇到的一些问题

图片是一个网站提升用户体验必不可少的一部分,但是更多并不是最好。随手拍的照片,没有任何加工的照片可能不需要花费太多的精力就可以集成到用户界面中,但是这些大尺寸、高分辨率的图片会降低整个网页的下载速度,并且这些高分辨率并不能增加多少用户体验。

在移动互联网如此发达的今天,几乎人手一部手机,假如你运行了一个新闻站点,绝大部分用户都在他们的手机上浏览你的网站,他们并不需要高分辨率的图片,高分辨率对他们的显示效果提升了不少,反而会影响加载速度。但是,还有一部分用户使用桌面电脑阅读,网络更好,屏幕也更大更好,高分辨率的图片会提升他们的视觉体验。

从用户体验角度来看,正确的做法是根据用户的使用设备提供不同尺寸的图片。但是我们并不能覆盖所有尺寸的设备,新尺寸设备可能在不断被制造出,并且事先调整图形大小以适应任何想到的屏幕尺寸几乎是不可能的,并且存储所有预先生成所有可能大小的图片会花费巨额的费用,这并不是一个好办法。

一个比较好的办法就是,我们在第一次请求时创建每个尺寸的图形,然后将其保存以备后用。这样,每个设备都可以得到正确的图像大小,我们也可以节省大量的存储成本和计算成本。

因为我们无法预测用户的请求行为,哪次请求需要生成新尺寸的图片,如果准备一台服务器专门处理生成新尺寸图片,可能利用率并不会很高,在请求高峰时期,单台机器的资源也有可能不够。这时候 Serverless 就非常适合了,你只需为你使用的计算付费,并且无服务器应用程序已经设计为自动伸缩以满足用户需求,因此不需要预先准备大量服务器,可以进一步降低成本。即使当用户请求到一个新尺寸照片的时候,应用需要生成新尺寸照片,这个图片大小小图由一个服务器函数完成,计算成本也会低得多。

Serverless Framework

本文我们主要使用 Serverless Framework 和 Python 来构建一个自动调整图像大小的系统,那么 Serverless Framework 是什么呢,我们看一下官方关于 AWS 部分的介绍:

The Serverless Framework helps you develop and deploy your AWS Lambda functions, along with the AWS infrastructure resources they require. It's a CLI that offers structure, automation and best practices out-of-the-box, allowing you to focus on building sophisticated, event-driven, serverless architectures, comprised of Functions and Events.

我们会使用 S3 作为我们的图片存储,S3 是 AWS 云中的一个对象存储,在 S3 中存储图片是一种简单、可伸缩的方法,本文我们就是让每个请求生成它所需要大小的图片,然后将结果存储在 S3 中。

当下次有人请求相同的图片时,将会发生以下两种情况之一:如果已经存在该大小的图片时,那么相应的 S3 URI 直接为我们提供先前存储的图片。但是如何我们还没有这个尺寸的图片,S3 会触发函数生产该尺寸的图片然后返回给我们,同时也会把这个图片保存在云中以备将来使用。

这就是我们所说的“智能”调整大小系统,我们让用户请求他们实际需要的大小的图片,而不是为图片请求的每个可能结果做准备。

有关无服务器框架的介绍与安装,请参照官方文档:

https://www.serverless.com/framework/docs/providers/aws/guide/quick-start/

wangzan:~ $ serverless -v
Framework Core: 1.78.1
Plugin: 3.7.0
SDK: 2.3.1
Components: 2.34.3

二、使用 Serverless 构建无服务器应用程序

创建示例

开始我们可能没有使用 serverless 创建过应用程序,我们这里在 AWS 云环境中创建一个 Hello world 函数演示一下。

  1. 创建一个服务</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值