如何在 python 中的 Cloud 运行 实例之间共享全局字典?
How to share a global dict between Cloud Run instances in python?
我正在 python 中使用 Cloud 运行 构建一个 flask 服务器,供聊天机器人调用。
有时如果用户想用聊天机器人做某事,机器人需要在做这些事情之前要求用户登录到第 3 方服务器。
我有两条路线:
- 路由 1 是“/login”,它 returns 一个简单的 iframe,它将在第 3 方服务器中打开一个登录页面,生成一个“session_id”,并保存一些我已经知道的信息以“session_id”为键获取一个名为“runtimes”的全局变量字典,以便稍后访问者成功登录时我可以使用它。
- 路线 2 是“/callback/
”。用户成功登录其帐户后,第 3 方服务器将使用 url 参数中的令牌调用此路由。然后我将使用“session_id”从“运行时”中读取保存的信息,然后再做一些事情。
它在我的本地机器上运行良好。但在Google云运行中,由于支持多实例,有时会在服务器调用“回调”时触发新的实例,因此无法获取“运行时”,因为它们在不同的实例中。
我知道我可以将运行时指令保存到数据库来解决这个问题,但它看起来太过分了...只是看起来不对。
有什么简单的方法可以让“运行时”在实例之间共享吗?
这里的解决方案是使用一个中心存储点:数据库、memorystore、firestore,...来自 Cloud 运行 本身的东西。
您也可以尝试 Cloud 运行 execution runtime v2,它允许您挂载网络磁盘,例如 Cloud Storage 或 Filestore。您可以想象将会话数据存储在一个以会话 ID 为名称的文件中。
注意:在云运行这边,有些东西正在烹饪,但不是100%安全,这将是最大的努力。即使使用该新功能也需要数据库备份
我正在 python 中使用 Cloud 运行 构建一个 flask 服务器,供聊天机器人调用。
有时如果用户想用聊天机器人做某事,机器人需要在做这些事情之前要求用户登录到第 3 方服务器。
我有两条路线:
- 路由 1 是“/login”,它 returns 一个简单的 iframe,它将在第 3 方服务器中打开一个登录页面,生成一个“session_id”,并保存一些我已经知道的信息以“session_id”为键获取一个名为“runtimes”的全局变量字典,以便稍后访问者成功登录时我可以使用它。
- 路线 2 是“/callback/
”。用户成功登录其帐户后,第 3 方服务器将使用 url 参数中的令牌调用此路由。然后我将使用“session_id”从“运行时”中读取保存的信息,然后再做一些事情。
它在我的本地机器上运行良好。但在Google云运行中,由于支持多实例,有时会在服务器调用“回调”时触发新的实例,因此无法获取“运行时”,因为它们在不同的实例中。
我知道我可以将运行时指令保存到数据库来解决这个问题,但它看起来太过分了...只是看起来不对。
有什么简单的方法可以让“运行时”在实例之间共享吗?
这里的解决方案是使用一个中心存储点:数据库、memorystore、firestore,...来自 Cloud 运行 本身的东西。
您也可以尝试 Cloud 运行 execution runtime v2,它允许您挂载网络磁盘,例如 Cloud Storage 或 Filestore。您可以想象将会话数据存储在一个以会话 ID 为名称的文件中。
注意:在云运行这边,有些东西正在烹饪,但不是100%安全,这将是最大的努力。即使使用该新功能也需要数据库备份