Docker 获取信息的表现:轮询与事件

Docker performances for getting information: polling vs events

我 Docker 群装满了容器。我需要监视什么时候启动或关闭。我可以通过两种方式做到这一点:

事件的问题在于可能会有巨大的流量,而且如果某些事件未被处理,我们将简单地丢失有关正在发生的事情的信息。

对我来说,立即获得结果并不是特别重要,重要的是获得关于正在发生的事情的正确信息。

任何 pros/cons 来自现实生活的项目?

根据我的经验,应该使用运行状况检查来检查某些东西是否正常运行,并且应该与底层架构无关运行你的服务(否则你将不得不编写一个新的运行状况每次更改平台时都要检查)。当然 - 您可能有无法通过这种方式监控的具有特定需求的服务 - 如果是这种情况,欢迎您对此发表评论。

如果您仅将 Swarm 用于无状态服务,我建议创建一个健康检查路由来验证服务是否健康,甚至可以断开有故障的容器与服务的连接。

如果你是 运行 有状态的东西,这可能会更棘手,但也有解决方案,通常在你的有状态容器上使用某种监控代理(我们正在使用 cloudwatch,因为我们 运行 在 AWS 上,但还有很多选择)

希望对您有所帮助。

监听事件-它是即时的,但是有风险,就像你的事件监听程序因为任何原因崩溃一样,你会错过一个重要的信息并导致错误的结果。这个 Registrator 程序是基于事件的。 轮询——最终一致的结果。但如果它解决了您的问题,那么获取数据的痛苦就会减少。无论您的程序是崩溃还是重启。我们在我们的项目中使用这种方法进行服务发现,到目前为止它达到了目的。