1 .什么是健康检查?

健康检查几乎就是名称暗示的。它是一种检查您的应用程序是否健康的方法。随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check)。虽然微服务架构有很多好处,但其中一个缺点就是需要一些更高的操作开销来确保所有的这些服务都正常运行。也就是说,您需要监控许多不同服务的状态,而不是去监控一个巨大的Majestic Monolith,Majestic Monolith是一种模式,其相反模式:微服务导向架构。

在微服务中,这些服务通常只负责一小部分事,甚至只负责一件事。所以监控微服务是一个较为重要的工作。实际中,运行状况检查(HealtH Check)通常与Consul等服务发现工具结合使用监控您的微服务,以确定它们何时变得健康和不健康。如果您也使用Consul进行服务发现,Consul将自动将流量从您不健康的微服务中路由出来,并仅为您的健康微服务提供流量... I think this Great!!

基于微服务的应用程序通常使用健康检查来使其性能监视器,调度程序和协调器能够跟踪众多服务。如果服务无法按需或按计划发送某种“我活着”的信号,那么在部署更新时,您的应用程序可能会面临风险。

2.我如何实施健康检查?

有几种不同的方法可以执行运行状况检查,但最常见的方法时将HTTP端点暴露给专用于执行运行状况检查的应用程序。通常,如果一切正常,您将返回状态码200,任何非2xx代码都意味着出错。例如,如果出现问题,您可能会返回500以及出现错误的JSON有效负载。

  1. 在ASP.NET Core服务中实现运行状况检查

在开发ASP.NET Core微服务或Web应用程序时,您可以使用HealthChecksASP.NET团队命名的带外库(非官方作为ASP.NETCore的一部分)。它可以在这个GitHub回购中找到

该库易于使用,并提供一些功能,使您可以验证应用程序所需的任何特定外部资源(如SQL Server数据库或远程API)是否正常工作。当您使用此库时,您还可以决定资源是否健康意味着什么,我们稍后会解释。

要使用此库,您需要首先在微服务中使用该库。其次,您需要一个查询运行状况报告的前端应用程序。该前端应用程序可以是自定义报告应用程序,也可以是可以相应地对健康状态做出反应的协调器本身。

第一步:使用HealthChecks库

克隆https://github.com/dotnet-architecture/HealthChecks上提供的代码,并将以下文件夹复制到您的解决方案中

// Startup.cs from Catalog.api microservice
//
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddHealthChecks(checks =>
{
checks.AddSqlCheck("CatalogDb", Configuration["ConnectionString"]);
});
// Other services
}
}

第二步:在以下代码中,您可以看到目录微服务如何在其SQL Server数据库上添加依赖项。

// Startup.cs from Catalog.api microservice
//
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddHealthChecks(checks =>
{
checks.AddSqlCheck("CatalogDb", Configuration["ConnectionString"]);
});
// Other services
}
}

第三步:对于要公开运行状况检查端点的服务或Web应用程序,它必须启用UseHealthChecks([ url_for_health_checks ])扩展方法。此方法位于ASP.NET核心服务或Web应用程序的Program类的main方法中的WebHostBuilder级别,紧跟在UseKestrel之后,如下面的代码所示。

namespace Microsoft.eShopOnContainers.WebMVC
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseHealthChecks("/hc")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}

4.查询您的微服务以报告其健康状况

如此处所述配置运行状况检查后,一旦微服务在Docker中运行,您可以直接从浏览器检查它是否健康。(这确实要求您从Docker主机发布容器端口,因此您可以通过localhost或外部Docker主机IP访问容器。)图10-7显示了浏览器中的请求和相应的响应。

在该测试中,您可以看到catalog.api微服务(在端口5101上运行)是健康的,返回HTTP状态200和JSON中的状态信息。这也意味着服务内部还检查了其SQL Server数据库依赖关系的运行状况,并且运行状况检查本身是健康的。

5 您的健康检查将基于您的应用程序/微服务的功能,但有些常见的事情:

l 我的服务可以连接到数据库吗?

l 我的服务可以查询第三方API吗?

l 我的服务可以访问文件系统吗?

l 内存和/或CPU是否高于某个阈值?

微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查的更多相关文章

  1. ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

    .NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...

  2. ASP.NET Core中的运行状况检查

    由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...

  3. 服务发现与健康监测框架Consul-DNS转发的应用

    关于Consul Consul是一个提供服务注册与发现,健康监测,Key/Value存储以及多数据中心存储的分布式框架.官网地址是https://www.consul.io/,公司初步应用后我们老大觉 ...

  4. ASP.NET Core MVC 中的 Model 模型

    ASP.NET Core MVC 中的 Model 我们希望最终从 Student 数据库表中查询特定的学生详细信息并显示在网页上,如下所示. MVC 中的模型包含一组表示数据的类和管理该数据的逻辑. ...

  5. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?

    在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...

  6. 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?

    我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...

  7. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  8. ASP.NET Core Razor中处理Ajax请求

    如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...

  9. ASP.NET Core WebAPI中的分析工具MiniProfiler

    介绍 作为一个开发人员,你知道如何分析自己开发的Api性能么? 在Visual Studio和Azure中, 我们可以使用Application Insight来监控项目.除此之外我们还可以使用一个免 ...

随机推荐

  1. vue打包优化

    网站首页第一次加载很慢,优化过后从十多二十秒缩短到了几秒,主要是打包的时候按需加载了,然后使用了gzip压缩. 这是优化之前的 发现vendor特别大,所有引用的第三方库都会打到这个包里面;另外就是之 ...

  2. java web 程序---javabean实例--登陆界面并显示用户名和密码

    重点:注意大小写,不注意细节,这点小事,还需要请教 发现一个问题,也是老师当时写的时候,发现代码没错,但是就是运行问题. 大家看,那个java类,我们要求是所有属性均为私有变量,但是方法为公有的,如果 ...

  3. CFGym 100198G 题解

    一.题目链接 http://codeforces.com/gym/100198/problem/G 二.题意 看样例就能明白,写表达式解析器. 三 .思路 一看这题目,立马就会想到“后缀表达式”,考虑 ...

  4. 六.jQuery源码分析之jQuery原型属性和方法

    97 jQuery.fn = jQuery.prototype = { 98 constructor: jQuery, 99 init: function( selector, context, ro ...

  5. 修改jvm xms参数

    http://hi.baidu.com/200770842223/item/9358aad4f3194e1a20e2501b http://www.cnblogs.com/mingforyou/arc ...

  6. JDK、Spring、Quartz等几种不同定时器的用法,以及cronExpression表达式定义

    referenc:https://blog.csdn.net/clementad/article/details/42042111 下面介绍几种常用的定时器及其实现方法: 第一种:Timer和Time ...

  7. Shadow Mapping 的原理与实践 【转】

    早在上世纪七十年代末,Williams在他的“Casting Curved Shadows on Curved Surface”一文中提出了名为Shadow Map的阴影生成技术.之后,他人在此基础上 ...

  8. tomcat安装出现问题及解决方法

    1. tomcat安装: 安装目录-->D:\Program Files\apache-tomcat-7.0.59 2. tomcat环境变量配置: 3. D:\Program Files\ap ...

  9. 前端开发之jQuery位置属性和筛选方法

    主要内容: 1.jQuery的位置属性及实例 (1)位置属性 (2)实例 --- 仿淘宝导航栏 2.jQuery的筛选方法及实例 (1)筛选方法 (2)实例一:嵌套选项卡 (3)实例二:小米官网滑动 ...

  10. Unity加载二进制数据

    [Unity加载二进制数据] The first step is to save your binary data file with the ".bytes" extension ...