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 进行复制,如果有帮助请告诉我?