站群,一台杜甫,本地静态文件(html、图片)总数大概一两千万,单个图片容量小于500k。最近服务器的磁盘io一直100%,队列高达10左右,硬盘先要撑不住了。
现在能想到几种办法,硬件上的是:
1.加大内存,128G以上的内存做文件缓存,应该能缓解。
2.使用raid0/增加多台机器,简单粗暴。
3.直接一步到位上SSD,从根本上解决io问题。
此外我还有个软件上的想法:将所有图片直接编码为base64,插入到本地静态html中,每次用户访问可以减少10次左右的图片文件读取,这样是否也会极大的缓解磁盘io压力?
优点是,由于目前磁盘储存空间充足,cpu性能充足,这种方案不需要折腾数据迁移,且成本不变,只需要花点时间修改程序,重新生成一遍html即可。 当然代价是cpu、硬盘储存空间和图片的后期维护性。
请问各位d大的,这种base64储存图片的方案,是否可行呢?
-----------------------------------------------------
**网友回复**:
读图片是IO,读HTML就不是io?原本是并发10个http请求,每个小于500k,现在变成单线程读取好几M甚至几十M。你可真是个人才
网友回复:
图片经base64编码会增加硬盘占用
https://www.zhihu.com/question/31155574
网友回复:
真是个人才,图片变成base64以后体积要增加多少哦,还不是一样废IO
网友回复:
引用:jqbaobao发表于2021-10-1013:01
研究研究图床技术吧
网友回复:
别折腾那些了直接干脆点m.2你就算折腾了B64你还是要换硬盘
还有个办法就是CDN节点缓存缓存之后直接从CDN节点读取不经过服务器
网友回复:
引用:xshell发表于2021-10-1013:02
大图用base64转出来很长吧
网友回复:
引用:dvbhack发表于2021-10-1013:06
读图片是IO,读HTML就不是io?原本是并发10个http请求,每个小于500k,现在变成单线程读取好几M甚至几十M。...
网友回复:
我觉得还是图片分流吧,例如pic.your.com单独做图床,然后,分个五到七台机器上去。这样哪怕断一个二个,也只会对用户起最小范围的影响。
网友回复:
引用:buyabag发表于2021-10-1013:08
大佬你这说到点子上了,我就是在考虑这个。到底是多次读取随机小文件io压力大,还是一次读取大文件压力大...
网友回复:
b64并不会解决目前的问题。图片站必需上CDN。
网友回复:
图片存到别的服务器上,业务分离才是正确方法.而不是你这种方法
网友回复:
不如把他存到oss或者图床里面,base64加密解密也浪费CPU
网友回复:
既然这样,不如把所有图片预先全部读到内存里面,需要的时候从内存取
网友回复:
我的网站没几张图片,除了SVG格式的图片以外,全部都是使用Base64编码的,速度不错。
网友回复:
真是个人才,图片变成base64以后体积要增加多少哦,还不是一样废IO
网友回复:
丢静态存储不就行了CFCOS等都有什么都不用担心费用比自建便宜
网友回复:
图片经base64编码会增加硬盘占用
https://www.zhihu.com/question/31155574
网友回复:
大哥,base64会增加三分之一的大小并且不可缓存,解码慢,你这硬盘能省多少。。。