环境介绍:
我们很多文件存储在阿里云oss上(权限公共读),在又拍开通了CDN 空间,并设置为开启源站资源迁移
所以 用户下载文件--》又拍cdn--》阿里云OSS
问题情况:
大部分情况下都是正常的,但是也经常会出现
问题1:下载中突然中断,下载失败,重新下载有时就会成功了
问题2(重要):例如原文件体积为50MB,用户下载时显示7MB,等混再下或者其他用户下载也都是7MB,也就是说又拍cdn从阿里OSS读取文件失败,并且还保存下来了,必须要我们手动删除又拍cdn上的这个文件,然后重新下载,才正常显示50MB
问题2是很重要的,因为我们并不知道什么时间,哪个文件就损坏了。只有用户遇到损坏的文件告诉我们,我们才知道然后去删除修复,用户体验差极了(因为开启了源站资源迁移,所以必须我们删除7M的文件,又拍才会重新回原读取文件)
出现问题2是随机的,几率大概在千分之一。我们有2万多个文件,并且每日都在增长,所以遇到好几次了。
问题是:又拍cdn傻吗??从道理上说不通啊。
按道理,从程序设计上:
用户访问--》又拍cdn--》去阿里OSS取原文件,这时阿里oss会明确返回文件体积(50MB),又拍cdn自然应该是等50M文件全部接受完毕后,保存到cdn缓存里。为什么会出现只有7MB的情况?就算中间出现问题了,最后一检查体积不相符就直接抛弃,重新回原读取。(不要说要读取一部分立即返回给用户,然后继续读取的话,那跟这不是一件事)
最后提问:
1:连文件完整性都保证不了,我们怎么使用?
2:又拍cdn开启源站资源迁移,存储收费吗?怎么计算的?
源站迁移是分两步,先从源站读取,如果文件不完整,会被丢掉,第二部是上传,如果存储里拿到的 body 不完整,是不会存储的。
开启源站迁移之后,会占用存储,是否收费,取决于流量和存储的比例。现在是存储和流量一比一免费。
上面说文件不完整的情况,可能需要再具体分析一下,可以把服务名和迁移失败的 uri 提供一下,发到 support@upyun.com 协助排查一下