如何从同一应用程序项目中的 python2.7 微服务访问 google App Engine ndb 数据存储
How to access the google app engine ndb datastore from a python2.7 microservice in the same app project
我一直在寻找这个,但似乎找不到一个简单的例子来说明如何从与其他非服务模块位于同一应用程序中的 python 微服务访问 ndb 数据存储。
我想要做的是访问数据存储的实际模型 classes,即用户...然后从微服务查询 class。
我知道您不能在 App Engine 标准中使用 google 云数据存储 api,但一定有其他方法,对吗?
这同样适用于共享内存缓存,如果我从微服务对模块(无服务)中的端点进行 API 调用并在端点的内存缓存中设置一些内容,我看不到微服务。因此,当 Google 谈论跨同一应用程序(包括微服务)中所有内容的共享数据存储和内存缓存时,他们建议您如何访问它?
我确定我遗漏了什么,只是找不到。
澄清一下:microservice
术语并不意味着 GAE 中关于数据存储交互(或其他方面)的任何特别之处 - 从这个角度来看,所有 GAE services/modules 都是平等的。使 GAE service/module 成为 microservice
的只是它执行的功能,而不是它的实现或它如何使用基础架构,请参阅 Microservices Architecture on Google App Engine。
使用 ndb
库访问数据存储的同一 GAE project/application 的所有服务默认情况下都可以这样做,没有任何限制或额外的服务配置。
唯一的技巧是引用特定实体类型的所有服务必须具有该实体模型定义的一致视图。这是来自 ndb
客户端库的特定实现的要求,而不是来自数据存储本身。
获得这种一致视图的最简单方法是恕我直言,共享相同的 ndb
模型定义源文件,这可以通过符号链接相同的实际源文件(或目录)来实现持有它们)跨多个 service/module 目录,如 中所述。
换句话说,所有需要 query/access/reference Users
实体的所有 services/modules 实际上都具有相同的 Users
模型定义可用于执行此操作。
在部署对模型定义的更改时(无论是在不同的服务中,还是在同一服务的不同版本之间),必须小心:
- 确保向后兼容迁移策略
- 正确的部署编排 - 即确保不兼容 versions/services 永远不会 运行 同时
相同的技术可以以类似的方式用于内存缓存:共享源代码文件将为需要跨服务共享的内存缓存值导出内存缓存键的定义。或者,更好的是,为相应的数据提供实际的 read/write 函数,以确保数据不仅存储在正确的键下,而且还具有匹配的格式。
有了这样的共享代码,表示某些信息的内存缓存数据就可以在同一个应用程序的 services/modules 之间共享(同样,无论它们是否是微服务)。几乎与通过数据存储共享的信息一样好,除了没有事务支持来保证一致性。
我一直在寻找这个,但似乎找不到一个简单的例子来说明如何从与其他非服务模块位于同一应用程序中的 python 微服务访问 ndb 数据存储。
我想要做的是访问数据存储的实际模型 classes,即用户...然后从微服务查询 class。
我知道您不能在 App Engine 标准中使用 google 云数据存储 api,但一定有其他方法,对吗?
这同样适用于共享内存缓存,如果我从微服务对模块(无服务)中的端点进行 API 调用并在端点的内存缓存中设置一些内容,我看不到微服务。因此,当 Google 谈论跨同一应用程序(包括微服务)中所有内容的共享数据存储和内存缓存时,他们建议您如何访问它?
我确定我遗漏了什么,只是找不到。
澄清一下:microservice
术语并不意味着 GAE 中关于数据存储交互(或其他方面)的任何特别之处 - 从这个角度来看,所有 GAE services/modules 都是平等的。使 GAE service/module 成为 microservice
的只是它执行的功能,而不是它的实现或它如何使用基础架构,请参阅 Microservices Architecture on Google App Engine。
使用 ndb
库访问数据存储的同一 GAE project/application 的所有服务默认情况下都可以这样做,没有任何限制或额外的服务配置。
唯一的技巧是引用特定实体类型的所有服务必须具有该实体模型定义的一致视图。这是来自 ndb
客户端库的特定实现的要求,而不是来自数据存储本身。
获得这种一致视图的最简单方法是恕我直言,共享相同的 ndb
模型定义源文件,这可以通过符号链接相同的实际源文件(或目录)来实现持有它们)跨多个 service/module 目录,如
换句话说,所有需要 query/access/reference Users
实体的所有 services/modules 实际上都具有相同的 Users
模型定义可用于执行此操作。
在部署对模型定义的更改时(无论是在不同的服务中,还是在同一服务的不同版本之间),必须小心:
- 确保向后兼容迁移策略
- 正确的部署编排 - 即确保不兼容 versions/services 永远不会 运行 同时
相同的技术可以以类似的方式用于内存缓存:共享源代码文件将为需要跨服务共享的内存缓存值导出内存缓存键的定义。或者,更好的是,为相应的数据提供实际的 read/write 函数,以确保数据不仅存储在正确的键下,而且还具有匹配的格式。
有了这样的共享代码,表示某些信息的内存缓存数据就可以在同一个应用程序的 services/modules 之间共享(同样,无论它们是否是微服务)。几乎与通过数据存储共享的信息一样好,除了没有事务支持来保证一致性。