问题标签 [reliability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
120 浏览

azure - 我可以对 Azure 上的全球时间做出哪些假设?

我希望我的 Azure 角色在发生突然故障时重新处理数据。我考虑以下选项。

对于要处理的每个数据块,我都有一个数据库表行,我可以添加一个表示“来自处理节点的最后一次 ping 的时间”的列。因此,当一个节点抓取一个数据块进行处理时,它会将“处理”状态和那个时间设置为“当前时间”,然后节点负责更新那个时间,比如每分钟更新一次。然后定期某个节点会询问“所有处理状态和 ping 时间大于 10 分钟的块”,并认为这些块已被废弃,并以某种方式将它们排队等待重新处理。

我有一个非常严重的担忧。上述方法要求节点具有或多或少相同的时间。我可以依靠所有 Azure 节点以某种合理的精度(比如几秒钟)具有相同的时间吗?

0 投票
1 回答
129 浏览

windows - 是否可以丢弃 Azure 角色主机并在不进行清理的情况下在同一主机上启动它?

假设我的 Azure 角色在 Windows 临时文件夹中创建了很多临时文件并且忘记删除它们。在某些时候,它会收到“无法创建临时文件”错误。假设一旦发生这种情况,我的角色代码会抛出异常RoleEntryPoint.Run()并且角色会重新启动。

我不是在这里谈论完美的 Azure 感知代码。我的角色可能会使用第三方黑盒代码,这些代码现在与 Azure 和“本地存储”无关,只会调用System.IO.Path.GetTempPath()并因此在某个不适合 Azure 的位置创建文件。

问题是,如果角色是在同一台主机上启动的,并且临时文件夹没有被某些第三方清理,则该文件夹仍然充满文件,角色将无法运行。根据这个答案,可能会为我的角色保留本地更改,这在上述情况下是一个大问题。

重新启动角色时,是否保证会重置创建的临时文件等本地更改?如何确保启动的角色处于相当干净的状态?

0 投票
1 回答
167 浏览

windows - 当角色崩溃或通过管理 API 重新启动时,Azure 角色主机是否真的重新启动?

假设我的 Azure 角色以某种方式耗尽了系统范围的资源。例如,它产生了许多进程,所有这些进程挂起并消耗系统中的所有虚拟内存。或者它会创建大量的 Windows API 事件对象并且无法释放它们,并且无法再创建此类对象。我的意思是除了破坏文件系统之外的任何东西。

现在,一旦正常的 Windows 机器重新启动,我描述的更改就会被取消 - 进程被终止,虚拟内存被“回收”,事件和其他类似对象被“回收”等等。

然而有一个担忧。如果主机实际上没有重新启动,而是在我点击“重新启动”或“停止”然后“启动”时经历了一些其他过程怎么办?

当我重新启动角色或重新启动实例时,主机是否真的重新启动?

0 投票
1 回答
874 浏览

reliability - 系统故障率

在一次微软采访中,我被问到以下问题:

一个系统保证在任何给定小时内失败 10% 的时间,两小时后的失败率是多少?一百万小时后?

我在可靠性理论和故障率方面不是很有经验,但是非常感谢您对这个问题的任何意见。

0 投票
2 回答
5148 浏览

.net - 如何解决在我的 Azure 角色中突然失去与 SQL Azure 的连接?

我的 Azure 角色从数据库中获取要处理的内容- 它拥有一个实例System.Data.SqlClient.SqlConnection并定期创建一个SqlCommand实例并执行 SQL 查询。

现在偶尔(通常几天一次)运行查询将触发SqlException异常

服务在处理您的请求时遇到错误。请再试一次。错误代码 40143。当前命令出现严重错误。结果,如果有的话,应该丢弃。

我已经看过很多次了,现在我的代码捕捉到它,调用Dispose()实例SqlConnection,然后重新打开连接并重试查询。后者通常会导致另一个SqlException异常

超时已过。在操作完成之前超时时间已过或服务器没有响应。

这看起来很像 SQL Azure 服务器由于某种原因没有响应或不可用。

目前我的代码没有捕捉到后一个异常,它被传播到外部RoleEntryPoint.Run()并重新启动角色。重新启动通常需要大约十分钟,一旦完成,问题就会消失一天左右。

我不喜欢我的角色重新启动 - 这需要一段时间,而且我的服务功能受到阻碍。我想做一些更聪明的事情。

解决这个问题的策略是什么?我应该多次重试查询,多少次以及间隔多长时间?我应该做点别的吗?我什么时候放弃,让角色重新开始?

0 投票
1 回答
1813 浏览

java - 如果邮件服务器关闭,Apache Camel smtp 组件会挂起整个总线

我有一个我认为很常见的情况。我有一个通过 Apache Camel 管理的发票系统。当出现问题时,我希望向管理员发送电子邮件警报。

在阅读了骆驼异常处理之后,我想到了这个:(在我的 Spring XML 中)

这适用我的用例。当抛出任何异常时,确实会向定义的地址发送一封电子邮件。

然而,为了测试极端情况,我停止了内部电子邮件服务器,看看会发生什么。我希望 Camel 尝试发送电子邮件并在 5 秒后停止尝试(如上面 smpt URL 中的 connectionTimout 选项中设置的那样)

然而实际上整个骆驼应用程序挂起!这简直不能接受!我不能保证邮件服务器会 100% 运行。

我在这里错过了什么吗?我应该完全放弃电子邮件警报的想法,还是 Camel 需要另一个特殊选项来在邮件服务器关闭时不挂起?

回答

线

应该

0 投票
1 回答
328 浏览

.net - 能否使用SqlException.LineNumber 来识别异常是否与连通性有关?

我查看了试图解决与 SQL Server 连接暂时丢失的瞬态故障处理框架代码。这里有一个关键点:当存在与 SQL 相关的问题(如语法错误)和与 SQL 无关的问题(如无连接)时都会抛出。SqlException

当然,我只需要尝试从后一类问题中恢复——如果我的代码运行格式错误的查询,我需要快速失败,而不是重试任何事情。

SqlError.Number该框架试图通过检查并将其与大量硬编码值进行比较来区分这些类。一旦 SQL Server 内部发生变化,基于此策略的大量知识和代码肯定需要维护。

我想也许我可以SqlException.LineNumber改用?根据 MSDN,行号从 1 开始,行号 0 表示行号不适用,所以我猜这意味着问题与 SQL 无关。我尝试了一段时间 - 每当我遇到连接问题时LineNumber总是为零。

是否使用SqlException.LineNumber一种可靠的方法来识别异常是由于 SQL 查询问题还是由于连接问题?

0 投票
3 回答
3262 浏览

windows - Windows Azure 是否有任何现成的东西可以抵御拒绝服务攻击?

我们正在开发托管在 Windows Azure 中的 Web 服务。我们预计在某些时候坏人会尝试对它进行 DDOS。我用谷歌搜索并没有找到任何关于 Windows Azure 是否具有一些针对拒绝服务攻击的功能的新的和明确的(这个相当模糊)。

我们需要采取什么特殊措施吗?Windows Azure 提供什么来防止拒绝服务攻击?

0 投票
1 回答
4748 浏览

networking - c#中可靠的udp

互联网上有几篇关于如何使 udp 可靠的文章。我一直无法在 c# 上找到一个。所以也许我可以实现我的算法。

通过在互联网上的研究,我认为 udp 有两个问题:


  1. 它不能确保所有数据都到达目的地。
  2. 数据可能以不同的顺序到达目的地
  3. 也许我缺少第三个问题以使其可靠

如果您有兴趣了解我为什么要使 udp 可靠以及为什么我不使用 tcp,请查看这个问题。相信我,我一直在尝试做 tcp 打孔。

无论如何,也许已经有一个我可以与 c# 一起使用的库,这将使我能够做到这一点。因为我注意到能够找到一个库,所以我一直在考虑以下算法:


“假设有计算机 A 和计算机 B,而计算机 A 是将文件发送到计算机 B”;

这是我一直在考虑的步骤:


1)计算机A打开文件进行读取,假设它是5000字节。这意味着计算机 A 必须向计算机 B 发送 5000 个字节,以确保没有字节丢失并且顺序正确。


2) 计算机 A 获取文件的前 500 个字节,并获取这些字节的哈希值。所以现在计算机 A 有两件事是这 500 个字节的哈希值和字节数。(哈希将是一种有效的算法,例如 md5,以确保以正确的顺序接收数据。即 md5(1,2,3) != md5(2,1,3))


3) 对前 500 个字节的哈希进行成像,结果是 kj82lkdi930fi1。


4) 计算机 B 应该正在监听散列和字节。


5) 计算机 A 将哈希发送到计算机 B。它也发送 500 个字节。一旦它发送它就开始等待回复。


6) 计算机 B 现在应该收到散列和字节。计算机 b 对接收到的字节执行相同的算法 md5。如果该结果等于接收到的哈希值,则它以 {1,1,1,1,1,1} 回复 A 否则它以 {2,2,2,2,2,2,2} 回复


6.5) 假设计算机 B 以正确的顺序获取数据,因此它回复 {1,1,1,1,1,} 它还将哈希码保存在内存或数组中。


7) 计算机 A 应该等待响应以发送下一个 500 字节。假设它收到 {1,1,1}。因为它收到一个 1 它知道它可以继续并使用这 500 个字节的新哈希码发送接下来的 500 个字节。


8) 计算机 A 发送接下来的 500 个字节及其哈希码。


9) 假设计算机 B 没有收到数据,因此它不会回复 A。计算机 B 仍将等待字节和哈希


8) 由于计算机 A 在合理的时间内没有收到 1,1,1,1,1 或 2,2,2,2,2,那么 A 将发送相同的字节并再次散列一秒钟时间。


9) 假设计算机 B 接收到哈希和字节,但接收到的字节顺序不同。当计算机 B 计算这些字节的散列时,该散列将与接收到的散列不匹配。结果它会回复 {2,2,2,2,2,2}


10) 如果计算机 A 收到 2,2,2,2,2,2 那么它将发送相同的字节和散列。如果由于某种原因它没有收到 2,2,2,2,2 那么它会在一段时间后发送相同的字节和散列。假设计算机 A 收到 2,2,2,2,2


11) 计算机 A 第 3 次发送相同的字节和散列。


12) 计算机 B 以正确的顺序接收哈希和字节。结果,它会回复 1,1,1,1,1,1 并将之前的哈希值保存在内存中。(回忆步骤 6.5)


13) 假设计算机 A 没有收到 B 的 1,1,1,1 响应。然后它将第四次发送相同的字节。


14) 计算机 B 检查哈希值,如果它等于最后一个被接受的哈希值,则它再次回复 1,1,1,1 而不将这些字节写入文件。


15)算法继续如此,直到文件得到传输。


.

.

.

I mean there are obviously some other things that I need to add to this algorithm such as letting computer B know when the transfer is done. maybe checking for more errors. what happens if computer A get disconnected for a long time. But the main protocol will be something like the one I described.

So do you think I should start implementing this algorithm? should I increase and send more bytes every time. I mean send 1000 instead of 500? There are lots of articles on the internet that tell you about several techniques but very few of them give you a working example on the language that you want. In this case I need this in c#.

0 投票
3 回答
207 浏览

.net - .NET 组通信系统

我需要一种传输机制,以保证消息的全序广播。

例如,我有三台机器 A、B 和 C,它们发送消息:A -> a0, a1, a2.. aN; B -> b0, b1.. bM; C -> c0, c1.. cK. 如果其中一台机器以某种顺序接收消息(a0, a1, b0, c0, b1, a2...),那么所有其他机器将以相同的顺序接收所有消息!

我需要从 .NET 环境中使用这个东西。NServiceBus 或 Mass Trnansit 可以为我完成这项工作吗?