做者:倚贤html
首先介绍下在本文出现的几个比较重要的概念:git
函数计算(Function Compute):函数计算是一个事件驱动的服务,经过函数计算,用户无需管理服务器等运行状况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。<br /> ImageMagick:ImageMagick 是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装。它能够读取、编辑超过100种图象格式。。参见维基百科词条github
ImageMagick 是图片处理的利器,借助 ImageMagick 能够轻松实现图片的裁剪和缩放。虽然不少语言都封装了 ImageMagick 的调用库,可是把图片处理功能和核心业务功能放在同一个服务内,在软件架构上每每不适合。有以下两方面的缘由:docker
一方面,图片处理依赖外部的 bin,已经编译好的二级制不具有可移植性,给打包发布带来了麻烦。另外一方面,图片处理每每是比较耗费计算资源的,对于大多数业务系统来讲图片处理属于边缘业务,而非核心业务,因此为整个服务预留较多的计算资源是不划算的。更好的选择是把图片处理类业务以微服务的形式切分出来,部署在具有弹性的底层服务之上。对于此类技术需求, Serverless 是很是切合的。npm
本文重点介绍如何快速地在函数计算平台上部署一个弹性高可用的图片处理服务,而后在此基础上轻松的定制化。浏览器
<a name="c182e73c"></a>bash
下面咱们借助于函数计算的应用中心,快速地将图片转换服务给部署出来。服务器
打开函数计算 Image Resizer 应用详情页。若是您还没有开通函数计算服务可能须要先,开通服务是免费的,另外函数计算有每个月免费额度,试用服务不会产生费用。 <br />架构
滚动到Image Resizer 应用详情页的最底部,点击“当即部署”按钮。 <br />app
填写应用名称:my-image-resizer
,而后点击“部署”按钮。 <br />
拷贝 HttpTriggerEndpoint 里的网址。 <br />
在浏览器里打开上面的网址,或者经过 curl 进行调用。注意:因为没有绑定域名,因此应用中心会默认下载而不是直接在浏览器里打开图片。
curl 'https://xxxxx.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/my-image-resizer-ResizeService-5A40B5A8B981/my-image-resizer-ResizeFunction-3E71C57C0094/' --output resized.jpg
<a name="b3fbd195"></a>
这是一个单函数结合 Http Trigger 的应用。Http Trigger 以 HTTP GET 方法对外暴露服务,客户端传递三个请求参数:url、width 和 height。其中
该应用的架构图以下:
FC 函数接受到 HTTP 请求以后,执行以下三个步骤:
上面咱们经过了函数计算的应用中心快速上线了一个图片转换的服务。函数计算是按照调用次数收费的,因此上述服务即便保持在线也不会产生费用。而又由于函数计算每个月有免费的额度,因此平常开发的调用也不会产生费用。
<a name="37b47a97"></a>
<a name="c3dd8329"></a>
本项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 Linux 和 Windows 桌面系统应该也一样适用。在开始本例以前请确保以下工具已经正确的安装,更新到最新版本,并进行正确的配置。
Fun 工具依赖于 docker 来模拟本地环境。
对于 MacOS 用户可使用 homebrew 进行安装:
brew cask install docker brew tap vangie/formula brew install fun
Windows 和 Linux 用户安装请参考:
安装好后,记得先执行 fun config
初始化一下配置。
注意, 若是你已经安装过了 funcraft,确保 funcraft 的版本在 3.1.3 以上。
$ fun --version 3.1.3
<a name="2cb472ff"></a>
git clone https://github.com/vangie/fc-image-resizer cd fc-image-resizer
<a name="277b7e0f"></a>
npm install
<a name="26759572"></a>
$ fun local start using template: .fun/build/artifacts/template.yml HttpTrigger httpTrigger of ResizeService/ResizeFunction was registered url: http://localhost:8000/2016-08-15/proxy/ResizeService/ResizeFunction methods: [ 'GET' ] authType: ANONYMOUS function compute app listening on port 8000!
而后使用浏览器或者 curl 调试网址 http://localhost:8000/2016-08-15/proxy/ResizeService/ResizeFunction
<a name="a9f94dcd"></a>
fun deploy
为了得到更好的开发体验,建议安装 Aliyun Serverless VSCode Extension
<a name="ea6f3b87"></a>
“阿里巴巴云原生技术圈关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术圈。”