China.NETConf2019 - 用ASP.NETCore构建可检测的高可用服务
一、前言
2019 中国 .NET 开发者峰会(.NET Conf China 2019)于2019年11月10日完美谢幕,校宝在线作为星牌赞助给予了峰会大力支持,我和项斌等一行十位同事以讲师、志愿者的身份公司参与到峰会的支持工作中,我自己很荣幸能够作为讲师与大家交流,分享了主题《用ASP.NET Core构建可检测的高可用服务》,借这篇文章,将主题的内容分享给大家。

二、为什么应用的可检测性越来越重要
随着技术架构的发展,系统的规模不断扩大,尤其是随着微服务架构的流行,应用的拆分颗粒度越来越细,个数越来越多,服务间的调用拓扑也越来越复杂,开发者在故障定位、问题排查、健壮性改进方面投入的时间越来越多。应用程序可检测性的提高,可以帮助我们掌控系统运行的情况,洞悉系统内部发生的事件,给开发者提供持续提升系统高可用能力的决策依据。


这里列举出对应用程序的可检测性有依赖的主要场景:
l 故障自动隔离,应用程序需要具备暴露自己运行状况的能力,与负载均衡、kubernetes等基础设施配合,识别故障并进行隔离
l 故障定位排查,应用程序给出的故障信息越精准,故障定位的效率越高
l 服务(接口)的可用率,接口可用率的抖动与系统运行健康状况直接相关,与业务的成功率也直接相关
l 服务(接口)的性能,系统的性能问题,往往需要细粒度地进行识别和优化,性能检测是打造高可用系统必不可少的工作

三、ASP.NET Core的可检测三件套
1、概述
在构建ASP.NET Core应用时,有三大框架可以帮助我们实现应用的可检测能力,实际上这些框架不止适用于ASP.NET Core,使用.NET Core开发的任何类型的应用,都可以用这三个框架:
l 日志框架
l 诊断框架
l 健康检查框架

2、.NET Core的日志框架
Microsoft.Extensions.Logging日志框架是.NET Core提供的全新框架,将日志记录器抽象为ILogger接口,按照严重程度从低到高定义了日志级别,提供了丰富的内置提供程序,且可扩展性极强,能够轻松地实现自定义日志提供程序,同时社区已经有丰富的实现,大量老牌的日志框架也提供了适配实现。


小技巧:由于大量高频的字符串拼接处理会对性能有明显的影响,在编写日志记录代码时,需要特别注意,将日志内容的字符串拼接推迟到日志分析记录的阶段,可以避免无效的字符串拼接执行,降低系统的性能损耗。

3、.NET Core的诊断框架
考虑到跨平台的场景,.NET Core为我们带来了全新的诊断框架,提供了两个核心的类型,DiagnosticListener和DiagnosticSource,借助这两个类型,我们可以轻松将诊断代码嵌入到我们的应用和组件中。同时新的诊断框架于.NET原有的诊断框架进行了适配,可以兼容老系统的诊断代码。




4、.NET Core的健康检查框架
为了让我们能够轻松构建与云基础设施协作的应用,ASP.NET Core在2.1版本开始,提供了健康检查组件,我们可以用简单的几行代码实现应用程序健康状况的暴露,健康检查框架有灵活的配置能力和可扩展能力,可以轻松适配各种检测场景。



5、与云基础设施融合
借助健康检查组件,我们可以将应用的健康状况暴露给负载均衡的健康检查,也可以与Kubernetes的Liveness、Readiness集成,使我们具备故障自动隔离的能力,保障系统在应用重启、滚动发布、回滚等操作时的可用性。

借助日志框架和健康检查框架,我们可以实时暴露系统的运行状况,并以推、拉的方式将信息透出给监控系统,并配置对应的告警策略,我们可以在系统发生异动时,第一时间知晓故障的节点和故障原因,快速做出响应。

6、总结
l 诊断框架,提供了在运行时侦测任意组件内部事件的能力。
l 日志框架,提供了将信息透出给系统外部的能力。
l 健康检查框架,提供了应用程序于云基础设施适配协作的能力。
借助这三个框架,我们可以很便捷地将系统打造为可检测的系统,并与现代化的云基础设施完美协作,实现系统的高可用。
四、愿景
开发者的幸福感,应该来自于通过技术实现的社会价值和商业价值,而.NET强大的生产力能力,正是开发者的有力武器。作为.NET社区的一员,也期望.NET生态能够帮助更多的开发者,借助强大的Visual Studio以及Visual Studio Code工具,高效地实现价值,持续提高开发者的幸福感。

China.NETConf2019 - 用ASP.NETCore构建可检测的高可用服务的更多相关文章
- 用ASP.NET Core构建可检测的高可用服务--学习笔记
摘要 随着现代化微服务架构的发展,系统故障的定位与快速恢复面临着诸多挑战,构建可检测的服务,帮助线上保障团队时刻掌控应用的运行状况越来越重要.本次分享会讲解如何让 ASP .NET Core 应用与现 ...
- 魅族资深DBA:利用MHA构建MySQL高可用平台
龙启东 魅族资深DBA 负责MySQL.Redis.MongoDB以及自动化平台建设 .擅长MySQL高可用方案.SQL性能优化.故障诊断等. 本次分享主要包括以下几方面: 如何利用MHA 改造MHA ...
- RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...
- 使用Spring Cloud搭建高可用服务注册中心
我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客[使用Spring Cloud搭建服务注册中心]中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭 ...
- 使用SpringCloud搭建高可用服务注册中心
我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭建好的服务注册中心是一个单节点的服务注册中心,这 ...
- 搭建高可用服务注册中心-Spring Cloud学习第一天(非原创)
文章大纲 一.Spring Cloud基础知识介绍二.创建单一的服务注册中心三.创建一个服务提供者四.搭建高可用服务注册中心五.项目源码与参考资料下载六.参考文章 一.Spring Cloud基础 ...
- Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案
一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...
- Nginx (三) 使用Keepalived搭建高可用服务
Nginx可以实现高并发反向代理,实现负载均衡,但是有个问题就是Nginx是单点的.如果Nginx故障,则整个服务将会处于不可用状态.所以我们就需要想办法让nginx高可用,即使一个Nginx宕机,还 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
随机推荐
- windows命令查看端口占用情况
打开cmd 查看端口占用情况:netstat -aon 查看PID对应的进程:tasklist /FI "PID eq 16948"
- 记录:http协议+response+request+session+cookie
1.http协议 http协议也叫作超文本传输协议,定义了浏览器向怎样向服务器请求资源和服务器怎样将资源传给浏览器.http协议是面向事务的应用层协议,是万维网能够传递资源的可靠保障. 目前http协 ...
- A Funny Game——打表&&找规律
题目 n枚硬币排成一个圈.Alice和Bob轮流从中取一枚或两枚硬币.不过,取两枚时,所取的两枚硬币必须是连续的.硬币取走之后留下空格,相隔空格的硬币视为不连续.Alice开始先取,取走最后一枚硬币的 ...
- HttpClient学习研究---第二章:连接管理
第二章.Connection management连接管理2.1. 2.1.Connection persistence连接持久性The process of establishing a conne ...
- 【转】FIddler+Proxifer工具对windows PC客户端进行抓包
开篇:要想实现写爬虫,抓取到数据,首先我们应该分析客户端和服务器的请求/响应,前提就是我们能监控到客户端是如何与服务器交互的,下面来记录下常见的三种情况下的抓包方法 1.PC端浏览器网页抓包网页板抓包 ...
- linux查看反汇编
生成反汇编文件 gcc xxx.c -g -o a.out objdump a.out -dSsx > file 调试的时候查看反汇编: gdb a.out ...layout asm 参考博文 ...
- HOL的多表查询——内连接、外连接
1.内连接: 由于学生和班级是多对一的关系,班级对应学生是一对多的关系,因此,需要先对学生和班级进行配置. (1)创建Student类(多的一方): package pers.zhb.domain; ...
- JS的ES6的Generator
JS的ES6的Generator 1.Generator函数的概念: ES6提供的解决异步编程的方案之一,现在已经不怎么用了被淘汰了. Generator函数是一个状态机,内部封装了不同状态的数据. ...
- LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)
题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...
- 新blog
www.nancheng58.xyz 欢迎来访 骗访客量 我之前的blog是在csdn上的 https://blog.csdn.net/sinat_34550050 这里算是个在csdn的镜像吧 不过 ...