gpt4 book ai didi

angular - 如何为PostgreSQL支持的Spring,Angular和Django微服务编写Docker容器

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

使用最佳解决方案(Kubernetes,Docker Swarm)部署由PostgreSQL数据库支持的Spring Boot,Angular和Django项目开发的一些微服务的最佳方法是什么?

考虑一下我有以下微服务:

  • 微服务1和2(在Spring Boot中开发),由PostgreSQL支持
  • 微服务3(在Django中开发),由PostgreSQL支持
  • 微服务4(在Angular中开发的前端)

  • 每个微服务都包含一个Dockerfile来构建它。

    这种平台基于生产的部署的最佳方法是什么?
  • 我可以很容易地使用docker-compose部署它,但是在这种情况下使用像Kubernetes或Docker Swarm这样的复杂解决方案的真正优势是什么?
  • 我应该创建多少个PostgreSQL数据库容器?每个微服务使用一个PostgreSQL容器还是使用PostgreSQL为所有微服务共享一个?
  • 最佳答案

    像关于部署的大多数此类问题一样,“取决于情况”,但让我尝试回答。
    唯恐先看到差异:

    Docker compose vs(Docker Swarm或Kubernetes)

    您需要承认的最重要区别是docker compose可以在 Single Host only 上运行多容器应用程序。它无法在计算机群集上运行您的应用程序。如果您必须在集群上运行应用程序,则可以删除使用docker compose的选项。为此,您将需要使用Docker swarm或Kubernetes。
    您可以阅读有关herehere的更多信息。

    Docker swarm vs Kubernetes

    简而言之,它们都是容器编排解决方案。这意味着您将使用它们来编排集群中的容器。他们俩都倾向于以不同的方式解决相同的问题。
    它们都用于:

    整个集群中的

  • 容器编排
  • 缩放容器
  • 负载均衡容器
  • 容器之间的通讯
  • 等。在This答案中,您可以看到它们比较的摘要。

  • 如果决定使用docker swarm的好处之一是,用于docker swarm的CLI工具将与标准Docker cli非常相似,并带有一些其他选项。因此,如果您熟悉docker命令行,则设置和使用起来会容易得多。
    您也可以使用docker compose yaml文件直接在swarm上运行。您可以阅读有关 herehere的信息。

    另一方面,Kubernetes非常强大,并受到所有主要云提供商的支持,例如:AWS,Azure和Google Cloud。它是:
  • 开源
  • 由Cloud Native Computing Foundation(CNCF)支持的
  • 有一个庞大的社区支持
  • 可以与其他容器解决方案一起使用(不仅限于docker)

  • 如果要使用Kubernetes,请记住,您将需要学习一个单独的工具来管理它,包括kubectl CLI。

    两者都有利弊,但我建议您使用Kubernetes,前提是您将解决方案部署在云上,并希望尽可能地与云无关。

    What is the best approach for production-based deployments of such platform?



    我只知道您在此处提供给我们的信息,这也取决于您计划将其部署在哪里:
  • 在诸如AWS,Azure,Google Cloud或其他一些云提供商上?
  • 在非云提供程序上,但仍在多个服务器或某些服务器群集上?
  • 在用于所有组件的一台专用服务器上?

  • 在AWS,Azure,Google Cloud或其他一些云提供商上?

    如果您正在使用某个云提供商并且计划将其部署到那里,那么我建议您使用Kubernetes,因为主要的云提供商对它有很好的支持,如果需要,您可以将其移植到另一个云提供商。
    我还建议您针对您正在使用的特定云提供商查看一些针对容器编排的特定解决方案。我当时使用AWS ECS进行部署,并且在此方面有很好的经验。请记住,与使用Kubernetes或Docker swarm相比,通过这种方式,您将更多地绑定(bind)到该特定的云提供商。

    在非云提供程序上,但仍在多台服务器或某些服务器群集上?

    在这里再次需要使用Kubernetes或Docker群,以便将解决方案部署到多台服务器。

    在用于所有组件的一台专用服务器上?

    通过技术上在一台服务器上进行部署,您还可以使用docker-compose。您用于具有不同配置的开发设置的同一应用程序。如果您决定在某个集群上部署,这当然会限制您,因为稍后您将需要迁移到docker swarm或Kubernetes。

    I could deploy it using docker-compose quite easy but what is the real advantage of using sophisticated solutions as Kubernetes or Docker Swarm in the scenario like this?



    我认为在上一节中,我解释了使用docker compose进行生产部署的优缺点。通常我个人要做的是拥有3个环境:
  • 使用docker-compose
  • 设置开发环境
  • 使用Kubernetes设置生产环境并部署到AWS
  • 上的集群
  • 使用Kubernetes设置过渡环境(生产副本)并部署到AWS上的集群,但使用较少的服务器(资源)

  • 因此对于暂存,我使用相同的Kubernetes配置,但服务器较少(这是昂贵的:))。这样,您可以确保设置在使用相同配置时可以正常工作,但资源较少,因为分期将不需要客户使用的生产资源那么多的资源。

    How many containers of PostgreSQL database should I create? One PostgreSQL container per microservice or shared one for all microservices using PostgreSQL?



    我不建议在生产环境中使用容器存储数据库。
    为什么?
    不这样做的原因有很多。只是风险太多,有几个人犯了一个错误。当然可以在非常小的应用程序中使用,但我还是建议不要在生产环境中将Docker用于Postgres。
    您可以阅读有关它的更多信息 here。这是该帖子的一则引文:

    Here’s a pretty bad anti-pattern, which can cause you a lot of trouble, even if you’re just working on a small project. You should not run stateful applications in orchestration tools which are built for stateless apps.



    如果您使用的是云提供商,则建议对数据库(如数据库即服务)或在AWS(例如RDS)上使用服务的内置版本。 Here您可以阅读有关它的信息。对于Azure,这将是Aurora,而其他云提供商也将提供类似的解决方案。
    另一方面,对于您的开发设置,可以在docker容器内使用数据库。

    结论

    根据您的喜好和需求,使用Kubernetes或Docker swarm为您的除数据库以外的所有服务。由于您正在使用使用Kubernetes的微服务开发解决方案,因此可以与云无关。这意味着您将能够使您的基础结构设置具有可移植性,因此您可以轻松地将其移动到其他云提供商。当然对您来说重要吗?您甚至可以将其部署在标准托管提供商上,而不是在一台或多台服务器上的云提供商。

    关于angular - 如何为PostgreSQL支持的Spring,Angular和Django微服务编写Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58563029/

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