如何从同一应用程序项目中的python2.7微服务访问Google App Engine Ndb数据存储

时间:2018-10-13 07:45:14

标签: python-2.7 google-app-engine microservices app-engine-ndb

我一直在寻找这个问题,但似乎找不到一个简单的示例来说明如何从与其他非服务模块位于同一应用程序中的python微服务访问ndb数据存储。

我想做的是访问数据存储区的实际Model类,即用户...,然后从微服务查询该类。

我知道您不能在App Engine标准中使用google cloud datastore api,但是肯定有另一种方法吗?

如果我从微服务对模块(无服务)中的某个端点进行API调用,并在该端点的memcache中进行设置,则共享内存也是如此。因此,当Google谈论同一应用程序(包括微服务)中所有内容的共享数据存储和内存缓存时,他们如何建议您访问它?

我确定我丢失了某些东西,只是找不到。

1 个答案:

答案 0 :(得分:2)

要澄清的是:microservice术语并不意味着在GAE中关于数据存储交互(或其他方面)特别特别的事情-从这个角度来看,所有GAE服务/模块都是平等的。使GAE服务/模块成为microservice的仅仅是其执行的功能,而不是其实现或使用基础结构的方式,请参见Microservices Architecture on Google App Engine

默认情况下,使用ndb库访问数据存储区的同一GAE项目/应用程序中的所有服务都可以做到这一点,而没有任何限制或其他服务配置。

唯一的技巧是,引用特定实体类型的所有服务必须对该实体的模型定义具有一致的看法。这是来自ndb客户端库的特定实现的要求,而不是数据存储库本身的要求。

获得这种一致视图的最简单方法是通过共享相同的ndb模型定义源文件来恕我直言,这可以通过将相同的实际源文件(或包含它们的目录符号链接)来实现)跨多个服务/模块目录,如Sharing entities between App Engine modules中所述。

换句话说,您需要以一种方式查询/访问/引用Users实体的所有服务/模块实际上都具有相同的Users模型定义。

在以下情况下部署对模型定义的更改(无论是在不同的服务中,甚至在同一服务的不同版本之间)时,必须谨慎行事:

  • 使用迁移策略确保向后兼容
  • 适当的部署流程-即确保不兼容的版本/服务永远不会同时运行

可以以类似的方式将相同的技术用于内存缓存:共享的源代码文件将导出需要在服务之间共享的内存缓存值的内存缓存键的定义。或者更好的是,为相应的数据提供实际的读/写功能,以确保不仅将数据存储在右键下,而且还具有匹配的格式。

有了这样的共享代码,代表某些信息的memcached数据将在同一应用程序的服务/模块之间共享(同样,无论它们是否为微服务)。几乎与通过数据存储共享的信息一样好,除非没有事务支持以确保一致性。