gpt4 book ai didi

python - 从Docker容器中的Django + Celery对API超时进行故障排除

转载 作者:行者123 更新时间:2023-12-02 20:17:24 25 4
gpt4 key购买 nike

我有一个微服务架构,可以说9个服务,每个服务都在自己的容器中运行。

这些服务使用了多种技术,但主要是Django,Celery(带有Redis Queue),共享的PostgreSQL数据库(位于其自己的容器中)以及一些更特定的服务/库。

微服务通过REST API相互通信。

问题在于,有时以随机的方式,某些容器API不再响应并陷入困境。
当我在他们的界面上发出curl请求时,我超时了。

到那时,所有其他容器的响应都很好。

有两个卡住的容器。
我注意到的是,这两个阻塞容器都使用:

  • Django
  • Django-rest-framework
  • celery celery
  • celery
  • 作为Celery经纪人的嵌入式Redis
  • 对位于另一个容器
  • 中的PostgreSQL数据库的访问

    由于服务或Docker日志中没有相关信息可见,因此我无法解决该问题。

    问题在于这些API仅在随机时刻卡住。为了使其再次工作,我需要停止阻塞容器,然后重新启动它。

    我想知道它是否可能是 python GIL问题,但我不知道如何检查这个假设...

    关于如何解决这个问题的任何想法?

    最佳答案

    您可以将 shell 放入运行中的容器中,然后将其 checkout 。 celery 加工过程是否还在运行,等等?
    docker exec -ti my-container-name /bin/bash
    例如,如果您使用的是django,则可以转到django目录并执行manage.py shell,然后开始在该目录中戳戳。

    我有一个类似的设置,其中我使用django / celery / celerybeat / nginx /运行多个Web服务。

    但是,通常我每个容器运行一个进程(django和gunicorn在同一容器中运行是一种异常(exception))。然后,我通过使用--volumes-from共享事物。

    例如,gunicorn应用程序将写入.sock文件,并且该容器具有自己的nginx配置; nginx容器对django容器执行--volumes-from来获取此信息。这样,我就可以将stock nginx容器用于所有Web服务。

    调试的另一方便之处是登录到stdout并使用docker的日志驱动程序(splunk,logstash等)进行生产,但在调试时将其记录到容器中。这样,当您对其进行测试时,便可以从“docker日志”中获取很多信息。 docker的一大优点是,您可以获取生产中失败的确切代码,然后在显微镜下运行它以对其进行调试。

    关于python - 从Docker容器中的Django + Celery对API超时进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485251/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com