2

在具有 SQL Server 故障转移群集或镜像的环境中,您更喜欢如何处理错误?似乎有两种选择:

  1. 使整个当前客户端请求失败,并让用户重试
  2. 捕获 DAL 中的错误,然后在那里重试

每种方法都有其优点和缺点。我合作过的大多数商店都做#1,但他们中的许多也没有遵循严格的交易界限,而且在我看来,如果发生故障,他们就会为麻烦而敞开心扉。即便如此,我在将它们与#2 交谈时遇到了麻烦,这也应该会带来更好的用户体验(一个问题是发生故障转移时可能会出现长时间的延迟)。

任何一种或另一种方式的论点都会受到赞赏。如果您使用第二种方法,您是否有一个有助于简化实现的标准包装器?无论哪种方式,您如何构建您的代码以避免诸如与失败命令中缺乏幂等性相关的问题?

4

1 回答 1

0

数字 2 可能是一个无限循环。如果它与网络有关,或者本地 PC 需要重新启动,或者其他什么?

当然,第 1 名对用户来说很烦人。

如果您只允许通过网站访问,那么您将永远不会看到错误,除非故障转移发生在通话中。对我们来说,这不太可能发生,我们在最终用户没有意识到的情况下进行了故障转移。

在现实生活中,您可能在 Web 服务器上没有干净整洁的 DAL。您可能有一个 Excel 表连接(大多数财务)或 WinForms 连接保持打开,所以您只有一个选项。

无论如何,故障转移应该只需要几秒钟。如果数据库恢复需要更多时间,那么无论如何您都会遇到更大的问题。如果它经常发生以至于不得不考虑处理它,那么......

总而言之,您很少想知道,而第 1 号会更好。恕我直言。

于 2009-12-13T07:45:56.713 回答