微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查
1 .什么是健康检查?
健康检查几乎就是名称暗示的。它是一种检查您的应用程序是否健康的方法。随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check)。虽然微服务架构有很多好处,但其中一个缺点就是需要一些更高的操作开销来确保所有的这些服务都正常运行。也就是说,您需要监控许多不同服务的状态,而不是去监控一个巨大的Majestic Monolith,Majestic Monolith是一种模式,其相反模式:微服务导向架构。
在微服务中,这些服务通常只负责一小部分事,甚至只负责一件事。所以监控微服务是一个较为重要的工作。实际中,运行状况检查(HealtH Check)通常与Consul等服务发现工具结合使用监控您的微服务,以确定它们何时变得健康和不健康。如果您也使用Consul进行服务发现,Consul将自动将流量从您不健康的微服务中路由出来,并仅为您的健康微服务提供流量... I think this Great!!
基于微服务的应用程序通常使用健康检查来使其性能监视器,调度程序和协调器能够跟踪众多服务。如果服务无法按需或按计划发送某种“我活着”的信号,那么在部署更新时,您的应用程序可能会面临风险。
2.我如何实施健康检查?
有几种不同的方法可以执行运行状况检查,但最常见的方法时将HTTP端点暴露给专用于执行运行状况检查的应用程序。通常,如果一切正常,您将返回状态码200,任何非2xx代码都意味着出错。例如,如果出现问题,您可能会返回500以及出现错误的JSON有效负载。
- 在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服务中实现运行状况检查的更多相关文章
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
.NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...
- ASP.NET Core中的运行状况检查
由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...
- 服务发现与健康监测框架Consul-DNS转发的应用
关于Consul Consul是一个提供服务注册与发现,健康监测,Key/Value存储以及多数据中心存储的分布式框架.官网地址是https://www.consul.io/,公司初步应用后我们老大觉 ...
- ASP.NET Core MVC 中的 Model 模型
ASP.NET Core MVC 中的 Model 我们希望最终从 Student 数据库表中查询特定的学生详细信息并显示在网页上,如下所示. MVC 中的模型包含一组表示数据的类和管理该数据的逻辑. ...
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...
- ASP.NET Core MVC中的 [Required]与[BindRequired]
在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...
- ASP.NET Core Razor中处理Ajax请求
如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...
- ASP.NET Core WebAPI中的分析工具MiniProfiler
介绍 作为一个开发人员,你知道如何分析自己开发的Api性能么? 在Visual Studio和Azure中, 我们可以使用Application Insight来监控项目.除此之外我们还可以使用一个免 ...
随机推荐
- Train-Alypay-Cloud
ylbtech-Train-Alypay-Cloud: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 ...
- ps -ef 输出具体含义
ps -ef 输出具体含义 UID PID PPID C STIME TTY TIME CMD 各相关信息的意义: UID 程序被该 UID 所拥有 PID 就是这 ...
- 基于http协议实现RPC远程调用
今天简单说一下基本Http协议来实现RPC框架~ 基于Http协议实现RPC框架: 优点: 1.简单.实用.开发方便 缺点: 1.性能不是很稳定,在海量数据时,完全顶不住,容易宕机 2.因为不是走的注 ...
- c语言个人财务管理系统
这个是我的一个网上朋友写的,仅供大家参考: 在这里留个记录 #include<stdio.h>#include<string.h>#define null 0#define m ...
- Kafka学习之broker配置(0.8.1版)(转)
broker.id 默认值:无 每一个broker都有一个唯一的id,这是一个非负整数,这个id就是broker的"名字",这样就允许broker迁移到别的机器而不会影响消费者. ...
- js中获取页面元素节点的几种方式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- linux 使用systemctl 启动服务报错: Error: No space left on device
By default, Linux only allocates 8192 watches for inotify, which is ridiculously low. And when it ru ...
- 28. Implement strStr() (String)
Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...
- xcode编译提示Permission denied
编译第三方XCode插件时,提示没有文件操作权限(Permission denied) 使用命令行,修改Xcode目录当前用户操作权限: sudo chmod -R 777 /Users/当前的用户名 ...
- jQuery的基础dom和css操作
1.元素以及内容操作 $(function () { // alert($("a").html()); // 获取元素中间的html内容,包括标签和文本内容 // alert($( ...