Calibre-web图书库,使用了腾讯云的cos对象存储当作图书文件目录,这样可以无限扩容服务器空间,还可以在下载的时候使用对象存储的外网提供高速下载。
最近遇到几个对象存储当磁盘文件使用的问题总结一下。挂载对象存储在频繁操作calibre的数据库文件时读写性能跟不上,解决方式是单独改变了calibre数据库的位置,放在系统磁盘保证读写可以跟上,然后代码中修改calibre-web的数据读取位置。
之后发现下载速度跟上了,但通过1M带宽的主机发送附件的邮件出口带宽一样太慢,这样会有一些功能受到限制,在calibre-web上最明显的是发送到Kinlde功能体验不好,每次送要等待太长时间。
经过两个多月的测试和数据观察又发现了一个烧钱的动作,cos对象存储每天半夜2-4点的读请求会异常高,每天都会产生10万次左右的读请求,一个月要产生300多万次的读请求,腾讯云cos的每月读请求是免费100万次,剩余部分要自己付费。自己排查了很多个方面都没找到原因,怀疑网站备份频繁读取文件、搜索引擎爬虫大量抓取导致文件读取频繁,但发现主机上在这个时间点并没有备份任务,也没有太多的蜘蛛爬取。
每天3-4点腾讯云对象存储cos的读请求都异常高。
排查发现大部分是文件HEAD类型的请求,基本可以确认并不是文件打包这些操作进行的对象存储文件读取。
排查发现3-4点的访问请求几乎可以忽略不计,不可能产生如此多的云存储cos的读请求。
觉得这个问题自己可能不好查找原因了,给腾讯云提交一个工单,具体确认一下问题到底出在哪个方面?
腾讯云提交了工单以后开始研发也没找到原因,只是问问具体的问题和困惑,自己也在想到底会是什么动作触发了这么多的对象存储的读请求。又怀疑是因为cosfs工具的自动缓存定时抓取一部分cos上文件到本地磁盘。来减轻实时读取接口的压力?但没找到这么做的原因和代码触发方式。另一个困惑,为什么cos挂载的本地缓存动目录几天就会缓存50%的存在对象存储中的内容,这样的话本地缓存要配备1:1的存储空间来缓存cos的实际使用数据?
毕竟这是一个还没有什么访问量的网站,如果需要跟对象存储cos使用空间配比1:1 的磁盘进行本地缓存,那还不如直接用云硬盘来的直接,下载加速功能做个cos的镜像回源就可以完成了。
前段时间因为本地50G的系统硬盘缓存cos文件内容都要满了,还单独采购了一块50G的云硬盘挂载到calibre-web书库服务器用来缓解系统磁盘空间紧张的问题。或许找到这个读请求频繁的原因,缓存数据的硬盘就是实际使用才缓存了。
考虑了很多,突然想到是不是有什么定时扫描的程序会遍历这个服务器的目录,导致需要频繁的请求对象存储cos数据,考虑了几种可能,计划任务(备份、目录扫描、网站安全检查)、病毒软件。最后看计划任务也找不到任何执行定时扫描cos挂载的目录的代码。
不知道什么原因,就想起来会不会是安全软件的扫描,一般云服务器都会装一个云厂商的云安全组件。腾讯云的安全服务是云镜(主机安全),云镜介绍里有条表示会扫描文件检查webshell木马。也许就是这安全软件扫描的问题,在夜深人静的时候默默的扫描文件并进行木马检查。
https://cloud.tencent.com/product/hs#userDefined9
但这个云镜除了有个介绍,提供疑似的安全威胁可以处理外,没有任何的设置选项,完全不能进行个性化定制,具体的扫描规则、扫描范围、扫描时间都不清楚。继续通过腾讯云的工单咨询,经过半天的排查腾讯云确认对象存储读请求突增的时间点(凌晨3:00-4:00)与云镜(主机安全)的文件扫描高峰时间点一致。
工单咨询腾讯云的技术,云镜不能设置忽略目录,所以我们只能是承担这个扫描费用?要么是卸载云镜?
安全和消费钱之间我们要选择那个呢?
最后问题找到了,是腾讯对象存储cos fs工具挂载到云主机后被云镜服务频繁扫描导致文件 Head读请求异常的坑。
解决方案应该是卸载云镜?
还是让这个云镜木马扫描服务继续消耗费钱呢?
。
这一系列文章并没有什么具体的技术细节,开了个QQ交流群(72239907),方便大家交流读书、技术问题、图书资源共享。如果有什么软件安装等问题也可以加 calibre 交流群的QQ群(72239907)进行交流。
点击链接加入群聊【爱读书 读好书 calibre】:https://jq.qq.com/?_wv=1027&k=5vYWQsV
这个Calibre-Web还在玩么?
Calibre-Web还在玩么?
还在玩。