【问题标题】:Docker Django NGINX Postgres build with scalingDocker Django NGINX Postgres 构建与扩展
【发布时间】:2020-04-29 17:31:30
【问题描述】:

多年来,我主要从事单体 Web 应用程序的工作,并没有花太多时间研究 Django 高可用性扩展解决方案。

在 hub.docker.com 上有很多 NGINX/Postgres/Django/Docker 构建,但我发现没有一个可以作为可扩展 Django Web 应用程序的良好起点。

理想情况下,Docker 项目应包括:

  • 一种 Web 容器配置,可轻松将新的 Web 容器添加到 Web 应用程序
  • 一种数据库容器配置,可轻松添加新的数据库分片
  • Django 微服务示例也是一个加分项

很遗憾,我对 Kubernetes 和 Docker swarms 没有太多经验。

如果没有,我可能会将此作为我的下一个 github.com 项目。

提前谢谢你。

【问题讨论】:

    标签: django postgresql docker kubernetes high-availability


    【解决方案1】:

    这是一个非常广泛的要求。这取决于许多因素:

    性能要求是什么?

    请确保,您确实需要这种缩放。在大多数情况下,一个带有 docker-compose 的好服务器就可以满足您的需求。如果您想降低停机风险,请创建 2 个服务器,在它们之间添加一个负载均衡器,然后将数据库或缓存等共享服务提取到另一个服务中,并让两个服务器实例都使用它们。

    您希望如何运行您的应用程序?

    Docker-Compose:

    查看https://github.com/pydanny/cookiecutter-django,了解如何在单个服务器上使用 docker-compose。

    Kubernetes:

    Django 非常适合在 Kubernetes 中运行,我在 Kubernetes 上运行了几个应用程序。问题在于,您需要正确设置所有其他服务(redis、DB、ElasticSearch 等)。这些服务中的每一个都独立于您的主 Django 应用程序运行,并且需要通过 haystackpython-redis 等库进行连接。

    Heroku 和其他

    也有像 Heroku 这样的供应商以一定的价格提供了很多自动缩放功能。如果价格不是问题,请选择这些解决方案,因为它们非常易于设置和维护。

    您的数据库应具有多大的可扩展性?

    如果您尝试跨不同服务器/区域设置自己的数据库集群,您将花费大量时间来构建和维护它。我建议使用 AWS RDS 等数据库服务。他们通过简单的设置和维护为您做到这一点。您可以配置它的可扩展性。这需要一些钱,但这是最省力的解决方案。

    【讨论】: