43

用ASP.NETCore构建可检测的高可用服务

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654076977&%3Bidx=1&%3Bsn=97898d2b4014ccb36580e2833fc00393
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、前言

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

nmummmJ.jpg!web

二、为什么应用的可检测性越来越重要

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

YfieYrF.png!web

uI3iQfF.png!web

这里列举出对应用程序的可检测性有依赖的主要场景:

  • 故障自动隔离,应用程序需要具备暴露自己运行状况的能力,与负载均衡、kubernetes等基础设施配合,识别故障并进行隔离

  • 故障定位排查,应用程序给出的故障信息越精准,故障定位的效率越高

  • 服务(接口)的可用率,接口可用率的抖动与系统运行健康状况直接相关,与业务的成功率也直接相关

  • 服务(接口)的性能,系统的性能问题,往往需要细粒度地进行识别和优化,性能检测是打造高可用系统必不可少的工作

fiUZVnU.png!web

三、ASP.NET Core的可检测三件套

1、概述

在构建ASP.NET Core应用时,有三大框架可以帮助我们实现应用的可检测能力,实际上这些框架不止适用于ASP.NET Core,使用.NET Core开发的任何类型的应用,都可以用这三个框架:

  • l  日志框架

  • l  诊断框架

  • l  健康检查框架

rqQfaum.png!web

2、.NET Core的日志框架

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

BVzuuua.png!web

eIVfumB.png!web

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

Uraueyu.jpg!web

3、.NET Core的诊断框架

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

URbeAzR.png!web

bayQ3mf.png!web

Q3Yj63a.png!web

QVvErau.png!web

4、.NET Core的健康检查框架

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

InyeYfR.jpg!web

rIbUveI.png!web

qEraUjU.png!web

5、与云基础设施融合

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

yAnAfmq.png!web

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

RrIbEru.png!web

6、总结

  • l  诊断框架,提供了在运行时侦测任意组件内部事件的能力。

  • l  日志框架,提供了将信息透出给系统外部的能力。

  • l  健康检查框架,提供了应用程序于云基础设施适配协作的能力。

借助这三个框架,我们可以很便捷地将系统打造为可检测的系统,并与现代化的云基础设施完美协作,实现系统的高可用。

四、愿景

开发者的幸福感,应该来自于通过技术实现的社会价值和商业价值,而.NET强大的生产力能力,正是开发者的有力武器。作为.NET社区的一员,也期望.NET生态能够帮助更多的开发者,借助强大的Visual Studio以及Visual Studio Code工具,高效地实现价值,持续提高开发者的幸福感。

Ermeamu.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK