微服务中的健康监测以及其在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来监控项目.除此之外我们还可以使用一个免 ...
随机推荐
- [转][C#]压缩解压缩类 GZipStream
本文来自:https://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(v=vs.100).aspx using ...
- configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
编译php出现错误: configure: error: Please reinstall the libcurl distribution - easy.h should be in <cur ...
- Codeforces Round #456 B题
一.题意 给你一个n和一个k,让你从[1, n]区间内选k个数,这k个数异或和最大. 二.思路 我一开始看到这种题,不自觉地就想到,莫非又要搞很复杂的线段树.主席树?貌似还有些难搞啊.然而事实是:Co ...
- 利用MessageFormat实现短信模板的匹配
其实没什么技术含量,因为老是想不起来,所以在此文做下记录. 通常我们的应用系统中都会有很多短信的发送,或者是信息邮件等的推送,而这些信息却有着相同的共性,比如只是用户名换了下. 像下面这条,除了红色字 ...
- module.exports 、exports、export、export default的区别
module.exports和exports是属于 CommonJS 模块规范,export和export default是属于ES6语法. module.exports和exports导出模块,用r ...
- 一个检测网页是否有日常链接的python脚本
在大的互联网公司干技术的基本都会碰到测试.预发布.线上这种多套环境的,来实现测试和线上正式环境的隔离,这种情况下,就难免会碰到秀逗了把测试的链接发布到线上的情况,一般这种都是通过一些测试的检查工具来检 ...
- 【326】PIL 截图及图片识别
参考:另一种用python识别图片文字的方法 参考:Python人工智能之图片识别,Python3一行代码实现图片文字识别 参考:Python3+Selenium3环境构建填坑之旅 参考:基于pyth ...
- LPCTSTR和LPTSTR和char *究竟有什么区别
LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...
- tomcat安装出现问题及解决方法
1. tomcat安装: 安装目录-->D:\Program Files\apache-tomcat-7.0.59 2. tomcat环境变量配置: 3. D:\Program Files\ap ...
- css常用属性初总结:font
平时在做项目时,UX常说的一句话就是“这里的字体不对吧,字体大小也不太对,你们前端有没有按规范来”,今天,我们就一起来看看这折磨人的font属性. 字体属性font-family 允许值 系列名 初始 ...