【问题标题】:Is it recommended to use Database as a container in Production environment?是否建议在生产环境中使用数据库作为容器?
【发布时间】:2018-07-08 23:40:54
【问题描述】:

假设我们正在为产品使用微服务架构,并且我们决定使用“每个服务的数据库”模型,并由 AWS 等提供商部署在云服务器中。 将数据库作为开发和测试环境的容器运行是很方便的。

但同样可以在生产环境中实现!如果是这样,它会有多安全? 还是使用 AWS RDS-DB 的云解决方案是否合适!!

【问题讨论】:

标签: database docker containers microservices production-environment


【解决方案1】:

根据下面的链接,在生产环境中使用数据库容器不是一个好主意。 但正如我所经历的那样;如果您将容器与应用程序隔离并定期更新容器并管理网络内容,那么似乎没有问题。

链接:https://www.quora.com/Is-it-not-advisable-to-use-database-in-Docker-container

【讨论】:

    【解决方案2】:

    我们在生产环境(本地企业应用程序)中将我们的数据库容器化。许多人都这样做。它非常稳定,部署也大大简化。当然我们的数据库没有压力;我们正在处理数百个并发用户,而不是数万个。我们只是确保容器有足够的 RAM 并且受到良好的监控。

    如果我们确实需要将整个 VM 单独用于 db,那么是的,我会跳过 docker。

    【讨论】:

      【解决方案3】:

      当您为微服务使用 Database Per Service 模型时,在生产中完美的解决方案可以是数据库的 AWS RDS 实例,现在您有两种方法:

      • 您可以创建单个 RDS 实例,并且可以在同一个 RDS 实例上为不同的服务使用不同的数据库,这将节省很多成本,但您需要注意数据库连接和基于数据库的负载您必须选择 RDS 实例类型,如 4xlarge 等,更好的实例类型将提供更多连接,并且可以有效处理更多数据库负载。

      • 第二种解决方案可以创建多个 RDS 实例,RDS 实例的数量将等于您的微服务数量,因为每个服务将独立使用一个 RDS 实例作为其数据库,这不是有效的解决方案,它会导致成本很高,而且此解决方案将无法充分利用 AWS RDS 实例。

      【讨论】:

        【解决方案4】:

        blog post 列出了一些不应在容器中运行生产数据库的原因。它还引用了 another blog post 描述更新 docker 和不稳定存储驱动程序的问题。

        对我来说,这里的要点归结为:

        • 不可靠的存储驱动程序。当您将数据库状态写入主机系统时,这可能不是问题,但 Docker 例如明确鼓励用户为此使用卷(请参阅docs:引用:“卷是在 Docker 中持久化数据的最佳方式”)。在正常情况下它可能工作得很好,但是像电源故障或读取错误这样的边缘情况呢?

        • 在生产环境中管理数据库很困难。许多公司聘请全职 DBA 来确保生产数据库的顺利运行。 devops 范式(每个开发人员在容器中创建过多的 DB 服务器)使得 DBA 几乎不可能完成他的工作。也就是说,如果 DBA 甚至可以访问这些 DB。

        总结:容器对于某些任务来说很好,但对于其他任务来说是个坏主意。在容器中运行生产数据库是这些坏主意之一。

        【讨论】:

        • 但是为什么 DBA 不能只访问容器内正在运行的 DB 并对其进行管理呢?
        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 2013-04-04
        • 2014-10-26
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        相关资源
        最近更新 更多