asp.net-mvc - 如何计算应用程序可用性 (SLA)

标签 asp.net-mvc high-availability uptime downtime service-level-agreement

我有标准的 ASP.NET MVC 项目,我需要计算应用程序可用性以找出我们的 SLA level 。所以,我需要为我们的网络应用程序获取类似的东西。

enter image description here

来 self 的托管提供商的信息

System Availability: 99.9860%
Total Uptime: 30d 10h:22m:44s
Total Downtime: 0d 0h:6m:9s
Total Reboots: 3
Mean Time Between Reboots: 10.15 days

但我需要计算应用程序的可用性。所以,问题是

如何正确计算 ASP.NET MVC 应用程序可用性?

也许有人已经实现了这一点,或者有任何建议如何做到这一点,任何帮助将不胜感激。

从哪里开始?

我认为的第一点是Application Insights and availability test 。问题是测试频率的最小值是5分钟。我需要更精确的测量。

接下来,创建一个工具,每秒都会调用我的应用程序并收集信息。结果:大量请求。

另外,从 IIS 或类似的东西获取一些性能计数器。需要调查一下是否可行。

我知道这个问题可能太宽泛,但我没有找到任何有关应用程序可用性实现的信息。您对此有何看法?

最佳答案

如果我要解释所有可以完成的部分会花费很长的时间,所以我会保持简短。

通常,您在服务级别协议(protocol)中定义所有这些详细信息,其中还定义可用性目标(即 99%),其中还包括计划停机时间。 99% 的可用性目标是让应用程序运行及其功能,如文档中所述,最多大约。每年 87.6 小时。这是SLA uptime calculator .

正如您所说,正常间隔是 5 分钟,但如果您可以通过使用外部网站/服务证明供应商不符合要求,您可以计算损失(收入损失、人工成本等)并 claim 从他们。您已经有了业务影响分析 (BIA),我想否则您应该这样做。

好的,现在进入编程/DevOps 部分。我通常会考虑到这一点来开发应用程序/服务,并将其状态报告给第三方服务,例如 NewRelic、Uptrends 或类似服务。作为一个例子,我还为此使用了一个自制的服务,因为准确的要求是在严格的期限内至少每秒一次传送数据。在我的解决方案中,我使用 WebSockets 按照计划、事件或在需要时双向发送数据。这样做的好处是,您可以发送状态(好或坏),比如说每 500 毫秒发送一次,您将在一秒内知道应用程序是否失败(约 499 毫秒 + 500 毫秒)。

使用这样的服务,您可以在一秒钟内测量正常运行时间、感兴趣的自定义事件和可能的错误以及大量其他指标。通常在 5-100 毫秒内,但 WCET/WCRT 很难估计。

为了回答您的问题,您无法使用如此少的测量点来计算应用程序可用性,每 5 分钟一次就覆盖了大约 1 个测量点。每小时 12 秒,你无法从中得到任何可靠的计算。您可以假设测量点之间一切正常,但这称为猜测。我已经实现了每小时 14 400 个测量点,以提供 500 毫秒的精度(银行)。

希望您得到的答案能够帮助您解决问题。

关于asp.net-mvc - 如何计算应用程序可用性 (SLA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071401/

相关文章:

database-design - 如何学习设计高度事务性的系统?

emacs - 如何在 emacs 状态栏上显示正常运行时间?我正在寻找要在状态栏上显示的/usr/bin/uptime 输出

asp.net-mvc - CaSTLe Windsor 3.1 PerWebRequestLifestyleModule 配置

c# - 对 Controller 中的所有操作使用 async/await?

Javascript 对象在 mvc Controller 中接收为 null

linux - 保持 PC 资源始终在所有主机上运行

high-availability - Hystrix命令关键决定,服务名称+实例IP+Api名称?

asp.net-mvc - Web Api 和 Controller 矫枉过正

c# - 如何在 Ubuntu Server 上的 Mono 中获得系统正常运行时间?

perl - 自动重启关闭的 FastCGI 进程的好策略是什么?