【问题标题】:How can I organize healthcheck for my workers (Docker with python code)?如何为我的员工组织健康检查(使用 python 代码的 Docker)?
【发布时间】:2020-09-15 19:02:51
【问题描述】:
在我的项目中,我有一个 REST API(Flask-server)和 worker(在 Docker 容器中工作的 python 脚本 - 简单的无限循环,向服务器发出请求并开始工作)。 Flask-server 向工作人员发送任务。
当然,有些事情可能会出错,Docker 容器可能会崩溃。在那一刻,我希望服务器知道它。你能提供一个简单的方法吗?
【问题讨论】:
标签:
python
python-3.x
docker
rest
flask
【解决方案1】:
使用 Redis 很容易做到这一点,它是一个非常轻量级、闪电般快速的内存数据结构服务器。它可以在您的网络中为 bash、Python、PHP 的客户端提供列表、哈希、集合、有序集合、整数、原子整数、字符串等等、C/C++ 和其他一切。
我会使用一个简单的 KEY 并在密钥上设置一个 EXPIRE,比如 10 秒。然后,网络中的每个服务器和每个客户端只需至少每 10 秒设置一次以其主机名(或函数)命名的 KEY,这将重置其超时。如果有人查询密钥并且它没有设置 10 秒,他们就知道客户端/服务器或主机/进程已经死亡。
文档是here。
另一种更简单的通信方式是通过文件系统。每个工作人员必须每 N 秒“触摸”(创建)一个名为 /tmp/WORKERXXX.alive 的文件。想要检查工作人员是否存活的进程然后每 N+1 秒检查一次文件是否存在并删除它们。如果文件不存在,则重启worker。
在工作人员的代码中不必侵入文件。它可以简单地在启动时创建一个额外的线程,该线程运行一个无限循环,休眠 N 秒,然后触摸它的 keep-alive 文件。