Minio分片合并时遇到了一个疑难问题

简介: 今天调用Minio的分片合并接口时,遇到了一个错误,困扰了我一整天。因为我始终在自己身上找原因,一度怀疑是自己的逻辑处理有问题,而且自己认为最可能的原因就是自己参数传错了。但是,万万没有想到,原来问题出在Minio服务自己身上。

前言

今天调用Minio的分片合并接口时,遇到了一个错误,困扰了我一整天。因为我始终在自己身上找原因,一度怀疑是自己的逻辑处理有问题,而且自己认为最可能的原因就是自己参数传错了。但是,万万没有想到,原来问题出在Minio服务自己身上。

正文

啥也不说了,我们来看一下合并时的报错信息:

Your proposed upload is smaller than the minimum allowed object size

报错截图:

网络异常,图片无法展示
|

说一下项目背景

各个终端(包括Web端、PC端、移动端APP、车端)将上传的视频文件,切片后发送给存储网关,再由存储网关转储到Minio对象存储中。现在遇到的这个问题的原因是各个终端上传的分片大小都是1MB或者2MB,都已经固定写死了,但是Minio对象存储要求的最小分片是5MB。因此,在合并某个文件的所有分片的时候,总是提示Your proposed upload is smaller than the minimum allowed object size

解决方案

当自己排查出是这个原因导致的合并错误后,赶紧整理了所有可能的解决方案,总的来说,总共有三个可行性方案。

方案一、各端同步修改分片大小

显而易见的方法,各个终端统一修改分片大小,统一改为5MB,但是这样有两个弊端:一、需要所有终端同步修改,涉及的范围比较大。二、对象存储服务不够灵活,当面临固定分片大小的时候,可能会出现无法兼容的问题。

方案二、存储网关重新构造分片

第二种方案也非常容易想到,就是将小分片的请求临时暂存起来,当缓存大小满足5MB时,再给Minio存储服务转发。我们需要考虑的就是大小分片的对齐问题。可能存在的问题:当多实例部署时,可能会导致某些分片无法进行合并拼接。

方案三、修改Minio分片大小限制

终极方案,直接修改Minio源码,调整分片大小限制,再重新编译。

分片大小在Minio源码中是写死的,代码如下:

globalMinPartSize = 5 * humanize.MiByte

修改方式也非常简单,本人目前是直接改成了1MB。

结尾

好了,合并Minio分片的问题终于解决了。其实,Minio的源码中有很多可以借鉴的经验,欢迎大家尝鲜。我是 liuzhen007, 中国邦德,一个敲代码的邦德,欢迎评论留言加“一键三连”。



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
2月前
|
存储 SQL 分布式计算
大数据-142 - ClickHouse 集群 副本和分片 Distributed 附带案例演示
大数据-142 - ClickHouse 集群 副本和分片 Distributed 附带案例演示
179 0
|
2月前
|
SQL 消息中间件 分布式计算
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
62 0
|
6月前
|
存储 消息中间件 负载均衡
技术心得记录:架构设计之数据分片
技术心得记录:架构设计之数据分片
|
调度 Apache
Apache Doris tablet 副本修复的原理、流程及问题定位
Apache Doris tablet 副本修复的原理、流程及问题定位
453 0
|
存储 索引
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
|
存储 分布式计算 资源调度
白话Elasticsearch72_利用HDFS备份与恢复ES生产集群的数据
白话Elasticsearch72_利用HDFS备份与恢复ES生产集群的数据
237 0
|
Shell 分布式数据库 Hbase
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
199 0
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
|
JavaScript 前端开发
《大胖 • 小课》- 说说大文件分片和断点续传
一般在前端开发中我们上传文件大多是比较小的文件,比如图片、pdf、word 文件等,也只有一些特殊的业务和场景才会需要上传大文件,比如上传一个视频 ,最小也得500M。 那如果文件太大,比如500M 1G 2G 那么大,直接上传会造成什么后果呢? 直接上传过大文件,可能会出链接现超时的情况,而且也会超过服务端允许上传文件的大小限制,导致文件无法上传。 所以解决这个问题我们可以将文件进行分片上传,每次只上传很小的一部分 比如2M,多上传几次就可以啦。
243 0
《大胖 • 小课》- 说说大文件分片和断点续传
|
安全 数据可视化 测试技术
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
# 0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流、索引生命周期、可搜索快照、跨集群搜索、跨集群复制进行讲解
324 0
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
|
存储 缓存 分布式计算
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)