V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
phpfpm
V2EX  ›  问与答

用 S3/minio 同步远程文件的最佳实践是什么?

  •  
  •   phpfpm · 2022-02-16 11:43:54 +08:00 · 1148 次点击
    这是一个创建于 993 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们目前做直播录播的时候,有一些视频文件服务商直接存在 cdn 上面,形如

    http://www.example.com/replay/20220101-001/replay.m3u8

    这个直播的回放视频,里面带的 slice 是相对路径

    0001.ts
    0002.ts
    

    实际的存放地址在

    http://www.example.com/replay/20220101-001/0001.ts
    http://www.example.com/replay/20220101-001/0002.ts
    
    

    总之,我需要获取 m3u8+ts ,做后期的剪裁拼接。

    现在专门有一台机器做存储,部署了 minio

    那么如何把远程的文件下载到 minio 里面?

    现有方案:

    在 minio 的服务器启动了一个下载服务 aria2 ,通过接口奖数据直接灌到对应的文件夹,用 minio 检查数据是不是 ready

    • 优点:
      • 之前没有 minio 的时候就是这么搞的,aria2 有不错的多线程下载速度以及重试策略,可以当一个黑盒子
      • 数据从外网到内网传输一次直接落盘
    • 缺点:
      • 依赖 aria2 一个额外的服务
      • 指定 aria2 的下载目录有一个额外的 mapping ,需要在业务代码中指定物理目录
      • 对于 aria2 无法监控
      • 需要后置检查:是不是真的落盘到具体目录了

    改进方案:

    不再依赖 aria2 ,业务机器直接下载文件内容之后,putObject 到 minio

    • 优点:
      • 去除依赖
      • 结果进度可控,put 成功即可认为存储
      • 存储和获取同构,外部路径都可以直接从 minio 直接出
    • 缺点
      • 业务侧需要执行下载操作,可靠性不如 aria2
      • 数据需要在内网再传输一次

    想问下各位大佬有啥好的解决方案吗?

    我觉得我的核心需求是,希望 minio/s3 的 api 支持一个 putObject from url 但是如果这个不支持,就得我自己手动实现了。

    2 条回复    2022-02-16 14:53:51 +08:00
    defunct9
        1
    defunct9  
       2022-02-16 14:13:26 +08:00
    手动写个不就行了。又不复杂
    phpfpm
        2
    phpfpm  
    OP
       2022-02-16 14:53:51 +08:00
    @defunct9 嗯。。那就方案 2+重试策略吧 感觉也不麻烦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5498 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 06:54 · PVG 14:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.