【问题标题】:How to share a global dict between Cloud Run instances in python?如何在 python 中的 Cloud Run 实例之间共享全局字典?
【发布时间】:2021-11-17 08:38:55
【问题描述】:

我正在使用 Cloud Run 在 python 中构建一个烧瓶服务器,供聊天机器人调用。

有时如果用户想用聊天机器人做某事,机器人需要在做这些事情之前要求用户登录到第三方服务器。

我有两条路线:

  • Route 1 是“/login”,它返回一个简单的 iframe,它将在 3rd 方服务器中打开一个登录页面,生成一个“session_id”,并将我已经获得的一些信息保存到一个名为“runtimes”的全局变量字典中以“session_id”为键,以便以后访问者成功登录时可以使用它。
  • 路由 2 是“/callback/”。用户成功登录其帐户后,第 3 方服务器将使用 url 参数中的令牌调用此路由。然后我将使用“session_id”从“runtimes”中读取保存的信息,然后再做一些事情。

它在我的本地机器上运行良好。但是在 Google Cloud Run 中,由于支持多实例,有时会在服务器调用“回调”时触发一个新的实例,因此无法获取“运行时”,因为它们在不同的实例中。

我知道我可以将运行时 dict 保存到数据库中来解决这个问题,但它看起来太矫枉过正了......只是看起来不对。

有什么简单的方法可以在实例之间共享“运行时”吗?

【问题讨论】:

    标签: python google-cloud-run


    【解决方案1】:

    这里的解决方案是使用一个中心存储点:数据库、内存存储、firestore ...... Cloud Run 本身之外的东西。

    您还可以尝试 Cloud Run 执行运行时 v2,它允许您挂载网络磁盘,例如 Cloud Storage 或 Filestore。您可以想象将会话数据存储在具有会话 ID 名称的文件中。

    注意:在 Cloud Run 方面,有些东西正在烹饪,但它不是 100% 安全的,这将是尽最大努力。即使有了这个新功能,也需要数据库备份

    【讨论】:

    • 感谢您的回答。我现在正在使用 Firestore 数据库。但是由于我不需要持久化数据,所以使用数据库做内存的事情感觉有点奇怪。我刚刚在this link 中看到说 Cloud Run 有一个“内置内存文件系统”。但是没有关于如何使用它的指南。我想知道是否有人知道如何使用它以及这是否是跨实例。
    • Cloud Run 有一个内存文件系统 (TMPFS)。你可以写在/tmp目录。但它专用于实例,而不是在多个实例之间共享。因此,它不会解决您的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2013-12-09
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2016-12-22
    相关资源
    最近更新 更多