引言
又到了一周一次的解决方案测评频道了,本次测评的主题是《告别资源瓶颈,函数计算驱动多媒体文件处理》,测评地址如下:https://developer.aliyun.com/topic/fc-drive-file 。
废话不多说,下面我们就一起来看看解决方案吧!
函数计算驱动多媒体文件处理
解决方案
具体的细节这里先不说,单从排版、文档结构、内容组织来看,这篇堪称上乘之作,比我上次看到的解决方案都要好很多。
文档的标题层级分明,从主标题到子标题,再到更细粒度的小节标题,一目了然,让读者能够迅速找到感兴趣的部分;内容按照逻辑顺序组织,从问题的提出、解决方案的介绍到具体实施步骤,环环相扣,条理清晰,完整全面,读起来非常的顺畅,完全可以作为一份新客户的指导教程,很赞!
部署实践
点击解决方案中的【立即部署】,进入到部署界面,分为一键部署和手动部署两种形式:
其实这里也不用想,自然是一键部署从效率上更优于手动部署,而手动部署的灵活程度优于一键部署,不过,秉着探索精神,下面还是从头到尾实践一遍。
一键部署体验
我们直接进入到第三步,点击蓝色字体处的一键部署:
资源栈名称和存储空间名称先保持默认,我们修改一下应用登录配置中的登录名及密码:
选择可用区及实例类型,设置实例的登陆密码:
设置数据库登录名及密码,选择RDS实例规格:
点击创建,发现权限有缺失,点击立即开通:
同意授权即可:
假如当前尚未开通,需在此开通消息服务MNS,按量付费的,不用担心。
回到刚才那个界面后点击继续创建:
创建完成后如下图所示:
点击输出,点击下面的url地址:
输入刚才设置的用户名及密码:
在文件管理页面,单击上传新的文件,在上传文件对话框,上传ppt文件,示例要求必须是pptx文件格式。
上传完成后可以在文件列表页面看到上传记录,稍等几秒后文件处理完成,可以在页面看到如下状态,点击可以下载处理后的ppt。
我们查阅该资源栈的执行模板,可以看到,当前网站运行多媒体文件处理的代码确确实实是运行在函数计算FC上的。
"FcFunction": {
"Type": "ALIYUN::FC::Function",
"Properties": {
"Code": {
"OssBucketName": {
"Ref": "OssBucket"
},
"OssObjectName": "fc-code/fc-web-demo-job-jar-with-dependencies.jar.zip"
},
"FunctionName": {
"Fn::Sub": "${CommonName}-function"
},
"ServiceName": {
"Fn::Sub": "${FcService.ServiceName}"
},
"MemorySize": 1024,
"Handler": "com.aliyun.demo.Main::handleRequest",
"DiskSize": 512,
"Timeout": 120,
"Runtime": "java11",
"Cpu": 0.5
},
"DependsOn": "DeployApplicationOnEcs"
},
而这也恰恰佐证了背景中所言,使用函数计算来托管运行多媒体文件处理的代码能显著提升文件处理的效率和可靠性。
手动部署体验
手动部署这里也是分为两个部分的,一部分是基础的服务资源配置即部署资源,一部分是应用配置即部署应用。
在部署资源中,我们需要部署专有网络VPC、交换机和安全组,创建云数据库 RDS MySQL实例,创建消息服务MNS队列,创建对象存储OSS Bucket,创建角色和权限策略,创建云服务器ECS。
这里按照操作文档一步步执行即可。
在部署应用上,我们还是需要手动执行一些操作。
登录云服务器ECS管理控制台。点击右上角的远程连接,并使用root权限登录到云服务器。
部署JAVA环境:
yum upgrade & yum install java-1.8.0-openjdk-devel
验证安装成功,执行如下命令:
java -version
编辑环境变量文件如下:
vim ~/.bashrc
export APPLETS_RDS_ENDPOINT=<数据库连接地址>
export APPLETS_RDS_USER=<数据库用户名>
export APPLETS_RDS_PASSWORD=<数据库密码>
export APPLETS_RDS_DB_NAME=<数据库名称>
export ALIYUN_RAM_ROLE_NAME=<角色名称>
# 外网访问 OSS endpoint 如oss-cn-hangzhou.aliyuncs.com
export ALIYUN_OSS_ENDPOINT=<外网访问 OSS endpoint>
# OSS region 如cn-hangzhou
export ALIYUN_REGION_ID=<OSS region>
export ALIYUN_OSS_BUCKET=<OSS bucket name>
export ECS_IP=<ECS实例公网IP>
# MNS队列 endpoint使用内网地址,如http://xxx.mns.cn-hangzhou-internal.aliyuncs.com
export ALIYUN_MNS_ENDPOINT=<MNS队列 endpoint>
export ALIYUN_MNS_QUEUE=<MNS队列名称>
export WANX_DEMO_USERNAME=<自定义界面登录用户名>
export WANX_DEMO_PASSWORD=<自定义界面登录密码>
执行如下命令使环境变量生效:
source ~/.bashrc
下载解压工具unzip,此处已经下载好了:
yum install unzip
下载代码:
wget https://help-static-aliyun-doc.aliyuncs.com/demos/demo.zip
解压代码包
unzip -d /home/admin demo.zip
启动服务
sh /home/admin/deploy.sh start /home/admin/fc-web-demo-0.0.1-SNAPSHOT.jar
看到如下信息表示启动成功。
接下来,我们要创建函数计算函数,用于感知OSS Bucket中用户上传的文件,进行处理,然后将处理后的文件上传到OSS Bucket中。
在创建函数页面,选择事件函数,配置以下配置项,然后单击创建。
按要求配置函数如下:
在函数配置页面,选择配置页签,在左侧导航栏,单击触发器,然后单击创建触发器。
最后,我们访问ECS的公网地址即可看到该界面:
对照之前一键部署中的模版,我们也可以发现其一致性,即:一键部署仅是采用ROS模版将手动部署的大量复杂命令脚本化了。
比如此段对应着上文手动配置环境变量文件:
比如此段对应着上文手动创建函数计算触发器:
总结
总的来说,这篇解决方案确实是非常优秀的,不吹不黑,至少比我之前评测过的任何一篇都要完整和详细。
而对比在应用中处理文件和使用函数计算处理文件,其特点也是显而易见的:
函数计算能够显著增强文件处理的稳定性和扩展性。相较于在应用中直接处理文件导致的资源争用和系统负载问题,函数计算通过解耦核心业务逻辑与文件处理任务,确保了系统的高可用性。同时,由于函数计算支持自动弹性的资源分配机制,可以轻松应对突发的流量高峰,无需预先配置大量的计算资源来应对可能的峰值,从而大大降低了成本。这种按需分配资源的方式不仅提高了资源利用率,还简化了运维工作,使得开发者能够更加专注于业务逻辑的开发与优化。
展望未来,随着云计算技术的不断进步,期望函数计算能提供更多定制化的解决方案,在文件处理领域发挥越来越重要的作用。