.net 在基于事件的系统中,日志应该是它自己的微服务吗?

.net 在基于事件的系统中,日志应该是它自己的微服务吗?,.net,logging,microservices,.net,Logging,Microservices,我有一个关于运行在.NETCore上的基于事件的系统中的微服务体系结构的日志记录的问题。基本上,我可以想到两种实现日志的方法: 1使用集中式日志记录工具,并在每个微服务的NuGet包中引用它。 2将日志记录作为自己的独立微服务来实现,该服务将日志消息从消息队列中提取出来。这也将使用一个集中式日志记录工具,但只有这个微服务才会引用NuGet包 现在在方法1中,问题是关闭日志包/提供程序。这样做代价高昂,需要重新部署所有微服务 在这两种方法中,使用通用日志接口(可能是.NET core ILogge

我有一个关于运行在.NETCore上的基于事件的系统中的微服务体系结构的日志记录的问题。基本上,我可以想到两种实现日志的方法:

1使用集中式日志记录工具,并在每个微服务的NuGet包中引用它。 2将日志记录作为自己的独立微服务来实现,该服务将日志消息从消息队列中提取出来。这也将使用一个集中式日志记录工具,但只有这个微服务才会引用NuGet包

现在在方法1中,问题是关闭日志包/提供程序。这样做代价高昂,需要重新部署所有微服务

在这两种方法中,使用通用日志接口(可能是.NET core ILogger接口)来抽象出实现细节将有助于日志记录

方法2有一个有趣的问题:如果消息排队失败怎么办?。在这种情况下,如何记录该错误


我可以看出这两种方法的优点和缺点。在大多数情况下,行业标准化了关于日志记录的哪些策略?我不熟悉微服务,我认为这个问题也可能对其他人有所帮助。

我对处理以及如何管理它的看法是基于我从研究制造业及其系统中学到的知识

微服务是哈佛商业评论(Harvard Business Review)所称的以流程为中心的工厂,在这里,劳动力按技术技能进行组织。相比之下,以产品为中心的工厂按流程和步骤投入劳动力,其中每个步骤可能不需要一套技术技能。正如我在关于分散化的文章中所解释的,以过程为中心的工厂和分布式制造通过允许需求聚合而产生不可逆转的复杂性。我的体系结构是一场彻底的革命,与干涸的模式背道而驰

我大体上同意彼得的建议。每个过程都应该有自己的日志记录操作,可以根据该过程的需要进行更换、升级或重塑,而不必考虑这样做所需的人力。然而,微服务是分布式的过程,这严重影响了集中的复杂性。唯一有效的中心流程似乎是数学流程,如物理或正则表达式,因为它们所做的工作严格由公式和DSL定义,而不是由业务需求决定。即使如此,它们也应该集成到消费过程中,而不是独立的应用程序

我相信我们编程的任务反映了定制作业,并且由以产品为中心的工厂更好地管理,因为每个步骤都是用户需求,并且这些步骤不会转化为可重用的通用中心语言组件。见过冗长的事件处理程序吗?我们主要被要求编写使用API的任务,而不是编写它们

如果你读了我关于这个主题和HBR的文章,制造业也会问如何组织运营。HBR强调分别管理每种组织类型,而我强调组织和集成流程以防止复杂性,并允许程序员轻松管理流程及其操作

分权

整合


一两次工业革命之后,软件行业已经落后于我了。

考虑选项3:让每个微服务独立处理日志记录。使用NuGet包/服务将意味着灵活性降低,或者意味着复杂的包/服务必须处理不同的日志记录需求。如果您担心的是,对服务或包的强烈依赖可能比某些代码重复更糟糕。