Azure BLOB 可能的错误 - 随机错误文件
Azure BLOB possible bug - Random wrong file
所以,我知道在 Azure 生命周期的此时报告错误有点疯狂,但我别无选择。开始了。
我们有一个可以上传文件的服务和一个可以下载的客户端。该 BLOB 中塞满了大约 27 GB 的数据。
在某些情况下,我们的用户报告说某些文件出现错误,因此我们检查了我们的 MVC 路由以查看是否有任何问题,但没有发现任何问题。
所以我们创建了一个循环下载的简单控制台:
public static void Main()
{
var firstHash = string.Empty;
var client = new System.Net.WebClient();
for (int i = 0; i < 5000; i++)
{
try
{
var date = DateTime.Now.ToString("HH-mm-ss-ffff");
var destination = @"C:\Users\Israel\Downloads\RO65\BLOB - RO65 -" + date + ".rfa";
client.DownloadFile("http://myboxfree.blob.core.windows.net/public/91fe9d90-71ce-4036-b711-a5300159abfa.rfa", destination);
string hash = string.Empty;
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(destination))
{
hash = Convert.ToBase64String(md5.ComputeHash(stream));
}
}
if (string.IsNullOrEmpty(firstHash))
firstHash = hash;
if (hash != firstHash) hash += " ---------------------------------------------";
Console.WriteLine("i: " + i.ToString() + " = " + hash);
}
catch { }
}
}
这就是结果 - 它时不时地下载错误的文件:
前 1000 次下载正常,文件正确。突然 BLOB returns 一个不同的文件,然后恢复正常。
我发现文件之间的唯一关系是扩展名和文件大小(以字节为单位)。哈希值(当然)不同。
有什么想法吗?
我已尝试重新运行您的示例代码,但无法重现。
问题:
- 对于您看到的两个不同版本的下载文件,您是否比较过这两个文件的内容?我想你说过这是两个完全不同的 blob 被检索 - 但我想验证这一点。两个文件之间的差异有多大?
- 您是否正在使用 RA-GRS 并且客户端库从次要重试条件读取 - 这意味着网络故障可能导致读取来自次要区域?
建议:
- 你能跟踪检索到的文件的 etag 吗?这使您可以检查 blob 自您第一次开始阅读以来是否发生了变化?
- 存储服务确实使您能够明确验证对象的完整性,以检查它们是否在传输过程中被修改 - 可能是由于网络问题等。有关详细信息,请参阅 Azure Storage Md5 Overview。然而,最简单的方法可能只是使用 https,因为这些验证已经内置到 https 中。
- 您是否也可以尝试使用 https 进行复制,如果有帮助请告诉我?
所以,我知道在 Azure 生命周期的此时报告错误有点疯狂,但我别无选择。开始了。
我们有一个可以上传文件的服务和一个可以下载的客户端。该 BLOB 中塞满了大约 27 GB 的数据。
在某些情况下,我们的用户报告说某些文件出现错误,因此我们检查了我们的 MVC 路由以查看是否有任何问题,但没有发现任何问题。
所以我们创建了一个循环下载的简单控制台:
public static void Main()
{
var firstHash = string.Empty;
var client = new System.Net.WebClient();
for (int i = 0; i < 5000; i++)
{
try
{
var date = DateTime.Now.ToString("HH-mm-ss-ffff");
var destination = @"C:\Users\Israel\Downloads\RO65\BLOB - RO65 -" + date + ".rfa";
client.DownloadFile("http://myboxfree.blob.core.windows.net/public/91fe9d90-71ce-4036-b711-a5300159abfa.rfa", destination);
string hash = string.Empty;
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(destination))
{
hash = Convert.ToBase64String(md5.ComputeHash(stream));
}
}
if (string.IsNullOrEmpty(firstHash))
firstHash = hash;
if (hash != firstHash) hash += " ---------------------------------------------";
Console.WriteLine("i: " + i.ToString() + " = " + hash);
}
catch { }
}
}
这就是结果 - 它时不时地下载错误的文件:
前 1000 次下载正常,文件正确。突然 BLOB returns 一个不同的文件,然后恢复正常。
我发现文件之间的唯一关系是扩展名和文件大小(以字节为单位)。哈希值(当然)不同。
有什么想法吗?
我已尝试重新运行您的示例代码,但无法重现。
问题:
- 对于您看到的两个不同版本的下载文件,您是否比较过这两个文件的内容?我想你说过这是两个完全不同的 blob 被检索 - 但我想验证这一点。两个文件之间的差异有多大?
- 您是否正在使用 RA-GRS 并且客户端库从次要重试条件读取 - 这意味着网络故障可能导致读取来自次要区域?
建议:
- 你能跟踪检索到的文件的 etag 吗?这使您可以检查 blob 自您第一次开始阅读以来是否发生了变化?
- 存储服务确实使您能够明确验证对象的完整性,以检查它们是否在传输过程中被修改 - 可能是由于网络问题等。有关详细信息,请参阅 Azure Storage Md5 Overview。然而,最简单的方法可能只是使用 https,因为这些验证已经内置到 https 中。
- 您是否也可以尝试使用 https 进行复制,如果有帮助请告诉我?