0

考虑有 3 个进程需要将消息记录到单个文件中。来自 3 个进程的消息速率不同。例如:P1 每秒记录 10 个请求;P2 每秒记录 20 个请求,而 P3 每秒仅记录 1 或 2 个请求。我们如何确保这些日志是按照时间戳的顺序写入的?我的意思是它应该在写入文件之前按时间戳排序。

我们怎样才能做到这一点?

4

1 回答 1

0

您可以创建一个按时间排序的优先级队列,其中包含几秒钟的消息。当一个进程调用日志服务时,该服务会尝试将消息添加到队列中。如果队列已满,则从队列中拉出第一项(即最旧的消息),将其输出,然后将新消息添加到队列中。

这允许消息稍微乱序,或者时间稍微偏离(最多几秒钟)的服务器。

您说您的进程每秒总共记录 30 或 35 条消息。您可能希望允许三倍以允许流量峰值,然后再允许两到三倍,以便您可以保留两到三秒的消息。假设队列包含 300 条消息。如果您想留出更多余地,请将其设为 1,000 条消息。

如果您担心队列在慢速期间刷新不够快,您可以添加一个计时器来刷新比某个设定值更早的任何内容,或者让编写代码始终删除任何比某个值更早的内容。

这不是一个完美的解决方案。如果您遇到网络延迟,或者如果您的一个服务器的时钟关闭了很多,或者某些线程在调用日志服务之前挂了几秒钟,则消息可能会被无序写入日志,因为更新的消息已经写好了。您可以识别此类消息并进行异常处理。当然,队列越大,发生这种情况的可能性就越小。

您可能会问自己,确实有必要按照严格的时间顺序编写日志。

于 2020-05-20T18:18:08.267 回答