云计算设计模式(十一)——健康端点监控模式

云计算设计模式(十一)——健康端点监控模式

实施外部工具可以定期通过暴露终端访问应用程序中的功能检查。这个模式可以帮助验证的应用和服务被正确执行

背景和问题

它是很好的做法,并且通常是一个业务需求,并监控web应用程序,和中间层和共享服务,以确保它们是可用的,并执行正确的。然而,它更难以监测在云中运行比它要监控本地服务的服务。举例来说,你不必完全控制主机环境,而服务通常依赖于平台,供应商和其他公司提供其他服务。

也有一些影响云托管的应用,如网络延迟,性能和下面的计算和存储系统的可用性,以及它们之间的网络带宽的因素很多。由于任何这些因素的服务可能完全或部分失败。因此,您必须定期验证服务正在执行正确,以确保可用性,这可能是您的服务级别协议(SLA)的一部分所要求的水平。

解决方案

通过将请求发送到应用程序的端点实施健康监测。该应用程序应该执行必要的检查,并返回其状态的指示。

一种保健监测检查通常结合了两个因素:检查(如果有的话)的应用程序或服务响应于所述请求发送到健康验证端点执行,并且结果由工具或框架正在执行健康检查验证的分析。的响应代码表示的应用程序的状态和任选的任何组件或服务,它使用。的延迟或响应时间检查由监测工具或框架进行。图1示出了该模式的执行的概述。

图1  - 模式概述

附加的检查,可能如下进行:在该应用程序的运行状况监视代码包括:

•检查云存储或可用性和响应时间的数据库。

•检查位于所述应用程序内,或位于其它地方,但应用程序使用的其他资源或服务。

几个现有的服务和工具可用于监视web应用程序通过提交一个请求到一组可配置的端点,并评价针对一组可配置的规则的结果。它相对容易地创建一个服务端点,其唯一的目的是要在系统上执行一些功能测试。

这可以通过监控工具来执行典型的检查包括:

•验证的响应代码。例如,200的HTTP响应(OK)的指示应用程序作出反应而不会出现错误。该监控系统也可能会检查是否有其他响应代码,给出的结果更全面的指标。

•检查响应的内容,以检测错误,甚至当返回200(OK)的状态码。这可以检测到影响返回的网页或服务响应的仅有部分的错误。例如,检查一个页面的标题或寻找某个特定的词组,表示正确的页面被退回。

•测量响应时间,这表明网络延迟和应用程序把执行请求的时间相结合。增加的值可以指示一个新兴的问题与该应用程序或网络。

•检查资源或位于该应用程序之外的服务,如由应用程序使用,以从全局高速缓存传递内容的内容分发网络。

•检查SSL证书过期。
•测量用于该应用程序的URL的DNS查询的响应时间,以便测量的DNS延迟和DNS故障。

•验证返回的DNS查询,以确保正确输入的URL。这有助于通过在DNS服务器上成功的攻击,以避免恶意请求的重定向。

它也是有用的,在可能情况下,以内部部署和托管的位置运行,从这些不同的检查,以测量和来自不同地方比较的响应时间。理想情况下,你应该监视那些贴近客户,以得到每个位置的性能进行精确的视图位置的应用程序。除了提供一个更为坚固的检查机制,其结果可能会影响部署位置的选择的应用程序,以及是否在一个以上的数据中心部署。

试验还应该对所有客户使用,以确保应用程序正常工作的所有顾客的服务实例运行。例如,如果客户的存储空间分布在多个存储账户,在监测过程中,必须检查所有的这些。

问题和注意事项

在决定如何实现这个模式时,请考虑以下几点:

•如何验证响应。例如,仅仅是一个200(OK)状态码足以验证应用程序是否工作正常?虽然这提供了应用程序的可用性的最基本的措施,而且是最小执行这个模式中,它提供了有关操作,趋势,并在应用中可能即将出现的问题的信息很少。

Note:

确保应用程序不会正确地当目标资源是发现和处理仅返回200状态码。在某些情况下,使用母版页来承载目标网页的时候,例如,服务器可能会返回一个200
OK状态码,而不是一个404未找到的代码,即使没有找到目标内容页面。

•端点的数量,以暴露于一个应用程序。一种方法是将暴露的至少一个端点的应用程序所使用的核心服务,而另一个用于辅助或低优先级的服务,使得不同级别的重要性将被分配给每个监控结果。也可以考虑暴露多个端点,如为每个核心服务,以提供额外的监控粒度。举例来说,一个健康的验证检查可以检查数据库,存储和应用程序使用外部地理编码服务;每个都需要不同级别的正常运行时间和响应时间。应用程序可能仍然是健康的,如果地理编码服务,或其他一些后台任务,是几分钟不可用。

•是否使用相同的终点监测作为用于一般访问,而是设计为健康验证检查一个特定的路径;例如,/健康检查/{GUID}/对一般接入端点。这允许应用程序内的某些功能测试由监测工具,例如添加新的用户注册,登录,以及将一个测试的顺序被执行,同时也证实,一般接入终端是可用的。

•收集在服务响应于监控请求,以及如何返回该信息的信息类型。大多数现有的工具和框架只看该HTTP状态代码端点的回报。要恢复和验证其他信息,可能需要创建一个自定义监控实用程序或服务。

•多少信息收集。在检查过程中进行过度处理可以重载应用和影响其他用户,并且所花费的时间可能超过监控系统的超时,使得它标志着该应用程序为不可用。大多数的应用包括仪表,如错误处理程序,并且记录性能和详细的错误信息的性能计数器,这可能是足够的,而不是从一个健康验证检查返回的附加信息。

•如何配置安全监控端点保护他们免受公众使用;这可能暴露该应用程序的恶意攻击,风险敏感信息的曝光,还是吸引拒绝服务(DoS)攻击。典型地,这应该在应用程序的配置来完成,以便它可以容易地更新,而无需重新启动该应用程序。可以考虑使用以下一种或多种技术:通过要求认证◦Secure端点。这可以通过使用在请求报头中的身份验证的安全密钥或通过传递凭证与请求来实现,条件是,监控服务或工具支持认证。

◦Use一个不起眼的或隐藏的端点。例如,暴露在端点上一个不同的IP地址,以所使用的默认的应用程序的URL,一个非标准的HTTP端口上配置端点,和/或使用复杂的路径测试页。它通常可以指定在应用程序配置额外的端点地址和端口,并为这些端点的DNS服务器(如果需要),以避免直接指定IP地址添加条目。

◦Expose上接受一个参数的端点的方法,诸如键的值或操作模式的值。根据不同的请求时收到的代码可以执行特定测试或一组测试,或者返回一个404这个参数提供的值(未找到)错误,如果不能被识别的参数值。所识别的参数值可以在该应用程序的配置进行设置。 

Note

DoS攻击是可能对一个单独的端点,它执行基本功能测试,而不会影响应用程序的动作的影响较小。理想情况下,应避免使用测试可能暴露敏感信息。如果你必须返回,可能是对攻击者有用的信息,考虑如何将保护端点免受未经授权的访问数据。在这种情况下,仅仅依靠默默无闻是不够的。还应该考虑使用HTTPS连接和加密的任何敏感数据,尽管这会增加服务器上的负载。

•如何访问正在使用认证固定的端点。不是所有的工具和框架可被配置为包括与健康验证请求的凭证。例如,微软的Azure内置健康验证功能无法提供身份验证凭据。一些第三方的替代品,可以是Pingdom的,Panopta,NewRelic的,和Statuscake。

•如何确保监控代理是否正确地履行。一种方法是,以暴露一个端点仅返回来自应用程序的配置或可被用来测试剂的随机值的值。

Note:

还要确保监控系统进行自身检查,如自检和内置的测试,以避免它在发出假阳性结果。

何时使用这个模式

这种模式非常适合于:
•监控网站和Web应用程序,以验证可用性。

•监控网站和Web应用程序,以检查其是否工作正常。

•监控中间层或共享服务来检测和隔离故障,可能影响其他应用程序。

•要在应用程序中补充现有的仪器,如性能计数器和错误处理程序。卫生检验检查并不能取代的日志和审计中的应用程序的需求。仪表能够提供有价值的信息为现有的框架,监视计数器和错误日志来检测故障或其他问题。然而,它不能提供的信息,如果该应用程序是不可用的。

例子

下面的代码示例,从HealthCheckController类的HealthEndpointMonitoring.Web项目采取包括可以下载本指南的样品,演示露出一个端点进行一系列健康检查。

该CoreServices方法,如下所示,执行在应用程序中使用的服务的一系列检查。如果所有的测试中没有错误执行,该方法返回一个200(OK)状态码。如果有任何的测试引发了异常,该方法返回一个500(内部错误)状态码。当发生错误时的方法,可任选地返回附加信息,如果该监控工具或框架能够利用它。

 

public ActionResult CoreServices()
{
  try
  {
    // Run a simple check to ensure the database is available.
    DataStore.Instance.CoreHealthCheck();

    // Run a simple check on our external service.
    MyExternalService.Instance.CoreHealthCheck();
  }
  catch (Exception ex)
  {
    Trace.TraceError("Exception in basic health check: {0}", ex.Message);

    // This can optionally return different status codes based on the exception.
    // Optionally it could return more details about the exception.
    // The additional information could be used by administrators who access the
    // endpoint with a browser, or using a ping utility that can display the
    // additional information.
    return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
  }
  return new HttpStatusCodeResult((int)HttpStatusCode.OK);
}

该ObscurePath方法显示了如何读取应用程序配置的路径,并用它作为测试端点。这个例子也说明了如何接受一个ID作为参数,并用它来检查有效的请求。

public ActionResult ObscurePath(string id)
{
  // The id could be used as a simple way to obscure or hide the endpoint.
  // The id to match could be retrieved from configuration and, if matched,
  // perform a specific set of tests and return the result. It not matched it
  // could return a 404 Not Found status.

  // The obscure path can be set through configuration in order to hide the endpoint.
  var hiddenPathKey = CloudConfigurationManager.GetSetting("Test.ObscurePath");

  // If the value passed does not match that in configuration, return 403 "Not Found".
  if (!string.Equals(id, hiddenPathKey))
  {
    return new HttpStatusCodeResult((int)HttpStatusCode.NotFound);
  }

  // Else continue and run the tests...
  // Return results from the core services test.
  return this.CoreServices();
}

该TestResponseFromConfig方法显示了如何可以公开执行一个指定的配置设定值检查的端点。

public ActionResult TestResponseFromConfig()
{
  // Health check that returns a response code set in configuration for testing.
  var returnStatusCodeSetting = CloudConfigurationManager.GetSetting(
                                                          "Test.ReturnStatusCode");

  int returnStatusCode;

  if (!int.TryParse(returnStatusCodeSetting, out returnStatusCode))
  {
    returnStatusCode = (int)HttpStatusCode.OK;
  }

  return new HttpStatusCodeResult(returnStatusCode);
}

 

监控端点在Azure中托管的应用程序

在Azure应用程序监控终端的一些选项包括:

•使用微软的Azure,的内置功能,如管理服务或流量管理器。

•使用第三方服务或Microsoft系统中心操作管理器的框架等。

•创建一个自定义的工具,或者在您自己的或托管的服务器上运行的服务。

注意:

尽管Azure提供一个合理的全面的监控选项,您可以决定使用额外的服务和工具,以提供额外的信息。

Azure管理服务提供了各地的警报规则建立了一个全面的内置监控机制。管理服务网页中的Azure管理门户Alerts部分,可以配置高达每认购10警报规则为您服务。这些规则指定一条件和用于服务诸如CPU负载的阈值,或每秒请求或错误的数量,并且该服务可以自动发送电子邮件通知给你在每个规则定义的地址。

您可以监视具体费用取决于您选择适合您的应用程序的托管机制的条件下(如网站,云服务,虚拟机,或移动服务),但所有这些,包括创建使用网络端点警报规则的能力您在为您服务的设置指定。此端点应该及时地作出反应,以使警报系统可以检测到该应用程序是否正常运行。

注意:

有关创建监视警报的详细信息,请参阅MSDN上的管理服务。

如果你的主机在Azure云服务网络和工作角色或虚拟机应用程序时,您可以采取的内置服务在Azure中所谓的流量管理器中的一个优势。流量管理器是一个路由和负载平衡服务,可以将请求分发到您的云服务托管的应用程序基于一系列的规则和设置的具体实例。

除了请求路由,流量管理坪的URL,端口和相对你定期指定的路径来确定其规则中定义的应用程序的实例是活动的,并响应请求。如果它检测到一个状态代码200(OK)它标志着应用程序可用,其他状态的代码会导致流量管理器来标记应用程序离线。您可以查看流量管理器控制台的状态和配置规则来重新路由请求被响应的应用程序的其他实例。

但是,请记住,流量管理器将只等待10秒钟,以接收来自监控URL的响应。因此,你应该确保你的健康验证码这个时间范围内执行,允许网络延迟从流量管理器往返于您的应用程序,然后再返回。

注意:

有关使用Windows流量管理器来监视你的应用程序的更多信息,请参阅MSDN上微软Azure
Traffic Manager的。流量管理器在多个数据中心部署指南进行了讨论。

本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn589789.aspx

时间: 2024-10-28 19:01:57

云计算设计模式(十一)——健康端点监控模式的相关文章

云计算设计模式(二)——断路器模式

云计算设计模式(二)--断路器模式 处理故障连接到远程服务或资源时,可能需要耗费大量的时间.这种模式可以提高应用程序的稳定性和灵活性. 背景和问题 在分布式环境中,如在云,其中,应用程序执行访问远程资源和服务的操作,有可能对这些操作的失败是由于瞬时故障,如慢的网络连接,超时,或者被过度使用的资源或暂时不可用.这些故障一般之后的短时间内纠正自己,和一个强大的云应用应该准备使用的策略来处理它们,例如,通过重试模式进行说明. 但是,也可以是其中的故障是由于那些不容易预见的突发事件的情况下,这可能需要更

云计算设计模式(十)——守门员模式

云计算设计模式(十)--守门员模式 通过使用充当客户端和应用程序或服务之间的代理,验证和进行消毒的请求,并将它们之间的请求和数据的专用主机实例保护的应用程序和服务.这可以提供一个额外的安全层,并限制了系统的攻击面. 背景和问题 应用程序通过接受和处理请求揭露它们的功能提供给客户.在云托管方案,应用程序暴露终端客户机连接,一般包括代码来处理来自客户端的请求.此代码可以执行认证和验证,一些或所有请求的处理,并有可能访问存储等服务代表客户端的. 如果恶意用户能够危及系统和访问应用程序的托管环境,它使用

云计算设计模式(十九)——运行重构模式

云计算设计模式(十九)--运行重构模式 设计应用程序,使得它可以在不需要重新部署或者重新启动应用程序重新配置.这有助于保持可用性并减少停机时间. 背景和问题 一个主要目的为重要的应用,如商业和企业网站是尽量减少停机时间以及由此引发的中断给客户和用户.但是,有时有必要重新配置应用程序改变特定行为或设置,而在部署和使用.因此,它是用于该应用程序被设计成这样一种方式,以允许在运行时要应用这些配置的变化,并为应用程序,以检测所述变化并且尽快地应用它们的部件的优点. 该种要应用可能被调整记录,以协助与应用

云计算设计模式(二十四)——仆人键模式

云计算设计模式(二十四)--仆人键模式 使用一个令牌或密钥,向客户提供受限制的直接访问特定的资源或服务,以便由应用程序代码卸载数据传输操作.这个模式是在使用云托管的存储系统或队列的应用中特别有用,并且可以最大限度地降低成本,最大限度地提高可扩展性和性能. 背景和问题 客户端程序和网络浏览器经常需要读取和写入文件或数据流,并从一个应用程序的存储空间.通常,应用程序将处理的运动数据,或者通过从存储读取它,并将其传输到客户端,或通过从客户机读取该载流并将其存储在数据存储中.然而,这种方法吸收了宝贵的资

云计算设计模式(二十二)——静态内容托管模式

云计算设计模式(二十二)--静态内容托管模式 部署静态内容到一个基于云的存储服务,可以直接向客户提供这些.这个模式可以减少潜在的昂贵的计算实例的需求. 景和问题 Web应用程序通常包括静态内容的一些元素.此静态内容可以包括HTML页面和诸如图像和可用到客户端的文件的其他资源,无论是作为一个HTML页的一部分(如嵌入式图像,样式表和客户端JavaScript文件)或作为单独的下载(如PDF文档). 尽管Web服务器以及调整通过有效的动态执行页代码和输出缓存优化的要求,他们仍然必须处理请求下载静态内

云计算设计模式(五)——计算资源整合模式

云计算设计模式(五)--计算资源整合模式 合并多个任务或操作成一个单一的计算单元.这种模式可以提高计算资源的利用率,并降低与云托管的应用程序进行计算处理相关的成本和管理开销. 背景和问题 云应用程序频繁执行各种操作.在某些解决方案也可能是有意义的最初遵循的关注点分离的设计原则,并把这些操作成托管和独立部署(例如,如在微软的Azure云服务,独立Azure网站不同的角色独立计算单元或单独的虚拟机).然而,尽管这种策略可以帮助简化溶液的逻辑设计,部署大量计算单元作为同一应用可以提高运行时的托管成本,

云计算设计模式(二十三)——Throttling节流模式

云计算设计模式(二十三)--Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这种模式可以允许系统继续运行并满足服务水平协议,即使当增加需求的资源放置一个极端载荷. 背景和问题 在云应用负载通常上变化的基础上的活动用户的数量或他们正在执行的活动类型的时间.例如,多个用户可能会在工作时间被激活,否则系统可能被要求在每月结束时执行计算昂贵的分析.也有可能是突然和意外的突发活动.如果系统的处理要求超过了可用的资源的能力,其将遭受性能不佳,甚至会失败.该系

云计算设计模式(八)——外部配置存储模式

云计算设计模式(八)--外部配置存储模式 移动配置信息从应用部署包到一个集中位置.这个模式可以提供机会,以便管理和配置数据的控制,以及用于跨应用程序和应用程序实例共享的配置数据. 背景和问题 大多数应用程序运行时环境包括位于应用程序文件夹内的在部署应用程序文件保持配置信息.在某些情况下也能够编辑这些文件来改变该应用程序的行为,它已经被部署之后.然而,在许多情况下,改变配置所需要的应用程序被重新部署,从而导致不可接受的停机时间和额外的管理开销. 本地配置文件还配置限制为单个应用程序,而在某些情况下

云计算设计模式(二十)——调度程序代理管理者模式

云计算设计模式(二十)--调度程序代理管理者模式 协调一系列在分布式服务集和其他远程资源的的行为,试图透明地处理故障,如果这些操作失败,或撤销,如果系统不能从故障中恢复执行工作的影响.这种模式可以分布式系统中增加弹性和灵活性,使之恢复和重试失败是由于短暂的异常,持久的故障和处理故障等操作. 背景和问题 应用程序执行其包括多个步骤,其中的一些可以调用远程服务或访问远程资源的任务.各个步骤可以是相互独立的,但它们是由实现该任务的应用程序逻辑编排. 只要有可能,应用程序应该确保任务运行完成和解决远程访