使用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 层, 根据文件路径下载文件的接口路径

重定向的下载路径就是这个样子了, 这样从OSS下载打包成压缩文件, 和后面的客户端下载压缩文件, 的压力都给到了 serverless
https://(这里是你的函数计算的外网请求地址, 后面是controller层的接口路径, 带上临时文件的路径) /zipServicePlatform/downloadZipFile?filePath=/tmp/c2090e89-a8fe-4f2d-b1fb-2ba185f44801730030168136097284.zip

经过测试, serverless 的请求处理速度还是很快的, 因为和OSS对接有专网, (这个要注意 servereless 的地域要和 OSS 的地域一样)
5个gb的零零散散的文件, 有很多文件路径, 逐个请求OSS下载, 再把文件流写入到磁盘临时文件, 然后返回给调用方系统临时文件的路径, 大概花费了4分多, 注意这里只是返回了在 serverless 的压缩包的临时文件路径, 后续要再次通过重定向到 serverless 的下载文件接口, 下载临时文件

相关文章:
使用serverless实现从oss下载文件并压缩
公司之前开发一个网盘系统, 可以上传文件, 打包压缩下载文件, 但是在处理大文件的时候, 服务器遇到了性能问题, 主要是这个项目是单机部署.......(离谱), 然后带宽只有100M, 现在用户比之前多很多, 然后所有人的压缩下载请求都给到这一台服务器了, 比如多个人下载的时候带宽问…...
从上到下打印二叉树
题目描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: [3,9,20,15,7] 算法思想 建立一个vector数组ret用来当做返回的结果数组,建立一个队列用来接收二叉树…...
【推荐】排序模型的调优
【推荐】排序模型的调优 排序模型的选择 排序模型常见的训练方式 样本类别不均衡处理尝试 欠拟合 过拟合 其他问题 排序模型的选择 LR,GBDT,LRGBDT,FM/FFM, 深度模型(wide & deep,DeepFM&#x…...
负载均衡安装配置详解
负载均衡(Load Balancing)是一种将网络流量分布到多个服务器上的技术,以提高系统的性能、可靠性和可扩展性。 在负载均衡中,有一个负载均衡器(Load Balancer),它充当了传入请求的前置接收器。当…...
Java-逻辑控制
目录 一、顺序结构 二、分支结构 1.if语句 2.swich语句 三、循环结构 1.while循环 2.break 3.continue 4.for循环 5.do while循环 四、输入输出 1.输出到控制台 2.从键盘输入 一、顺序结构 按照代码的书写结构一行一行执行。 System.out.println("aaa"); …...
UE 透明渲染次序
附加顺序 用最外面的球, 依次附加里面的球 最后附加的物体优先级最高 附加顺序 用最里面的球, 依次附加外面的球 这样渲染顺序就对了...
【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout
author:&Carlton tag:C topic:【C】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout website:黑马程序员C tool:Visual Studio 2019 date:2023年7月24日 目…...
vue实现flv格式视频播放
公司项目需要实现摄像头实时视频播放,flv格式的视频。先百度使用flv.js插件实现,但是两个摄像头一个能放一个不能放,没有找到原因。(开始两个都能放,后端更改地址后不有一个不能放)但是在另一个系统上是可以…...
iptables安全技术和防火墙
防火墙:隔离功能 位置:部署在网络边缘或主机边缘,在工作中,防火墙的主要作用是决定哪些数据可以被外网访问以及哪些数据可以进入内网访问,主要在网络层工作 其他类型的安全技术:1、入侵检测系统 2、入侵…...
微信小程序开发5
一、自定义组件-插槽 1.1、什么是插槽 在自定义组件的wxml结构中,可以提供一个<slot>节点(插槽),用于承载组件使用者提供的wxml结构 1.2、单个插槽 在小程序中,默认每个自定义组件中允许使用一个<slot>进行占位,这种…...
【算法题】2681. 英雄的力量
题目: 给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为: i0 ,i1 ,… ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 max(nums[i0],n…...
fastutil简单测试下性能
前言 简单测试一下fastutil的实现和Java类库实现的速率。 使用jmh进行测试。 简单解释一下,每轮测试预热2次,每次1s;实测2次,每次1秒。 进行5轮测试。数组大小3种。 package fastutil;import it.unimi.dsi.fastutil.ints.IntArr…...
【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法
一. 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API。 二. 解决方案 华为地图SDK的地图相机有提供CameraPosition类&…...
腾讯云裸金属服务器CPU型号处理器主频说明
腾讯云裸金属服务器CPU型号是什么?标准型BMSA2裸金属服务器CPU采用AMD EPYC ROME处理器,BMS5实例CPU采用Intel Xeon Cooper Lake处理器,腾讯云服务器网分享落进书房武器CPU型号、处理器主频说明: 裸金属服务器CPU处理器说明 腾讯…...
工程安全监测无线振弦采集仪在建筑物中的应用
工程安全监测无线振弦采集仪在建筑物中的应用 工程安全监测无线振弦采集仪是一种用于建筑物结构安全监测的设备,它采用了无线传输技术,具有实时性强、数据精度高等优点,被广泛应用于建筑物结构的实时监测和预警。下面将从设备的特点、应用场…...
【iOS】isKindOfClass和isMemberOfClass方法
前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解,也就是苹果官方这幅图: 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现,无论是谁调用isKindOfClass方法都会…...
李飞飞「具身智能」VoxPoser:0预训练完成复杂指令
机器人接入大模型听懂人话 论文地址: https://voxposer.github.io/voxposer.pdf 项目主页: https://voxposer.github.io/ 参考链接: [1]https://twitter.com/wenlong_huang/status/1677375515811016704 [1]https://www.amacad.org/publicatio…...
前端八股文
info 毕业设计(课题、方向 本科毕业设计:家庭医生签约管理系统后台开发(微信小程序) 硕士课题:医学图像分割(婴儿脑分割) 51062319991129351X 邮编 重庆市南岸区 400000 13183849783 // 18728097929 // 13158442955 中国广电四川网络股份有限公司中江…...
前端年度工作述职报告优秀
前端年度工作述职报告优秀篇1 尊敬的各位领导、各位同仁: 大家好!按照20__年度我公司就职人员工作评估的安排和要求,我认真剖析、总结了自己的工作情况,现将本人工作开展情况向各位领导、同仁做以汇报,有不妥之处,希…...
【MyBatis 学习一】认识MyBatis 第一个MyBatis查询
目录 一、认识MyBatis 1、MyBatis是什么? 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 (1)配置数据库连接 (2)配置 MyBatis 中的 XML 路径 三、测试&#x…...
SH_MLCD_J:Sharp HR-TFT内存液晶驱动库详解
1. 项目概述SH_MLCD_J 是一款专为驱动 Sharp 公司 HR-TFT 系列单色内存液晶显示屏(Monochrome Memory LCD)设计的嵌入式底层图形库。该库被广泛应用于秋月电子等国内元器件分销商所售的 SHARP 原厂模组,典型型号包括 LS013B7DH03、LS027B7DH0…...
SystemBarTint终极贡献指南:如何快速参与这个Android系统栏着色开源项目
SystemBarTint终极贡献指南:如何快速参与这个Android系统栏着色开源项目 【免费下载链接】SystemBarTint [DEPRECATED] Apply background tinting to the Android system UI when using KitKat translucent modes 项目地址: https://gitcode.com/gh_mirrors/sy/Sy…...
构建高效用户行为分析系统:Este全栈应用监控与性能追踪终极指南
构建高效用户行为分析系统:Este全栈应用监控与性能追踪终极指南 【免费下载链接】este This repo is suspended. 项目地址: https://gitcode.com/gh_mirrors/es/este 在当今快速发展的应用开发领域,用户行为分析系统和应用性能监控已成为每个成功…...
避坑指南:ViewPager嵌套Fragment引发内存泄漏的完整解决方案(Android 12适配版)
Android内存泄漏深度排查:从ViewPager嵌套陷阱到Heap Dump实战解析 当你的应用在连续操作后开始卡顿,内存占用曲线只升不降时,很可能正遭遇内存泄漏这个"沉默的性能杀手"。尤其在ViewPager与Fragment的嵌套场景中,错误…...
2026年APP兼容性测试平台选型指南:精准破局兼容性难题困扰
随着移动互联网的飞速发展,APP的种类和数量呈爆炸式增长。然而,不同手机品牌、型号以及操作系统版本的差异,让APP在兼容性方面面临巨大挑战。许多开发者都遇到过这样的困扰:APP在某些手机上闪退、界面显示错乱,或是功能…...
效率飞跃:基于快马ai定制openclaw在ubuntu上的高级自动化部署方案
最近在Ubuntu上部署OpenClaw时,发现手动配置实在太费时间了。作为一个经常需要部署各种开源工具的开发老鸟,我决定探索一套自动化方案来提升效率。经过反复实践,终于总结出一套高效的部署流程,现在分享给大家。 自动化部署方案设…...
DPU应用场景系列(二)存储加速与数据卸载
1. 为什么存储需要DPU加速? 想象一下你正在用手机拍摄4K视频,每秒钟产生的数据量相当于几百张高清照片。现在把这个场景放大到数据中心——成千上万的服务器每天要处理数PB级别的数据(1PB100万GB),传统的存储架构就像用…...
终极揭秘:Bloaty的RangeMap数据结构如何实现精准二进制尺寸分析
终极揭秘:Bloaty的RangeMap数据结构如何实现精准二进制尺寸分析 【免费下载链接】bloaty Bloaty: a size profiler for binaries 项目地址: https://gitcode.com/gh_mirrors/bl/bloaty Bloaty是一款强大的二进制尺寸分析工具,能够帮助开发者深入了…...
终极指南:如何掌握Ramjet动画中元素堆叠顺序实现丝滑变换效果
终极指南:如何掌握Ramjet动画中元素堆叠顺序实现丝滑变换效果 【免费下载链接】ramjet Morph DOM elements from one state to another with smooth animations and transitions 项目地址: https://gitcode.com/gh_mirrors/ra/ramjet Ramjet是一个强大的Java…...
高并发场景下的订单和库存处理方案
前言之前一直有小伙伴私信我问我高并发场景下的订单和库存处理方案,我最近也是因为加班的原因比较忙,就一直没来得及回复。今天好不容易闲了下来想了想不如写篇文章把这些都列出来的,让大家都能学习到,说一千道一万都不如满满的干…...
