Tra*_*uy9 2 sql-server asp.net-mvc azure
我有自己的 Azure WebApp,并且有自己的 Azure SQL Server 实例。我注意到,当我在本地机器上进行 WebApp 开发时,有时与 SQL Server 实例的连接会失败。我收到此错误“指定的网络名称不再可用”。如果我继续处理异常(或重新运行 WebApp)然后刷新网页,下次它会连接得很好。再次尝试之间也没有几分钟的时间。它可能需要短短几秒钟才能再次工作。
我不知道为什么会发生这种情况。有时它会工作一个小时,然后就停止工作。我已经在网上进行了研究,我发现的唯一东西就是制定了某种“重试政策”。我不确定我是否需要这个,因为我还没有在生产环境中看到这种情况(敲木头)。
这可能是某种DNS问题吗?有人对如何解决这个问题有建议吗?我可以解决它,但它很烦人。
对此的答案将非常广泛,但欢迎来到瞬态故障必然发生的云计算世界。您在需要做的事情上是对的,但在为什么不应该做的事情上是错误的。仅仅因为您没有在生产中看到它们并不意味着它们不会发生和/或将发生。基本上,如果这个应用程序需要任何类型的稳定性要求,或者超过少数人或使用它的人,那么你真的应该“防御性编码”并预先烘焙它。
什么是瞬态故障?
基本上,它们是由于数据包丢失、超时(由于先前运行的查询或节流)等原因不时发生的故障。引自以下链接的文章:
这些主要是网络问题。如果您在 Azure 中执行操作,有时它不起作用,但是如果您在一段时间后尝试,它运行良好。这种奇怪且不可预测的行为只不过是瞬态故障。当我们谈论 SQL Azure 时,瞬态故障很常见。Azure SQL 数据库资源管理 - http://msdn.microsoft.com/library/azure/dn338083.aspx 一文提到了您可能面临 SQL Azure 暂时故障的场景。我强烈建议您浏览所有这些文档和相关链接。信息量很大!!现在,SQL Azure 非常常见的瞬时错误是节流。
为什么我现在在云中要担心它们?
因为大多数开发人员习惯于在同一台机器上或至少在同一网络上使用 SQL 服务器进行开发。由于距离的原因,响应时间和丢包机会最小。Azure 数据中心与您不在同一栋建筑中,因此出现瞬态错误的几率会增加。
我如何解决它?
方法很多,但我真的建议您阅读一些关于瞬态故障处理块的实现以及如何使用 SQL Azure 实现的文章。 这是讨论如何使用实体框架启用的一个。该框架允许您指定重试的次数、重试的频率以及用于确定重试频率的方法(线性为 10 毫秒,指数退避为 10 毫秒,然后是 100 毫秒,然后是 1000 毫秒)。
我希望我能给你一个代码示例,但你的问题不仅仅是一个简单的一行代码修复。此外,无论何时您使用任何基于云的提供程序(Sql Azure、Blob 存储、服务总线),您都应该了解并实施瞬态故障处理块。
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |