【问题标题】:Create an efficient logging library for logging socket communication为记录套接字通信创建一个高效的日志库
【发布时间】:2018-05-11 13:24:18
【问题描述】:

我想创建一个日志库,它将记录数据包发送和接收 b/w 多个客户端和服务器应用程序,我想创建这个库优化到足以记录尽可能多的日志,但要实现它必须克服了我认为计时器很好的 IO 绑定问题,在特定时间内我们无法记录,然后记录线程将被杀死,我们继续工作而不记录,当我们再次收到它时,我们应该这样做再次。我想知道有没有比我可以采用的更好的方法?或者有人可能对此有什么看法?

【问题讨论】:

  • 我正在使用 C# 语言制作这个库。
  • 只需将您的日志放在一个队列中,让一个工作线程处理队列中的项目并记录每个项目。
  • 在我的场景中,有 1 个 lac 客户端,每个客户端每秒创建 4000 条消息。你不认为排队会是开销吗
  • 是的,但这取决于您是否可以不记录每条消息。
  • 是的,当有大量 IO 绑定工作时,我可以接受丢失一些日志,但不应因为日志记录而影响通信。

标签: c# concurrency socket.io load


【解决方案1】:

当您拥有如此大量的日志时,Elastic 日志记录就会出现。弹性日志记录,您可以在几秒钟内记录大量数据 TB,没有任何缺点或系统故障,以及如何从大量数据中提取结果。要使用弹性日志记录,您可以使用

https://www.elastic.co/solutions/logging

它支持自动缩放等所有云功能。所以您不会遇到任何 IO 问题。

上面提到的另一种方式是消息队列,例如支持集群的 RabbitMQ。

【讨论】:

  • 这很好,但我不允许使用任何第三方库,这就是我们甚至不使用 log4net 的原因,我必须创建自己的 .我想如果队列已满,日志丢失,我可以使用大小有限的消息队列。
  • 您可以创建单独的服务器进行日志记录。并且您调用一种单向服务“Fire and Forget”,该服务器将承担 IO 和故障处理的全部负载。所以像这样在你的主要业务服务器上没有过度工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2020-03-14
  • 2022-12-19
  • 2011-02-12
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
相关资源
最近更新 更多