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. PowerDesigner如何将消失的工具栏显示出来

    工具Tool->自定义工具栏,在弹出窗口中选中Palette,并点击[Close]关闭窗口.  

  2. java之压缩流(ZipOutputStream)

    一.文件压缩,是很有必要的,我们在进行文件,传输过程中,很多时候都是,都是单个文件单个文件发送接收,但是当数据量特别大,或者文件数量比较多的时候,这个时候就可以考虑文件压缩. 二.优势:文件压缩过后, ...

  3. http://www.bootcss.com/p/font-awesome/

    集成 将Font Awesome 集成到 Bootstrap 非常容易,还可以被单独使用. 最简单的 Bootstrap + Font Awesome 集成方式 使用这种方式将 Font Awesom ...

  4. modelsim 仿真xilinx fir ip

    到现在不管fir ip 用的对不对,但是在使用modelsim是可以仿真fir ip的. 具体步骤: 1.仿真库,添加到modelsim目录配置文件: 2.将这个文件中的: :List of dyna ...

  5. win10开启开发人员模式

    工具: win10 方法如下: 1.在Windows10系统桌面,点击开始菜单,然后在弹出窗口中选择“设置”菜单项 2.在打开的设置窗口中,选择“更新和安全”图标,并点击打开更新和安全窗口 3.在打开 ...

  6. Backing up the tail

    The tail of the transaction log usually refers to the contents of the database's transaction log tha ...

  7. CSS 第1练 搜索

    1.搜索 效果: <!DOCTYPE HTML> <html> <head> <meta charset="gbk" /> < ...

  8. 提示框一段时间以后消失setTimeout

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Java 堆栈,内存分配理解

    Java虚拟机的堆.栈.堆栈 https://www.zhihu.com/question/29833675

  10. mac使用备注

    快捷键: 掌握好多手势和快捷键可以有效的提高工作效率,触控板和快捷键基本让你可以脱离鼠标. Command+Tab                   任意情况下切换应用程序 - 向前循环 Shift ...