yuyuyu
V2EX  ›  问与答

内网上传大量的小文件到中心服务器

  •  
  •   yuyuyu · Mar 5, 2018 · 2569 views
    This topic created in 3061 days ago, the information mentioned may be changed or developed.

    内网,windows,有很多子服务器在不停的上传小文件(约 20k-50k )到中心服务器,每台子服务器每秒大约上传 20 个,现在的方案是在中心服务器上开了个共享目录,子服务器挂载了这个共享目录然后直接往这个共享目录里写小文件。小文件的文件名是 uuid 绝对不会重复的。 现在的问题是这种方案性能不好,偶发性的写入文件这个操作大约要耗时几百毫秒有时候甚至 1-2 秒,还有什么更好的方案吗?

    12 replies    2018-03-06 10:29:51 +08:00
    nightv2
        1
    nightv2  
       Mar 5, 2018 via Android
    上传这个逻辑必须是每秒不间断么?要么隔一段时间上传一个压缩包。
    yuyuyu
        2
    yuyuyu  
    OP
       Mar 5, 2018
    @nightv2 是的,不能间断,要求实时性很高必须实时的上传
    metrxqin
        3
    metrxqin  
       Mar 5, 2018 via Android
    计算出来每秒数据量,检查子设备跟服务器之间的带宽能不能满足要求。
    wlwood
        4
    wlwood  
       Mar 5, 2018 via Android
    其实,我是认为 Windows 不好。(逃…
    yuyuyu
        5
    yuyuyu  
    OP
       Mar 5, 2018
    @metrxqin 内网带宽绝对能满足
    也测试了在中心服务器上新挂一块 ssd,新建了一台测试子服务器,写入 ssd 共享目录偶尔还是有几百毫秒到 1、2 秒的耗时
    omph
        6
    omph  
       Mar 5, 2018
    换传输协议?
    要不试试 QUIC
    loading
        7
    loading  
       Mar 5, 2018 via iPhone
    不如试着写到 nosql,内存数据库,没问题。然后再批量写到硬盘。
    crysislinux
        8
    crysislinux  
       Mar 6, 2018 via Android
    都写到同一个目录了?有没有可能给不同子服务器开不同目录,然后各个目录里按时间再切分,很多文件系统一个目录文件多了就会慢。如果所有机器都挂载同一个目录,一个机器写了数据,就可能需要同步到其他机器,想想要多少操作,不过感觉只要不读目录,应该不会马上同步。。。
    rubycedar
        9
    rubycedar  
       Mar 6, 2018 via iPhone
    ws 长连接了解一下
    tomczhen
        10
    tomczhen  
       Mar 6, 2018 via Android
    其实 SSD 不适合这种连续长时间写入,回收时写入会受影响,也许最新的傲腾才可以解决你的问题。

    如果场景是日志收集,建议找专门的针对性接近方案处理吧。
    tailf
        11
    tailf  
       Mar 6, 2018
    我觉得压缩一下传输再解压缩是最快的。
    tailf
        12
    tailf  
       Mar 6, 2018
    仔细读了一遍题目,发现理解错了,这种情况确实应该使用 nosql。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5792 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 02:05 · PVG 10:05 · LAX 19:05 · JFK 22:05
    ♥ Do have faith in what you're doing.