Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在代码中处理网络问题应该走多远?_C#_Sql_Network Programming_Recovery - Fatal编程技术网

C# 在代码中处理网络问题应该走多远?

C# 在代码中处理网络问题应该走多远?,c#,sql,network-programming,recovery,C#,Sql,Network Programming,Recovery,我有一些客户机的网络非常糟糕,包括网关上的错误映射和别名问题。有时,他们几天都不出故障,而另一些天,我们的服务失败,因为他们无法连接到数据库,或者连接被神秘地中断 一个程序(即服务)应该恢复或重试多远?让他们的网络成员正常工作是合理的,还是我应该承担起自己的责任来克服它的脆弱性?1)是的,期望他们的网络正常工作是合理的。。。你不会告诉别人他们买的车坏了,因为他们没有路可以开,是吗 2) 这就是说:计划是防御性的。当你建造一辆汽车时,你不能期望所有的东西都是一条非常平滑的州际公路 更具体地说,我喜

我有一些客户机的网络非常糟糕,包括网关上的错误映射和别名问题。有时,他们几天都不出故障,而另一些天,我们的服务失败,因为他们无法连接到数据库,或者连接被神秘地中断

一个程序(即服务)应该恢复或重试多远?让他们的网络成员正常工作是合理的,还是我应该承担起自己的责任来克服它的脆弱性?

1)是的,期望他们的网络正常工作是合理的。。。你不会告诉别人他们买的车坏了,因为他们没有路可以开,是吗

2) 这就是说:计划是防御性的。当你建造一辆汽车时,你不能期望所有的东西都是一条非常平滑的州际公路

更具体地说,我喜欢在我的系统中构建重试机制:我将用“可重试”逻辑包装一些东西,它允许您指定重试次数。通常,重试周期将具有二次回退:例如,它在n*n秒后进行尝试,时间为1..n,其中n是重试次数,或者使用fib(n),因此您有类似于1,1,2,3,5秒的重试次数。退避有助于防止对上游资源造成不必要的压力


如果在设置的重试次数后,您可以抛出异常(可以捕获异常并将错误通知用户或其他模块),也可以记录异常,具体取决于严重性

斐波那契也有指数增长。这个序列和斐波那契序列是二次增长的,不是指数增长的。谢谢。但是,这不符合容错性吗?更具体地说,是“快速失效”的概念吗?不一定——单个模块可能“快速失效”(例如,试图检索网络资源),而不是等待资源变得可用。系统的其余部分会收到该故障的通知,一些故障处理系统会决定要做什么(重试,抛出异常)。@ThomSmith,公式在
n
中是指数式的。如果您需要更多的输入,我建议您看一看《It发布》这本书!迈克尔·尼加德(Michael Nygaard),因为它包含了很多关于如何在不太理想的条件下(即现实世界)构建系统的好建议。@BrianRasmussen-我有这本书,它非常棒。我正试图从其他的烟囱溢油者那里了解到这一点;我倾向于简单地失败,并在必要时设置检查点进行恢复。