开发函数计算的正确姿势 —— 使用 Fun NAS 管理 NAS 资源

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考

Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

NAS: 阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。在函数计算的场景中,由于其有代码包的限制,可以使用 NAS 存放一些不经常变动的文件,比如数据模型、静态资源等。参考

备注:请确保 Fun 工具版本在 2.16.0+

在很多函数计算的实战文章里,比如《开发函数计算的正确姿势——tensorflow serving》,我们通过 NAS 存放一些体积比较大且不易变动的资源。这使得即使在依赖比较大的场景下,我们依旧可以借助于函数计算快速开发一个 Serverless 应用。但 NAS 在帮助函数计算解决大依赖问题的同时,由于其自身的配置也比较复杂,也增加了函数计算的使用难度。

我们已经通过《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》 这篇文章了解了如何简化 NAS 的配置。但即使配置好了 NAS 服务,我们还要面对一个问题,那就是如何将本地的资源上传到 nas 文件系统中呢?

上传资源到 NAS 通常有几种方案可以选择:

  1. 购买一台 ECS,然后挂载 NAS,通过 FTP 或者网盘等实现将文件上传到 NAS 的目的
  2. 使用在线迁移服务,将 OSS 资源迁移到 NAS
  3. 借助于函数计算,开发一个 Serverless 的 NAS 文件管理应用,参考

本次,我们介绍一个更简单的方式,即通过  fun nas  管理 nas 文件以及上传本地文件 nas。
fun nas 本身实现思路是上面第三个方案的升级版,但解决了其存在的一些问题,比如

  1. 需要手动部署一套服务的问题
  2. 不支持目录上传的问题
  3. 不支持大于 6M 的文件上传的问题
  4. 等等

下面,我们从一个简单的示例来看一下 fun nas 的使用体验。

Fun Nas 使用体验一览

要使用 Fun Nas 条件非常简单,只需要在 template.yml 中包含 NAS 的相关配置即可。

接下来我们从头开始创建一个 Fun 项目,体验 Fun Nas 的相关功能。

我们创建一个空白目录,然后创建一个名为 template.yml 的文件,内容填写为:

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  NasDemo:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      NasConfig: Auto

我们从 《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》中的介绍的可以了解到, NasConfig 这一行配置就是帮助我们配置 NAS 服务的,如果已经存在了 NAS 服务,可以填写自己的配置信息。

1. 使用 fun nas init 进行初始化配置

接下来,同样是在该目录,我们使用 fun nas init 初始化配置。

$ fun nas init

start fun nas init...
Waiting for service fun-nas-NasDemo to be deployed...
  ... ...
    using 'VpcConfig: Auto', Fun will try to generate related vpc resources automatically
    ... ...
    generated auto VpcConfig done:  {"vpcId":"vpc-bp1pcr7o8ksmgojt4rfws","vswitchIds":["vsw-bp13qdw9qe1i2it4y0700"],"securityGroupId":"sg-bp161u0547x0lq5k6i5x"}
    using 'NasConfig: Auto', Fun will try to generate related nas file system automatically
    ... ...
    generated auto NasConfig done:  {"UserId":10003,"GroupId":10003,"MountPoints":[{"ServerAddr":"0dc9c4a6d9-gry74.cn-hangzhou.nas.aliyuncs.com:/fun-nas-NasDemo","MountDir":"/mnt/auto"}]}
    Checking if nas directories /mnt/auto/fun-nas-NasDemo exists, if not, it will be created automatically
    Checking nas directories done ["/mnt/auto/fun-nas-NasDemo"]
    ... ...
service fun-nas-NasDemo deploy success


Fun nas init Success

Tips for next step
======================
$ fun nas info      # Show NAS info
$ fun nas ls        # List NAS files
$ fun nas sync      # Synchronize files to nas
$ fun deploy        # Deploy Resources

fun nas init 执行完成后,nas、vpc 相关的资源就创建完毕了。我们就可以继续使用 fun nas 的其他命令了。

注意: 修改了 nas 的相关配置,需要重新执行 fun nas init。

2. 使用 fun nas info 查看 nas 的相关信息

接下来,我们我们使用 fun nas info,查看本地 nas 目录:

$ fun nas info

Local NAS folder of service NasDemo includes:
/NasDemo/.fun/nas/auto-default/NasDemo

怎么理解这个本地 nas 目录呢?可以把它想成同步盘,也就是只要你将文件、资源存放到这个目录,那么就可以通过 fun nas sync 命令一键将这些资源按照本地的目录结构同步到 NAS 上。

3. 使用 fun nas sync 将本地 nas 资源同步到 nas 服务

就像上一步介绍的,我们只需要将想要上传到 nas 的文件存放到本地相应的目录即可。

$ fun nas sync

Starting upload /NasDemo/.fun/nas/auto-default/NasDemo to nas://NasDemo:/mnt/auto/
NAS path checking...
zipping /NasDemo/.fun/nas/auto-default/NasDemo
 /NasDemo/.fun/nas/auto-default/.NasDemo.zip - zipped
generate tmpDir: /NasDemo/.fun/nas/auto-default/.fun_nas_tmp/42658c92eef63f2b3b13e5f46315ee7d
Split zip file to 1 small files
Uploading...
Upload /NasDemo/.fun/nas/auto-default/NasDemo to /mnt/auto/ done!

如果我们的本地 nas 目录文件有变动,只需要重新执行 fun nas sync 即可。

4. 使用 fun nas ls 查看 nas 服务中的文件

fun nas ls 支持两种协议格式:

  1. 指定列出某个 service 下的 nas 路径内容:fun nas ls nas://ServiceName/Path。本例中可以是 nas://NasDemo/mnt/auto
  2. 如果模板文件(template.yml)中只包含一个 service,那么可以省略这里的 ServiceName,即 fun nas ls nas:///Path。本例中可以是 nas:///mnt/auto

我们这里通过使用 fun nas ls nas://NasDemo/mnt/auto,查看远端 NAS 服务中的资源。

$ fun nas ls -a nas://NasDemo/mnt/auto

total 10
drwxr-xr-x 4 user10003 10003 4096 Aug  4 11:38 .
drwxr-xr-x 1 root      root  4096 Aug  4 11:37 ..
drwxr-xr-x 4 user10003 10003 4096 Aug  4 11:38 .fun_nas_tmp
-rw-r--r-- 1 user10003 10003   19 Aug  4 11:38 test
drwxr-xr-x 2 user10003 10003 4096 Aug  4 11:38 testDir

Fun Nas 动态演示

更多参考

  1. Fun:Fun 的 github 仓库首页,可以在这里找到更多的帮助文档以及教程资源。
  2. 《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》:介绍了如何自动化配置 NAS。
  3. 《开发函数计算的正确姿势——tensorflow serving》:讲解了如何使用 Fun 解决机器学习场景下的依赖安装以及大依赖的问题。
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
11天前
|
存储 弹性计算 关系型数据库
活动实践 | 告别资源瓶颈,函数计算驱动多媒体文件处理测评
本方案介绍了一种高效处理文件的方法,适用于企业办公和社交媒体应用。通过阿里云的函数计算、对象存储OSS和轻量消息队列,实现文件的异步处理,如格式转换和水印添加,有效减轻了核心应用的负担,提高了业务稳定性和资源利用率。方案包括云服务器ECS、云数据库RDS、OSS存储等组件,支持快速部署和资源清理。
|
23天前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
27天前
|
关系型数据库 Serverless 分布式数据库
PolarDB Serverless 模式通过自动扩缩容技术,根据实际工作负载动态调整资源,提高系统灵活性与成本效益
PolarDB Serverless 模式通过自动扩缩容技术,根据实际工作负载动态调整资源,提高系统灵活性与成本效益。用户无需预配高固定资源,仅需为实际使用付费,有效应对流量突变,降低总体成本。示例代码展示了基本数据库操作,强调了合理规划、监控评估及结合其他云服务的重要性,助力企业数字化转型。
29 6
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
88 1
|
1月前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
68 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
63 3
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发的未来趋势
【10月更文挑战第5天】Serverless架构,即无服务器架构,正逐渐成为云计算领域的热点。它允许开发者构建和运行应用程序而无需管理底层服务器。本文介绍了Serverless架构的基本概念、核心优势及挑战,并展示了其在事件驱动编程、微服务架构和数据流处理等场景中的应用。通过优化冷启动、使用外部存储等实战技巧,开发者可以更好地利用Serverless架构提升开发效率和应用性能。随着技术的成熟,Serverless将在未来软件开发中扮演重要角色。
|
3月前
|
弹性计算 关系型数据库 Serverless
告别资源瓶颈,函数计算驱动多媒体文件处理方案:https://www.aliyun.com/solution/tech-solution/fc-drive-file
本文介绍了一种基于阿里云的一键部署解决方案,利用云服务器ECS、RDS MySQL、OSS、函数计算FC及MNS等服务,实现高效的多媒体文件处理。方案通过事件驱动机制,将文件处理任务解耦,并自动弹性扩展,按需付费,简化部署流程,提高处理效率。本文还提供了详细的部署步骤与体验反馈,展示了从配置到文件处理的全过程。
|
4月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
76 0
|
4月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
35 0

热门文章

最新文章

相关产品

  • 函数计算