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

举报
liuzhen007 发表于 2021/08/31 20:04:48 2021/08/31
【摘要】 目录前言正文说一下项目背景解决方案方案一、各端同步修改分片大小方案二、存储网关重新构造分片方案三、修改Minio分片大小限制结尾 前言今天调用Minio的分片合并接口时,遇到了一个错误,困扰了我一整天。因为我始终在自己身上找原因,一度怀疑是自己的逻辑处理有问题,而且自己认为最可能的原因就是自己参数传错了。但是,万万没有想到,原来问题出在Minio服务自己身上。 正文啥也不说了,我们来看一下合...

目录

  • 前言
  • 正文
    • 说一下项目背景
    • 解决方案
      • 方案一、各端同步修改分片大小
      • 方案二、存储网关重新构造分片
      • 方案三、修改Minio分片大小限制
  • 结尾

前言

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

正文

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

Your proposed upload is smaller than the minimum allowed object size

报错截图:

image.png

说一下项目背景

各个终端(包括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, 中国邦德,一个敲代码的邦德,欢迎评论留言加“一键三连”。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。