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. JS 奇淫巧技 转

    1. 在 String.prototype.replace 方法中使用 /g 和 /i 标志位 令很多 JavaScript 初学者意外的是,字符串的 replace 方法并不会 替换所有匹配的子串— ...

  2. decimal类型运算注意点

    代码如下: //货币类型的两个数基本运算 Console.WriteLine("错误的写法"); - ); ; - ) / ; Console.WriteLine(errorNum ...

  3. MapBuilder,操作集合工具类

    public class MapBuilder { /** * Creates an instance of {@code HashMap} */ public static <K, V> ...

  4. [saiku] 通过管理台配置用户、schema和数据源

    上一篇讲到了如何下载和安装saiku [http://www.cnblogs.com/avivaye/p/4877680.html] 本文简介下saiku用户的配置操作和需要注意的点 一.添加用户 S ...

  5. 接口自动化(二)--操作Excel获取需要数据

    这一部分的内容记述一下对Excel表格的操作,本实战中的测试用例是由Excel来管理的,因此操作Excel是重要的一部分. 再次贴出这张图,所有的测试用例都在这个sheet内,请求数据真实存放在jso ...

  6. SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看

    依赖: <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency ...

  7. centos7上mysql无法启动也没有日志

    报错的原因就是 [root@localhost duanxinli]# journalctl -xe-- Subject: Unit mysqld.service has begun start-up ...

  8. delphi Firemonkey ListView 使用参考

    delphi Firemonkey ListView 使用参考 Tokyo版本 http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Customizin ...

  9. Spring启动时获取自定义注解的属性值

    1.自定义注解 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documen ...

  10. Lrc歌词-开发标准

    LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...