我对谷歌云中的这三种不同构造感到困惑,并试图了解它们如何组合在一起。
首先,从我所读到的“模块”只是“服务”的旧名称对吗?所以我读到的关于谷歌云“模块”的任何内容也适用于服务?
您是在一起使用名称空间和服务/模块还是通常是互斥的?
这是如何将这些东西结合在一起的一个很好的例子:
答案 0 :(得分:1)
对,服务和模块是一回事。请注意App Engine Services as microservices中此报价中的实际网址路径:
在App Engine项目中,您可以部署多个微服务 在App Engine中单独services,以前称为 modules 。
服务可以调用的just a few APIs支持命名空间:
App Engine目前支持以下API中的命名空间:
它们实际上只是一种分离/切片(不共享)这些API所提供数据的方法,可以帮助防止跨命名空间边界的意外数据泄漏。请参阅示例Implementing Multitenancy Using Namespaces。但请注意,保护仅与应用程序代码一样好(如果代码设置错误的命名空间,数据将泄漏)。
服务不提供数据隔离,通过在调用相应的API时适当地设置命名空间,它们可以共享数据而不管它是否在命名空间中。因此,它不会将数据放在使数据可以跨服务共享的命名空间中。
项目边界适用于命名空间和服务。但是可以配置API和项目以允许甚至跨项目边界访问(甚至可以从Google网络外部访问 - 例如,参见How do I use Google datastore for my web app which is NOT hosted in google app engine?)
使用服务的主要目的是获得代码隔离。但它带来了价格 - 每个服务都有自己的实例。也有点困难:文档甚至工具往往有点落后,其中许多人假设单一服务GAE应用程序上下文。
尽管在Naming Developer Environments中提供了使用服务来创建环境的替代方法,但我会坚持使用单独的项目(也有数据隔离)。