.Net架构篇:思考如何设计一款实用的分布式监控系统?

简介: 前言无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影。如windows的任务管理器,linux的top命令,都可以看作是监控的面板。

前言

无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影。如windows的任务管理器,linux的top命令,都可以看作是监控的面板。

再联系起现实生活,无处不在的路网摄像头,为交通机关监控交通人流提供了方便。

系统规模越大,越离不开监控。缺少了监控,就像盲人摸象,窥不到全貌。

理想中的分布式监控

进入互联网时代,系统调用规模日益庞大,对监控的需求更是迫切。比如一个页面打开很慢,怎么分析哪里慢?是网站接受请求慢还是连接数据库慢,或者消息队列挂了,或者redis请求慢?我们需要监控系统能提供这些信息供我们追踪分析。

所以理想中的分布式监控应该记录从请求发起那一刻,所调用的公开方法,接触过的数据库,缓存,队列等步骤,以及每一步所消耗的时间。这些都需要大量的日志去记录。

第二点,理想中的分布式监控必须是对代码无侵入,应用程序员无需对每个方法去调用监控代码。这样完全解藕的监控系统,才更容易使用,加入每个方法,都要调一下监控接口,那不要累死人,代码也及其不友好。

第三点,理想中分布式监控应该对性能不造成损耗或者极小的损耗。如果流量一大,监控系统CPU飙生的话,那这个监控无疑是失败的。

第四点,许多方法有层级,方法内调用其他方法,应该能通过报表聚合查看,进入每个方法的时间以及调用耗时,调用方法的层级树。

第五点,分布式时代,一个调用请求会横跨很多站点,理想的分布式监控应该提供调用链上所有站点的聚合报表查看,要极力避免死循环,两个站点长官相互调用的情况下,应该用双箭头表明调用关系。

第六点,能提供接入监控的服务器cpu,内存,硬盘空间等指标,并根据警戒线发送通知。这个优先级可以降低,可以借助云服务器自身提供的监控,阿里云和Ucloud都有自己的服务器监控面板。

如何设计一款实用的监控

统一的调用链id

根据软件的调用链特性,从一个请求开始到最终的结束,应该具有一个统一的调用链id

时间戳

调用各种方法的时间也应该是顺序的,需要一个精确的时间戳,来描述调用方法的进入与离开的时间。

异步传输

为了不影响性能,应该以异步传输,定时落库的方式。

延时聚合

如果能做到实时聚合更好,如果实现困难可以采用延时聚合报表,延时的时间应该小于一分钟。这个时间使用人群应该能接受,当然如果能缩短到几秒钟,那使用人群会更加高兴。聚合报表应首先提供最近时间内的耗时排序,可以查看调用的方法树,可以查看调用链的所有站点,其他需求可以后期开发,解决核心需求。

最后的难点

如果不追求无侵入,提供一个空接口。所有需要记录日志的实现接口,就已经达到了目标的一半。

为了完成对应用无侵入的目标,我们首先需要一款真正的aop,即静态编织Aop,这个只听说过postsharp,为什么只有它能实现?或者是类似fiddler之类的抓包工具。

本篇暂时写到这里结束。

可参考的如google dapper论文,zipkin,听云。

作者:从此启程/范存威

出处:http://www.cnblogs.com/fancunwei/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如文章对您有用,烦请点个推荐再走,感谢! 本博客新开通打赏,鼠标移到右侧打赏浮动处,即可赏博主点零花钱,感谢您的支持!

相关文章
|
9天前
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
39 5
|
5天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
28天前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
14天前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
30 5
|
14天前
|
XML 开发框架 .NET
.NET框架:软件开发领域的瑞士军刀,如何让初学者变身代码艺术家——从基础架构到独特优势,一篇不可错过的深度解读。
【8月更文挑战第28天】.NET框架是由微软推出的统一开发平台,支持多种编程语言,简化应用程序的开发与部署。其核心组件包括公共语言运行库(CLR)和类库(FCL)。CLR负责内存管理、线程管理和异常处理等任务,确保代码稳定运行;FCL则提供了丰富的类和接口,涵盖网络、数据访问、安全性等多个领域,提高开发效率。此外,.NET框架还支持跨语言互操作,允许开发者使用C#、VB.NET等语言编写代码并无缝集成。这一框架凭借其强大的功能和广泛的社区支持,已成为软件开发领域的重要工具,适合初学者深入学习以奠定职业生涯基础。
72 1
|
18天前
|
弹性计算 Cloud Native Windows
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
|
23天前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
43 2
|
24天前
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
63 1
|
11天前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
44 0
|
11天前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
24 0