是否可以在自定义Google App Engine Flexible容器中运行postgres(实质上是非HTTP服务)?或者我会被迫使用Google的Cloud SQL解决方案吗?
答案 0 :(得分:1)
TL; DR :你可以这样做,但不要。最好将持久性数据存储外部化。
是的,可以在自定义Google App Engine灵活容器中将PostgreSQL数据库作为微服务(在Google云平台中简称为“服务”)运行。但是,这提出了另一个重要问题,即为什么要在容器内运行SQL数据库。这是一个冒险的解决方案,除非您完全确定自己在做什么以及如何管理它。
典型的容器编排基于无状态服务,这意味着它们不用于存储持久数据。这种容器有时会有某种形式的存储,比如用于缓存或用户会话信息的NoSQL数据库。此数据不是持久性的,在敏捷的容器化应用程序环境中重新启动或销毁实例时可能会丢失该数据。 PostgreSQL数据库更多地用作有状态服务,并不适合上述模型。将这样的数据库放入容器中,可以在访问某些共享数据目录时遇到数据损坏或直接并发等问题。此外,在Google App Engine Flexible中,无法添加共享永久磁盘,这些卷会附加到实例并与它们一起销毁。更安全的解决方案是将SQL数据库保存在外部持久存储中,就像您提到的Cloud SQL一样。有许多博客文章和文章用无状态/有状态服务来解决这个问题,例如this one。
应该提到的是,如果要在本地环境中使用容器或进行测试/开发(并且您没有寻找数据库的持久状态),那么将PostgreSQL放在容器中应该是完全可以的。此外,如果您设计一种跨实例分割数据的特殊方法,这可以正常工作,就像那些人在this article中使用他们的MySQL服务器一样。因此,应该仔细考虑将PostgreSQL数据库放入容器的想法,特别是有这么多选项可以安全地外化这种服务。
另外,请注意,您不必使用Cloud SQL。数据库可以驻留在计算引擎(另一个云提供商)上,也可以由第三方供应商管理。如果在Compute Engine中托管它,应用程序可以使用Compute Engine实例的内部IP与同一项目内的数据库进行通信。使用Cloud Launcher,您可以快速将PostgreSQL和其他流行的数据库部署到Compute Engine。有关使用第三方数据库的详细信息,请查看这些Google docs。