V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kisshere
V2EX  ›  程序员

机械硬盘架设静态服务器,支持千万级小文件存储&高并发,有没有开源的解决方案?

  •  
  •   kisshere · 2020-03-11 09:04:14 +08:00 · 9249 次点击
    这是一个创建于 1752 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关键字:机械盘、千万级、高并发

    同时满足这三个条件可能很苛刻,机械盘对于大量小文件(1Mb 左右)高并发简直是噩梦,但 ssd 做静态服务器有点奢侈,这方面有没有开源的存储解决方案?

    64 条回复    2020-03-13 09:23:19 +08:00
    siyiye
        1
    siyiye  
       2020-03-11 09:28:37 +08:00   ❤️ 5
    支持千万级小文件存储&高并发——但 ssd 做静态服务器有点奢侈。

    所以我觉得你也不用折腾了
    kisshere
        2
    kisshere  
    OP
       2020-03-11 09:29:57 +08:00
    @siyiye 所以开贴求 V 站大神看有没有机械盘解决方案,实在不行只能上 ssd
    lcy630409
        3
    lcy630409  
       2020-03-11 09:33:16 +08:00   ❤️ 1
    你这个需求不就是 CDN 正好解决的么....
    janxin
        4
    janxin  
       2020-03-11 09:34:36 +08:00   ❤️ 3
    全部读入内存,不加硬盘就加内存呗
    sadfQED2
        5
    sadfQED2  
       2020-03-11 09:34:47 +08:00 via Android   ❤️ 1
    都到千万级了,ssd 的钱都给不起吗
    FaceBug
        6
    FaceBug  
       2020-03-11 09:42:30 +08:00   ❤️ 1
    看你并发量咯,如果持续很大,每个文件都是热文件,那就只能 SSD 了,都这个规模了还等啥

    如果每天都只是部分数据存取量很大,可以加个 SSD 的缓存盘
    Xusually
        7
    Xusually  
       2020-03-11 09:45:10 +08:00
    必须机械盘的话,淘宝买点便宜的准系统,内存大些,cpu 无所谓,台数多一些,搭分布式的,比如 fastdfs 之类的,分散压力。
    miclinux
        8
    miclinux  
       2020-03-11 09:46:07 +08:00 via Android
    硬盘不够内存来凑。。。
    lvzhiqiang
        9
    lvzhiqiang  
       2020-03-11 09:47:16 +08:00
    拖拉机怎么优化也不可能快过法拉利吧。。
    cydian
        10
    cydian  
       2020-03-11 09:49:05 +08:00
    SSD 解君愁吧。
    只读取大量小文件,机械硬盘不仅慢还寿命短。
    两者算下来差不了多少。
    alphatoad
        11
    alphatoad  
       2020-03-11 09:50:19 +08:00 via iPhone
    …page replacement algorithm?
    opengps
        12
    opengps  
       2020-03-11 09:52:15 +08:00
    千万级小文件性能问题,这是对象存储能解决的问题。楼主可以搜下这个方向的关键词
    tigerstudent
        13
    tigerstudent  
       2020-03-11 10:01:39 +08:00 via Android
    SSD 现在还算奢侈品吗
    rockyou12
        14
    rockyou12  
       2020-03-11 10:05:43 +08:00
    软件反正是 minio 或者 ceph 这些?但机械硬盘小文件读写不管怎么样都很差,真压力大还是老实上 ssd 算了
    90928yao
        15
    90928yao  
       2020-03-11 10:09:05 +08:00
    有个中国人写的基于 haystack 实现的对象存储 忘了叫啥了
    oahzuw
        16
    oahzuw  
       2020-03-11 10:25:53 +08:00
    存 Mongodb 中试试,上家公司存图片就是这么玩的。
    realpg
        17
    realpg  
       2020-03-11 10:25:56 +08:00
    SSD 还奢侈?
    我这种垃圾佬的服务器集群都全是 SSD 了……
    单台服务器成本几百元的巨量规模集群
    realpg
        19
    realpg  
       2020-03-11 10:28:23 +08:00   ❤️ 3
    随便分层的解决问题

    几十台垃圾的 768GB 内存的廉价服务器
    然后二级热读缓存用光威 1.5TB/960GB/2TB 的分布式集群
    密写一台服务器一块 PCI-E 密写分布
    冷数据可靠存储用 8TB 乐视盘

    这就是极端廉价(市价 1/10 )的超级存储集群
    我这有 PB 级的集群
    hutng
        20
    hutng  
       2020-03-11 10:38:57 +08:00
    非企业级高性能 SSD 比机械也贵不了太多吧
    carmark
        21
    carmark  
       2020-03-11 10:45:45 +08:00
    @rockyou12 这个 ceph 维护难度太大,minio 就是一个玩具

    @kisshere 海量小文件,上硬件当然可以解决一部分问题,但是从理论上需要分析具体场景,如果你这个小文件是类似图片场景的,那么有不少方案,比如 Haystack 架构,有不少实现比如 fastdfs 以及 seaweedfs,就是为这种场景设计的。

    不过这个是对象接口,不是文件接口,POSIX 文件系统对这种海量小文件就是噩梦。
    rockyou12
        22
    rockyou12  
       2020-03-11 10:50:46 +08:00
    @carmark minio 可不是什么玩具,虽然是可以当玩具用,但是很完善的分布式存储方案
    qingpingbao
        23
    qingpingbao  
       2020-03-11 10:57:50 +08:00
    @90928yao go 写的 seaweedfs ??
    carmark
        24
    carmark  
       2020-03-11 10:58:37 +08:00
    @rockyou12 嗯,我说的不太严谨 。很早之前看过的,不知道现在的情况,想了解下:

    1. 目前哪家公司不改代码,直接上生产?
    2. 怎么做迁移?集群扩容?机器故障处理,磁盘故障处理?
    zzzmh
        25
    zzzmh  
       2020-03-11 11:01:23 +08:00
    要我说就别折腾了,找个便宜点的 oss 一步到位,服务器就安安心心放 html,估计访问量不大的时候一个月几十块一百块到顶了,访问量大的时候么你收入也起来了,例如申请个 adsense,绝对能抵消 oss 支出。目前性价比最高的应该是又拍云,加入又拍联盟能奖励一点流量费
    Osk
        26
    Osk  
       2020-03-11 11:01:56 +08:00 via Android
    不用 ssd 的原因?

    如果是怕丢数据,且读操作占比多,可以用 ssd 缓存读,不缓存写,有很多现成方案,比如 lvm cache
    neurocomputing
        27
    neurocomputing  
       2020-03-11 11:02:56 +08:00
    高并发,高到多少? 每秒 1000 个文件(每个 1MB )的话( 1GB 10Gb ),机械硬盘(按 12Gb 算)的带宽都是问题了,组 raid 话,就算 raid 1,也顶多让并发能力增加不到 1 倍
    zelin44913
        28
    zelin44913  
       2020-03-11 11:03:31 +08:00
    考虑下 bcache + 软阵列
    Reficul
        29
    Reficul  
       2020-03-11 11:10:44 +08:00
    BFS ? @realityone
    rockyou12
        30
    rockyou12  
       2020-03-11 11:23:56 +08:00   ❤️ 2
    @carmark 直接看文档吧 https://docs.min.io/cn/distributed-minio-quickstart-guide.html
    您说这些东西明显就是抬杠,对 minio 不了解。minio 本身就是兼容 aws 的 s3 对象存储接口,不存在什么改代码的,所有对象存储基本都是这套协议。至于其它的,所有系统都有这些问题,但看 minio 的用户量我觉得不会有实际的问题。
    wmhx
        31
    wmhx  
       2020-03-11 12:01:29 +08:00
    hadoop 十分完美了.
    ericgui
        32
    ericgui  
       2020-03-11 12:24:32 +08:00
    @realpg 老铁,你自己在家建服务器么
    realpg
        33
    realpg  
       2020-03-11 12:53:33 +08:00
    @ericgui #32
    闹呢
    我有九个数据中心 不是九个房间,是九个建筑,分布在省内
    tulongtou
        34
    tulongtou  
       2020-03-11 13:05:38 +08:00
    千万级的项目,ssd 费用都不给,这有点儿过分了
    90928yao
        35
    90928yao  
       2020-03-11 13:31:27 +08:00
    @rockyou12 minio 集群扩容 确实有问题。。。只能通过增加集群的方式的,然后后端自己去路由到特地集群
    BlackBerry999
        36
    BlackBerry999  
       2020-03-11 13:41:57 +08:00
    你这问题不在硬盘上,你需要多级的分布式缓存系统。
    nrtEBH
        37
    nrtEBH  
       2020-03-11 13:49:20 +08:00
    单机的话 没戏 物理限制靠代码解决不了
    多机分布式集群加 SSD 缓存是可以解决 很多方案
    catcalse
        38
    catcalse  
       2020-03-11 14:10:56 +08:00
    试试阿里专门做的 小文件系统?
    encro
        39
    encro  
       2020-03-11 14:18:40 +08:00
    千万级 RMB/并发 /文件个数 /文件大小 /PV 还是其他?
    qiyuey
        40
    qiyuey  
       2020-03-11 14:20:23 +08:00
    上云
    rockyou12
        41
    rockyou12  
       2020-03-11 14:34:36 +08:00
    @90928yao minio 的集群我确实也没深入研究,基本中用做 s3 网关,后端实际存储还是 nfs 或者 ceph 这些。但有状态服务的扩容基本上都挺麻烦的,生产要用基本是没有加个节点就完事的...

    但总的来说 minio 已经是最快能搭建的存储服务了,ceph hdfs 这些光看架构设计都要昏了,实际部署更是要吐血
    encro
        42
    encro  
       2020-03-11 14:40:03 +08:00
    Leveldb/Rocksdb/Accumulo

    任何一个都支持 10 亿级别,支持压缩,快速读写。

    几块企业机械盘,几千块都舍不得花?

    Leveldb/Rocksdb/Accumulo 简单比较
    https://www.jianshu.com/p/4c57cd82ccde
    NeoChen
        43
    NeoChen  
       2020-03-11 14:41:14 +08:00
    从楼主的标题里,看出了,业务很大,但是没钱,不但要机械硬盘,还要开源的免费解决方案。。。如果上 SSD 就要亏钱的节奏,那咱是不是考虑该放弃这个业务了。。。开个玩笑~

    看看业务上是不是还能再优化优化,如果小文件读写很多,机械盘物理条件不适配啊,否则只能想办法减少单盘的读写量了,能否区分高频低频,高频的用内存,中频用 SSD,低频用机械,分个轻重缓急。我觉得,就算有现成的开源解决方案也不一定适配你的业务需求,还是要从业务入手,分解需求,从而在降低费用的情况下,还保持较高的性能。
    allenforrest
        44
    allenforrest  
       2020-03-11 15:56:26 +08:00
    SeaweedFS
    Mithrandir
        45
    Mithrandir  
       2020-03-11 16:29:43 +08:00
    ceph 把块大小设置成 1m,然后使用 ssd 做个缓存即可
    rrfeng
        46
    rrfeng  
       2020-03-11 16:30:22 +08:00
    tfs 之流就是解决这个问题的。
    pC0oc4EbCSsJUy4W
        47
    pC0oc4EbCSsJUy4W  
       2020-03-11 17:05:27 +08:00
    ceph,内存使劲加
    fancy111
        48
    fancy111  
       2020-03-11 17:10:23 +08:00
    逗,千万级了都,你还用这机械盘?就算机械盘能支撑起来,带宽你也负担不起啊
    kennylam777
        49
    kennylam777  
       2020-03-11 17:25:43 +08:00
    試過了 Ceph 後,我也說一句: SeaweedFS 及 Minio 都是玩具。

    維護難度用 ceph-ansible 減輕一下
    q149072205
        50
    q149072205  
       2020-03-11 18:39:37 +08:00
    可以 RAID 啊。做 RAID 10,再做分布式啊。完全无压力。
    mumonitor
        51
    mumonitor  
       2020-03-11 19:01:35 +08:00
    海量小文件只推荐用分布式文件系统,ceph/mogilefs 都可以,前面辅助于 nginx 就是比较通用的解法了。
    Huozy
        52
    Huozy  
       2020-03-11 19:09:05 +08:00
    对象存储。机械硬盘存,ssd 是做类似缓存功能的
    baixiangcpp
        53
    baixiangcpp  
       2020-03-11 21:01:35 +08:00
    机械盘还想要高并发,搬搬手指头算一下也不可能
    xyjincan
        54
    xyjincan  
       2020-03-11 21:40:36 +08:00
    请求是随机的吗,hbase ?
    qibinghua
        55
    qibinghua  
       2020-03-11 21:51:51 +08:00
    TFS 文件系统了解一下
    dorothyREN
        56
    dorothyREN  
       2020-03-11 23:34:16 +08:00
    文件直接扔进内存里面,比 ssd 都快
    0312birdzhang
        57
    0312birdzhang  
       2020-03-11 23:37:28 +08:00 via iPhone
    都 50 多楼了还没有说 FastDFS 的,emmm 是现在用的人少了吗?
    xcstream
        59
    xcstream  
       2020-03-12 01:45:35 +08:00
    都千万级了,服务器硬件费用应该不算大头了
    dongqihong
        60
    dongqihong  
       2020-03-12 09:41:53 +08:00
    各大云厂商的对象存储才是你真正的靠谱选择
    kejxp1993
        61
    kejxp1993  
       2020-03-12 11:48:59 +08:00 via Android
    按照 lz 单个文件 1m,千万个文件才 10t,所以最直接的办法,买几个廉价 ssd,最简单效果也最好,成本也比捣鼓服务器集群便宜。。
    kejxp1993
        62
    kejxp1993  
       2020-03-12 11:54:27 +08:00 via Android
    如果文件读取有明显的热点的话,可以考虑大量机械硬盘加部分 ssd 缓存的方案。
    gongxun0928
        63
    gongxun0928  
       2020-03-13 09:14:13 +08:00
    @kennylam777 seaweed 是玩具? 前两年在前司,seaweed 大概存储了几百亿的小文件,总的存储也有十多 p。 总体来说,比较稳定,0.76 版本。
    gongxun0928
        64
    gongxun0928  
       2020-03-13 09:23:19 +08:00
    如果你对存储不是很熟悉,且不是强 posix 接口(open/read/wrtie)访问需求,譬如机器学习场景,需要 readdir 遍历的场景; seaweed 完美满足你的需求,且相对稳定。 ceph 这个东西庞大且不好维护,大部分人解决 ceph 出现问题的能力堪忧,举个例子,对新手来说,ceph 的 CRUSH 算法,在扩容的时候的不确定性,新手估计会踩坑(不平衡或者 io 被打满)。 当然如果你们有超过 3 个运维人员专职负责 ceph,你可以选择 ceph,毕竟大而全,ceph fs, ceph block,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2704 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 12:35 · PVG 20:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.