快速搭建 Serverless 实时按需图像处理服务

本文涉及的产品
简介: 示例讲述了如何快速地利用 FC 函数计算以及 OSS 对象存储服务搭建一个按需转换图像的在线图像处理服务。达到的效果为: 当前端根据用户设备的 media 信息来请求特定尺寸图像副本时,若对象存储中未存在,则通过函数动态生成相关图像存储到对象存储中并返回。
+关注继续查看

简介

随着具有不同屏幕尺寸和分辨率设备的爆炸式增长,开发人员经常需要提供各种尺寸的图像,从而确保良好的用户体验。目前比较常见的做法是预先为一份图像存放多份具有不同尺寸的副本,在前端根据用户设备的 media 信息来请求特定的图像副本。

预先为一份图像存放多份具有不同尺寸副本的行为,经常是通过 阿里云函数计算 FC 以及阿里云对象存储 OSS 两大产品实现的。用户事先为 FC 中的函数设置对象存储触发器,当在存储桶中创建了新对象(即 putObject 行为,此处指在 OSS bucket 中存放了图像),通过 OSS 触发器来触发函数对刚刚存放的图像进行处理,处理成不同尺寸的副本后,将这些副本存放进 OSS bucket。

上述方法的特点是预先处理,如果要处理的图像尺寸较多,那么当图像数量非常大的时候,会占用很多存储空间。假设要处理的图像尺寸数目为 x、图像数量为 y、平均每份图像的大小为 z,那么要占用的存储空间为 x y z。

动态调整图像大小
为了避免无用的图像占用存储空间,可以使用动态调整图像大小的方法。在 OSS bucket 中预先只为每份图像存放一个副本,当前端根据用户设备的 media 信息来请求特定尺寸图像副本时,再生成相关图像。

architecture

步骤:

  1. 用户通过浏览器请求 OSS bucket 中特定的图像资源,假设为 800 * 600 的 image.jpg。
  2. OSS bucket 中没有相关的资源,将该请求重定向至生成特定尺寸图像副本的 api 地址。
  3. 浏览器根据重定向规则去请求调整图像大小的 api 地址。
  4. 触发函数计算的函数来执行相关请求。
  5. 函数从 OSS bucket 中下载到原始图像 image.jpg,根据请求内容生成调整后的图像,上传至 OSS bucket 中。
  6. 将请求重定向至图像在 OSS bucket 中的位置。
  7. 浏览器根据重定向规则去 OSS bucket 中请求调整大小后的图像。

上述方法的特点是:

  1. 即时处理。
  2. 降低存储成本。
  3. 无需运维。

实践

1. 创建并配置 OSS

  • 在 OSS 控制台 中,创建一个新的 Bucket,读写权限选择公共读 (用于本教程示例,可之后更改)。

create_oss_bucket

  • 在 Bucket 的基础设置中,设置镜像回源。

    • 回源类型:重定向
    • 回源条件:HTTP 状态码 404
    • 回源地址:选择添加前后缀,并在回源域名中填写一个已接入阿里云备案的自定义域名。
    • 重定向 Code:302

config_redirect

2. 创建 FC 函数

git clone git@github.com:ChanDaoH/serverless-image-on-the-fly.git

  • 进入项目目录,执行 npm install
  • 填写 template.yml 文件中的相关内容:OSS_REGION、OSS_BUCKET_NAME、自定义域名
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  serverless-image:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: This is serverless-image service
      Policies:
        - AliyunOSSFullAccess
    image-resize:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: src/index.handler
        Runtime: nodejs10
        Timeout: 60
        MemorySize: 512
        CodeUri: ./
        EnvironmentVariables:
          OSS_REGION: oss-cn-shanghai # oss region, such as oss-cn-shanghai、oss-cn-hangzhou
          OSS_BUCKET_NAME: images-xxx # oss bucket name
      Events:
        httpTrigger:
          Type: HTTP
          Properties:
            AuthType: ANONYMOUS
            Methods:
              - GET
              - POST
  william.functioncompute.com: # domain name
    Type: 'Aliyun::Serverless::CustomDomain'
    Properties:
      Protocol: HTTP
      RouteConfig:
        routes:
          '/*':
            ServiceName: serverless-image
            FunctionName: image-resize

3. 测试动态调整图像

  • 在 OSS bucket 中上传一张图像,假设为 image.jpg

oss_image_1

  • 此时请求 https://{OSS_BUCKET_NAME}.{OSS_REGION}.aliyuncs.com/{width}*{height}/image.jpg。会有如下效果:

    1. 下载到指定 width * height 大小的 image.jpg。
    2. OSS bucket 中有 width * height 命名的目录,该目录下有 image.jpg。

show

总结

我们通过 FC + OSS 搭建了一个实时按需图像处理服务,该服务拥有以下特点:

  1. 即时处理
  2. 降低存储成本
  3. 无需运维

资料

  1. 函数计算 Function Compute
  2. Aliyun Serverless VSCode 插件
  3. Fun

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
6天前
|
弹性计算 运维 负载均衡
阿里云函数计算是一种基于事件驱动的全托管计算服务
阿里云函数计算是一种基于事件驱动的全托管计算服务
203 2
|
6天前
|
存储 Serverless 文件存储
不再需要使用阿里云函数计算FC的服务
不再需要使用阿里云函数计算FC的服务
76 3
|
6天前
|
数据采集 Serverless API
在函数计算FC上成功部署SD服务并能通过API进行有效调用
在函数计算FC上成功部署SD服务并能通过API进行有效调用
62 3
|
17天前
|
Kubernetes Serverless 云栖大会
容器与Serverless的完美结合:全球首发的ACS服务让算力交付更加灵活自由
最近的一个重磅新闻刷爆技术圈,那就是阿里云发布了全球首个容器计算服务ACS(Alibaba Container Service),引起了技术圈的广泛关注。在加上近年来容器化技术在云计算领域得到了广泛应用,而且成为构建弹性、可扩展和可移植应用的关键工具。据官方消息,阿里云推出的ACS的最大亮点就是容器可以以Serverless形态交付算力,从而给使用者带来更加灵活、更加自由的体验感受,那么本文就带领大家来深入了解一下ACS这款新产品。
614 0
容器与Serverless的完美结合:全球首发的ACS服务让算力交付更加灵活自由
|
29天前
|
Serverless 开发者
《开发者评测》之Elasticsearch Serverless服务获奖名单
Elasticsearch Serverless服务评测最优奖、潜力奖、争优奖获奖名单正式公布!
357 0
《开发者评测》之Elasticsearch Serverless服务获奖名单
|
1月前
|
监控 前端开发 Serverless
阿里云函数计算(Function Compute,FC)是一种事件驱动的计算服务
阿里云函数计算(Function Compute,FC)是一种事件驱动的计算服务
215 1
|
2月前
|
运维 Serverless 数据安全/隐私保护
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(1)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(1)
239 0
|
2月前
|
运维 Serverless API
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(2)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(2)
238 0
|
2月前
|
运维 Serverless API
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(3)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(3)
253 0
|
2月前
|
运维 Serverless API
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(4)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》三、开箱即用的免运维 ---全托管服务能力(4)
213 0
相关产品
函数计算
推荐文章
更多