使用serverless实现从oss下载文件并压缩

        公司之前开发一个网盘系统, 可以上传文件, 打包压缩下载文件, 但是在处理大文件的时候, 服务器遇到了性能问题, 主要是这个项目是单机部署.......(离谱),  然后带宽只有100M, 现在用户比之前多很多, 然后所有人的压缩下载请求都给到这一台服务器了, 比如多个人下载的时候带宽问题, 服务器内存占用问题, 下载速度和没开会员的百度云网盘有一拼, 用户苦不堪言,

        所以考虑到使用阿里的 serverless 函数计算, 把从OSS的下载和压缩, 以及压缩后的客户端对文件下载, 这些压力全给到 serverless

一.  使用的阿里云 serverless 函数计算 FC 

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

        使用之前我们需要开发一个传统的 springboot 项目,  代码没什么保密的东西, 都是抄的chatgpt, 项目地址 :   GitHub - canxiusi/zip-to-oos

        拉下来就可以直接运行的那种, 需要在配置文件里补全你的OSS信息

 1. 之后我们把项目打成jar包, 并压缩成zip

 2. 之后登录阿里云的 serverless, 再服务列表点击创建服务

3. 然后在自动弹出的页面中点击创建函数

4. 选择第二个, 使用springboot项目, 的zip压缩包上传

5.  这里一定要勾选 处理HTTP请求, 因为我们这是传统的 springboot 项目, 手白了就是 controller 层要接收上游系统的请求

 6. 运行环境选择 java8, 把项目的zip压缩上传上去, 启动命令就是 java -jar, 注意带上 jvm 的运行参数 

7. 高级配置这里直接把配置拉满, 市区选择北京/上海时间

8. 触发器这里选择支持的请求方式, 就是接口上 @PostMapping, @GetMapping 一类的, 签名根据自己的需要配置

9. 在函数详情页面点击测试函数, 这里就是请求 controller 我们定义的接口

10. 在触发器管理页面, 我们可以看到函数的外网请求地址, 这样我们就可以在其他项目调用接口了

11. 调用方系统请求serverless的部分代码

 因为这里要压缩的文件比较大, 所以在请求头这里设置了异步请求

        异步请求 serverless, 把OSS的文件路径和调用方系统回调地址作为参数

        后续就是等待 serverless 从OSS下载并压缩文件后, 通过http请求, 把 zip 文件在 serverless 的临时路径返回给调用方系统, 调用方系统进行入库处理, (这里没在内存做压缩, 因为文件过大会OOM)

        调用方系统通过客户端轮询请求, 查询临时文件路径存不存在, 在拿到临时文件的路径后, 再重定向到 serverless 直接下载文件

         下图的 controller 其实就是 serverless 在处理完 zip 文件后的回调地址, 逻辑就是把 serverless 的 zip 文件的路径入库

   

         下图的 downloadZipFile 就是前面的 serverless 的外网请求地址, 加上 serverless 部署的代码的 controller 层, 根据文件路径下载文件的接口路径

        经过测试, serverless 的请求处理速度还是很快的, 因为和OSS对接有专网, (这个要注意 servereless 的地域要和 OSS 的地域一样)

        5个gb的零零散散的文件, 有很多文件路径,  逐个请求OSS下载, 再把文件流写入到磁盘临时文件, 然后返回给调用方系统临时文件的路径, 大概花费了4分多, 注意这里只是返回了在 serverless 的压缩包的临时文件路径, 后续要再次通过重定向到 serverless 的下载文件接口, 下载临时文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorRT多batch动态推理

tensorRT的多batch推理,导出的onnx模型必须是动态batch,只需在导出的时候,设置一个dynamic_axis参数即可。 torch.onnx.export(hybrik_model, dummy_input, "./best_model.onnx", verboseTrue, input_namesinput_names, \output_…

计算机基本硬件的内部结构

1.早期冯诺依曼机结构 世界上第一台计算机ENIAC是使用手动接线来控制计算,十分麻烦。 冯诺依曼提出“存储程序”的概念,是指将指令以二进制代码的形式事先输入计算机的主存储器(内存),然后按照其在存储器中的首地址执…

c++ ,vs2019, cpp20规范之 forward_list 源码分析

通过阅读源码可知,该单向链表不像list双向链表那样有专门的前导节点。即list._Mypair._Myval2._head._next才指向第一个有效数据节点。而 forward_list ._Mypair._Myval2._head 已经指向了有效数据节点。原因就在于复杂巧妙的类型转换。如下图的构造函数里&#xff…

Spring-ApplictionContext

Spring Spring是整个Java体系最核心的框架,没有之一。 核心类图结构 ApplicationContext ApplicationEventPublisher:提供了一种机制,用于通知应用程序中感兴趣的部分有关其执行过程中发生的特定事件。ListableBeanFactory:是S…

python结合tesseract-ocr识别汉字的训练库过程

一、安装python 例如,安装路径为:C:\rtkapp\python-3.8.0 二、安装opencv 三、安装tesseract-ocr 安装完成后,在系统环境变量path中,添加安装路径C:\rtkapp\Tesseract-OCR 四、打开python安装pytesseract 五、安装java运行环境…

测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

ViewFaceCore模块中的FaceQuality支持预测人脸质量,最初以为是预测人体体重,实际测试过程中才发现是评估人脸图片质量,主要调用Detect函数执行图片质量检测操作,其函数原型如下所示: //// 摘要:// 人脸质量评估///…

webstorm配置less转译

Program中路径如果识别不到 项目文件\node_modules.bin\lessc

springCloud Eureka注册中心配置详解

1、创建一个springBoot项目 2、在springBoot项目中添加SpringCloud依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.3</version><type>…

【MySQL数据库备份】

目录 一、概述 二、数据备份的重要性 1. 数据保护 2. 灾难恢复 3. 数据完整性 4. 合规性要求 三、造成数据丢失的原因 1. 硬件故障 2. 人为错误 3. 黑客攻击 4. 自然灾害 5. 软件故障 四、备份类型 1.物理与逻辑角度 1.1 概念 1.2 物理备份 1.2.1 冷备份 1.2…

Flutter:滑动面板

前言 无意中发现了这个库&#xff0c;发现现在很多app中都有类似的功能。以手机b站为例&#xff0c;当你在看视频时&#xff0c;点击评论&#xff0c;视频会向上偏移&#xff0c;下方划出评论界面。 sliding_up_panel SlidingUpPanel是一个Flutter插件&#xff0c;用于创建滑…

Stable Diffusion 硬核生存指南:WebUI 中的 VAE

本篇文章聊聊 Stable Diffusion 生态中呼声最高、也是最复杂的开源模型管理图形界面 “stable-diffusion-webui” 中和 VAE 相关的事情。 写在前面 Stable Diffusion 生态中有一个很重要的项目&#xff0c;它对于 SD 生态繁荣做出的贡献可以说居功至伟&#xff0c;自去年八月…

13. Mybatis-Plus

目录 1. MyBatis-Plus 简介 2. 新建项目 3. 添加依赖 4. 配置数据库 5. 编码 1. MyBatis-Plus 简介 通过官网&#xff1a;MyBatis-Plus MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyB…

W2NER详解

论文&#xff1a;https://arxiv.org/pdf/2112.10070.pdf 代码&#xff1a;https://github.com/ljynlp/W2NER 文章目录 W2NER介绍模型架构解码 源码介绍数据输入格式模型代码 参考资料 W2NER 介绍 W2NER模型&#xff0c;将NER任务转化预测word-word&#xff08;备注&#xff…

微信小程序生成带参数的二维码base64转png显示

getQRCode() {var that this;wx.request({url: http://localhost:8080/getQRCode?ID 13,header: {content-type: application/json},method: POST,responseType: arraybuffer,//将原本按文本解析修改为arraybuffersuccess(res) {that.setData({getQRCode: wx.arrayBufferToB…

string【2】模拟实现string类

string模拟实现 引言&#xff08;实现概述&#xff09;string类方法实现默认成员函数构造函数拷贝构造赋值运算符重载析构函数 迭代器beginend 容量size、capacity、emptyreserveresize 访问元素operator[] 修改insert插入字符插入字符串 appendpush_backoperatoreraseclearswa…

uni-app在小米手机上运行【步骤细节】

注意细节重点&#xff1a; 1.手机使用数据线与电脑连接&#xff0c;手机连接模式必须是传输文件模式 2.手机必须打开开发者模式 3.打开开发者模式后&#xff0c;仔细浏览并调整USB调试权限&#xff0c;重点打开USB是否允许安装按钮&#xff01;&#xff01;&#xff01; 操作步…

RWEQ模型参量提取

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…

windows环境下,安装elasticsearch

目录 前言准备安装 jdk 安装nodejsElasticSearch下载ElasticSearch-head 下载 安装ElasticSearch安装ElasticSearch-head插件设置用户名密码访问ElasticSearch 默认用户名和密码参考 前言 win10elasticsearch 8.9.0 准备 安装 jdk ElasticSearch 是基于lucence开发的&#…

MATLAB | 如何绘制这样的描边散点图?

part.-1 前前言 最近略忙可能更新的内容会比较简单&#xff0c;见谅哇&#xff0c;今日更新内容&#xff1a; part.0 前言 看到gzhBYtools科研笔记(推荐大家可以去瞅瞅&#xff0c;有很多有意思的图形的R语言复现&#xff01;&#xff01;)做了这样一张图&#xff1a; 感觉很…

docker简单web管理docker.io/uifd/ui-for-docker

要先pull这个镜像docker.io/uifd/ui-for-docker 这个软件默认只能使用9000端口&#xff0c;别的不行&#xff0c;因为作者在镜像制作时已加入这一层 刚下下来镜像可以通过docker history docker.io/uifd/ui-for-docker 查看到这个端口已被 设置 如果在没有设置br0网关时&…