草庐IT

更省更快,如何使用 Serverless 搭建个人专属网盘?

Serverless社区 2023-03-28 原文

作者| 西流 阿里云 Serverless 技术专家

1分钟 Serverless 部署个人网盘,赠好礼
随着全球大数据不断增长,未来数据云存储容量需求也将不断扩大,iiMedia Research(艾媒咨询)数据显示,2020年全球数据中心存储容量将达到272艾字节。不断扩大的个人数据和云储存需求加速了个人云服务市场的发展,2020年中国个人云盘用户规模有超过4亿人。

虽然现在市面上有些网盘产品, 如果免费试用,或多或少都存在一些问题, 可以参考 2020国内还能用的网盘推荐。 本文旨在使用较低成本打造一个 “个人专享的、无任何限速的、如 Windows 体验的私有云盘”。

KodBox 遇见 Serverless

为什么是 KodBox?

调研了不少开源的 web ui filemanager, kodbox 深深打动了我, 功能丰富超出了我的想象,总结下来就是: 简单高效,流畅, 云端存储&协同办公新体验

  • 如Windows体验的私有云盘/企业网盘
  • 完全支持私有化部署,存储安全可控
  • 数百种文件格式在线预览、编辑和播放
  • 轻松分享,高效协作,细粒度权限管控
  • 全平台客户端覆盖,随时随地访问,轻松同步挂载

更多详情可以参考 kodbox中文网

为什么选择 Serverless 托管 KodBox 应用?

网盘的操作时间就是比较离散的, 尤其是对于个人和家庭的网站, 常备一台机器(数据库也需要安装在本机, 不然还有单独的数据库费用), 会产生大量的浪费, 比如凌晨大家都睡觉了,机器资源是闲置的。 而对于晚上 8 点, 家庭成员都在娱乐休闲的时候, 可用一台机器的资源又不太够用, 比如大家一起同时在线看不同的 4K 高清电影(当然每个人可以自己先快速下载到自己本地PC 机或者手机)。 而 Serverless 很好的解决了这个需求, 按量付费, 有请求随时扩容。
阿里云函数计算是事件驱动的全托管计算服务。使用函数计算:

  • 您无需采购与管理服务器等基础设施,只需编写并上传代码。
  • 函数计算为您准备好计算资源,弹性地、可靠地运行任务。
  • 按量付费、免运维
  • 提供日志查询、性能监控和报警等功能。

借助函数计算,您可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费。
将 kodbox 项目部署到函数计算, 数据库持久化使用阿里云文件存储,内容存储使用阿里云对象存储, 我们就得到一个专属的 " 计算+存储都可以 Serverless 无限扩展、不限制网速、支持数百种文件格式在线预览编辑和播放、轻松分享和协作" 的个人&家庭网盘。

直接体验

http://kodbox.fc-nas-filemgr.1986114430573743.cn-hangzhou.fc.devsapp.net~~ 账号: test 密码:test@123~~
登录之后, 您可以得到一个 web 版本的 windows 操作系统的体验, 对您 NAS 盘 或者 OSS 上多媒体文件进行预览、编辑、移动等各种处理。
当然:

  1. 如果您部署成功后, 默认有 admin 账号, 可以实施更高级的用户管理级插件安装等等...
  2. https://kodcloud.com/download/~~ 可以下载 PC 或者手机客户端实现网盘的自动备份同步功能 ...~~

直接放体验场景的内容,少字

成本剖析

  • 计算费用: 0.000110592元/GB-秒, 每个月有 40万 GB-秒的免费额度,这项基本免费。
  • 流量费用:函数请求响应流量:0.50元/GB, 取决于您每个月从您的网盘上下载文件的多少, 上传没有流量费用。上传和下载均没有限速。
  • 持久化费用:使用阿里云 NAS, 主要部署 kodbox 应用需要的 sqlite 数据库, 0.35(*结合低频介质,低至0.19) GB/月, 由于 NAS 单价比较贵, 建议 NAS 盘只做 kodbox 的 sqlite 数据库存储, 不会超过1G, 费用即 0.35 元。
  • 在单纯存储这块, 可以选择您自己存储类型,以使用 OSS 做文件存储为例, OSS 存储价格如下表, 如果电影收集爱好者, 大部分电影应该是冷归档型,假设有 100GB 的存储资源,那么每个月的存储费用是 1.5 元。

具体示例

小明使用这个方案做自己的私有或家庭网盘,目前大约有 150G 的资源

存储

通过对 OSS 结合基于最后一次修改时间的生命周期规则实现Bucket内指定前缀的Object在达到指定天数后转换为目标存储类型,策略说明如下:

  • Object存储30天后,自动转换为低频访问类型。
  • Object存储180天后,自动转换为归档存储类型。
  • Object存储360天后,自动转换为冷归档存储类型。

假设小明的资源的分布情况如下:

  • 最新的存储资源(30 天以内), 5G
  • 30-180天内的资源, 20G
  • 180天-360天的资源,25G
  • 超过360天的资源,100G

NAS 作为数据库: 0.35 元
因此小明每个月的存储费用为: 0.12 * 5 + 20 * 0.08 + 25 * 0.033 + 100 * 0.015 + 0.35 = 4.875

计算

函数计算 0.000110592元/GB-秒, 每个月都有 40万 GB-秒的免费额度(这个等价于 1核(1.5G) 的机器完整执行 74.1 小时), 函数计算是按毫秒计费的, 每次操作, 只是相当执行一次函数调用, 比如预览, 看起来您预览这个文章花费了很长时间, 实际上的耗费, 就是预览那次请求,后端执行的是100-200s 的时间(即计费也在这个时间), 按照网盘的操作频率, 这项应该基本在免费额度内。

流出流量

该方案最大的优势就是上传和下载没有任何限速, 上传没有流量费用。 理论上 FC 一个实例, 最大内网带宽是1Gbps, 最大外网带宽是 100Mbps。
假设小明每个月, 会翻阅自己网盘内的电影和照片, 假设每个月消耗的流量是 15G, 流量费用为 0.5 * 15 = 7.5

总结

小明一个月的总费用为: 4.875 + 7.5 = 12.375 元

参考

快速部署实战操作

  • 开通阿里云函数计算
  • 开通阿里云文件存储
  • 在登录阿里云控制台的状态下, 打开这个引导链接 start-fc-kodbox, 按照这个指引教程走下去即可, 视频教程如下:

  • 使用 admin 账号登录, 进入后台存储管理, 添加适合自己的存储, 比如增加一个 OSS Bucket。

畅想

在文章 PHP 遇见 Serverless,帮你解决这些痛点!中, 我们十分细致地讨论了 PHP 应用在 Serverless 的最佳实践方式以及带来的巨大价值, 其中最重点的一个点是 FC 弹出的实例演化为存粹的执行环境, PHP web 工程存储到 NAS, 这个时候我们就可以使用 Kodbox + FC 实现 windows 体验般的 WEB UI 对 NAS 上的 PHP 工程就地管理, 包括上传、覆盖、删除、修改等。

参考

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

有关更省更快,如何使用 Serverless 搭建个人专属网盘?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  4. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  5. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  6. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  10. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

随机推荐