机械硬盘架设静态服务器,支持千万级小文件存储&高并发,有没有开源的解决方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kisshere
V2EX    程序员

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

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

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

    同时满足这三个条件可能很苛刻,机械盘对于大量小文件(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 了,都这个规模了还等啥br />
    如果每天都只是部分数据存取量很大,可以加个 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 实现的对象存储 忘了叫啥了
    z8zS4FW0JO2hWtFX
        16
    z8zS4FW0JO2hWtFX  
       2020-03-11 10:25:53 +08:00
    存 Mongodb 中试试,上家公司存图片就是这么玩的。
    realpg
        17
    realpg  
    PRO
       2020-03-11 10:25:56 +08:00
    SSD 还奢侈?
    我这种垃圾佬的服务器集群都全是 SSD 了……
    单台服务器成本几百元的巨量规模集群
    realpg
        19
    realpg  
    PRO
       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 以及 seawedfs,就是为这种场景设计的。

    不过这个是对象接口,不是文件接口,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  
    PRO
       2020-03-11 12:53:33 +08:00
    @ericgui #32
    闹呢
    我有九个数据中心 不是九个房间,是九个建筑,分布在省内
    DonaidTrump
        34
    DonaidTrump  
       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 都快
    1daydayde
        57
    1daydayde  
       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     Solana     5722 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 99ms UTC 06:13 PVG 14:13 LAX 22:13 JFK 01:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86