使用 PGPOOL-II 运行 Django + Guardian 时出现随机 NoneType 异常

问题描述

今天我有一个有点复杂的话题想和你分享。 我们正在运行一个“大规模”的 Django 后端,高度关注高可用性。 出于法律原因,我们不得不更改我们的基础架构提供商并开始在内部(在我们的 kubernetes 集群上)托管主数据库,而不是使用流行的数据库即服务产品之一。

长话短说,将 pgpool-II 带入游戏后,我们会遇到无人能解释的随机 nonetype 错误。 实际上,我们的计划是编写一个指南,介绍如何在 k8s 上设置可扩展的、高效和生产环境的部署。但是,目前看来,有一些问题需要事先解决/理解。

考虑以下设置:

  • 我们正在将带有 Guardian 的 Django-Applications 作为 docker-containers 部署到 k8s
    • Django 3.2.3
    • 带有 uvicorn Workers 的 Gunicorn 20.1.0 (0.13.4)
    • Asgi 3 协议 (asgref 3.3.4)
    • Django-Guardian 2.3.0
  • 我们的 Postgresql 集群基于最新的 bitnami/postgresql-ha 镜像
    • Pgpool-II (2.2) 和 Postgresql (11.12)

遵循最佳实践,我们使用 django 的信号逻辑来执行权限分配,作为各种模型的 post_save 的一部分。我们现在看到的可能是 50 个请求中有 1 个失败并出现 nonetype 异常。

如果您检查我链接错误跟踪,那么您将看到“真正的”问题-我什至不确定它是否真的与监护人有关。 应用程序似乎已经解决了正确的权限类和类型转换?它更改为 None 对象。 ……我真的不明白为什么它可以而且应该发生。

我想不出是什么原因导致它以及如何继续,但是从我的测试中我觉得它只在运行 pgpool-II 而不是普通的 postgresql 时发生。这是否有意义,如果是,可能是什么原因造成的?

Snapshot from Sentry

Full Stacktrace without vars

非常感谢我们提示如何继续调试的任何帮助:)

最好的 帕特里克

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)