可以在定制的Google灵活容器中运行postgres (本质上是一个非HTTP服务)吗?还是我会被迫使用谷歌的Cloud解决方案?
发布于 2018-02-23 14:20:07
TL;DR:您可以这样做,但不要这样做,最好将持久数据存储外部化。
是的,可以在定制的Google灵活容器中作为微服务( Google平台中的“服务”)运行PostgreSQL数据库。但是,这引发了另一个重要问题,即为什么要在容器中运行SQL数据库。这是一个风险很大的解决方案,除非您完全确定您正在做什么以及如何管理它。
典型的容器编排基于无状态服务,这意味着它们不打算存储持久数据。这类容器有时确实有某种形式的存储,比如用于缓存或用户会话信息的NoSQL数据库。此数据不是持久的,它可能在敏捷容器应用程序环境中重新启动或销毁实例时丢失。PostgreSQL数据库被用作有状态服务,不适合上述模型。将这样的数据库放入容器中,在访问某些共享数据目录时,可能会遇到数据损坏或直接并发等问题。另外,在Google中,不可能添加共享的持久磁盘,卷被附加到实例并与它们一起销毁。更安全的解决方案是将SQL数据库保存在外部的持久存储中,如您所提到的Cloud。有许多博客文章和文章用无状态/有状态服务来阐述这个问题,比如这一个。
应该注意的是,如果要在本地环境中使用容器或用于测试/开发(而不是寻找数据库的持久状态),那么在容器中放置PostgreSQL应该是完全可以的。另外,如果您设计了一种在实例之间拆分数据的特殊方法,这可能会很好,就像MySQL服务器在这篇文章中所做的那样。因此,应该再次仔细考虑将PostgreSQL数据库放在容器中的想法,特别是在这样一个服务的安全外部化方面有很多选择。
顺便提一下,您不会被迫使用Cloud。数据库可以托管在另一个云提供商Compute上,也可以托管在房地上,也可以由第三方供应商管理。如果将其托管在Compute Engine中,则应用程序可以使用Compute Engine实例的内部IP与同一项目中的数据库进行通信。使用云发射器,您可以将PostgreSQL和其他流行数据库快速部署到Compute。有关使用第三方数据库的更多信息,请查看这些谷歌文档。
https://stackoverflow.com/questions/48899251
复制相似问题