在生产环境中,是否建议将数据库作为容器使用?

32
假设我们正在为一个产品使用微服务架构,并决定采用“每个服务一个数据库”模型,并在像AWS这样的提供者的云服务器上部署。 在开发和测试环境中,将数据库作为容器运行非常方便。
但是,在生产环境中是否可以实现相同的操作?如果可以,那么它有多安全呢? 还是应该选择AWS RDS-DB这样的云解决方案!

https://devops.stackexchange.com/a/3374/210 - 030
4个回答

14

这篇博客文章列出了一些原因,说明为什么不应该在容器中运行生产数据库。它还引用了另一篇博客文章,描述了更新docker和不稳定存储驱动程序的问题。

对我而言,这里的主要观点可以归结为以下几点:

  • 不稳定的存储驱动程序。当您将数据库状态写入主机系统时,这可能不是一个大问题,但例如Docker明确鼓励用户使用卷来实现这一点(请参见文档:引用:“卷是在Docker中持久保存数据的最佳方法”)。在正常情况下可能会完美地工作,但在像断电或读取错误等特殊情况下怎么办?

  • 在生产环境中管理数据库很难。许多公司雇用全职DBA以确保生产数据库的平稳运行。DevOps范式(每个开发人员在容器中创建大量的DB服务器)使得DBA几乎无法完成工作,除非DBA甚至可以访问这些DB。

总之:容器适用于某些任务,但对于其他任务则是一个不好的想法。在容器中运行生产数据库就是其中的一个不好的想法。


但是为什么DBA不能直接访问容器内运行的数据库并进行管理呢? - chill appreciator
5
2022年这个答案的现状是什么? - PirateApp
1
@PirateApp,我不确定“不可靠的存储驱动程序”这一点是否仍然有效。现在将数据库放在容器中是相对常见的,因此我认为任何普遍存在的可靠性问题现在都已经得到解决。 - Richard
1
尽管如此,我仍然不会将足够大规模的数据库放入容器中,而是使用专门为此目的构建的物理机器(或适当的EC2实例);具有大量内存和SSD存储器。而不是一些随意的k8s节点,可能没有足够的内存来有效处理查询。 - Richard

10
我们在生产环境中使用容器化的数据库(企业应用程序部署在本地)。很多人都这样做。它非常稳定,部署也更加简化。当然,我们的数据库没有承受压力;我们只处理数百个并发用户,而不是数万个。我们只需确保容器有足够的RAM,并进行良好监控。
如果我们需要将整个虚拟机专门用于数据库,那么是的,我会跳过docker。

0

0

由于您正在使用数据库每个服务模型来进行微服务,因此在生产中,完美的解决方案可以是AWS RDS实例用于数据库,现在您有两种方法:

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

  • 第二种解决方案可以创建多个RDS实例,RDS实例的数量将等于您的微服务计数,因为每个服务将独立使用一个RDS实例进行其数据库,这不是有效的解决方案,它将产生很多成本,并且此解决方案将未充分利用AWS RDS实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接