【问题标题】:Is there an App Engine shared memory or equivalent solution?是否有 App Engine 共享内存或等效解决方案?
【发布时间】:2012-01-30 16:54:11
【问题描述】:

我正在构建一个需要加密密钥才能运行的 GAE 应用。我想避免将密钥存储在代码或持久数据存储中,而是在我启动我的应用程序时上传密钥,这样它只会在应用程序的生命周期内驻留在内存中(从我上传密钥到没有实例正在运行。)

我知道这可以通过常驻后端来实现,但这似乎太贵了(目前最便宜的后端是 58 美元/月),仅在内存中保留一个值并按需将其提供给其他实例。

请注意,我不是在寻找一个通用的健壮共享内存解决方案,只是一个基本上写入一次并读取多次的值。谢谢。

【问题讨论】:

  • 你试过 MemCache 了吗?
  • 您的密钥的使用寿命是多久?
  • @Sameer,在 Memcache 中,无法保证存储的值的生命周期,并且 (@proppy) 只要我的任何实例还活着,我就需要密钥才能存活。当我的所有实例都死了时,我还需要它“消失”。我现在看到,对于 App Engine,这种想法可能是有缺陷的 :) 谢谢

标签: google-app-engine


【解决方案1】:

我认为这不会像你希望的那样工作。 GAE中的数据来源:

  1. 与您的应用一起部署的文件(战争或其他)。
  2. 每个实例的内存(前端或后端)。
  3. 内存缓存。
  4. 数据存储(我想现在是 SQL)。
  5. Blobstore。
  6. 通过 http 请求检索到的信息(即将其存储在其他地方)。

根据您的问题,1 和 4 已出局。 2 本身不起作用,因为实例的启动和停止超出了您的控制范围(否则它不会扩展),并且持久实例很昂贵。 3 本身不起作用,因为可以随时清除 Memcache。 5 实际上与数据存储没有什么不同,因为它永久存储在 Google 的服务器上。也许您可以尝试 6(将其存储在其他位置),并在实例启动期间将其检索到每个实例的内存中。但我怀疑这在安全方面并没有更好的(而且,就此而言,与你所说的你想要的不匹配)。

【讨论】:

  • 这几乎是我的结论。我希望我错过了其他选择。
  • 只有我有这种要求吗?我想创建一个解决方案,即使有人闯入我的帐户或以某种方式获取源代码,他们也无法获得密钥并解密服务器上的数据。
  • 嘿...如果有人非常了解您和您的应用程序可以入侵它,也许他们可以偷偷地用某些代码替换代码,以便在您下次输入时公开数据!无论如何,我通常最终将这类数据放入应用程序部署的资源文件中......并不完美,但话又说回来,如果其他人拥有硬件,总会有限制。
【解决方案2】:

如果您满足以下条件,似乎 Memcache 和本地内存解决方案可能会起作用:

  1. 让您的服务器实例在退出时清除 memcached 键并
  2. 现有服务器实例定期写入/刷新密钥(对于 每个请求的示例)。

这样,只要实例处于运行状态,密钥就可能存在,而冷启动时很可能不存在。

同样的机制也可用于在密钥更改时传播新密钥和/或循环服务器实例。

【讨论】:

  • 我考虑过这一点,但由于我无法控制实例,因此此解决方案可能会引入“竞争”,即在通过正在关闭的实例清除内存缓存后立即出现新实例。另一件事是,当新实例出现时,无法保证密钥实际保留在内存缓存中,所以这是另一个问题。
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2013-09-12
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多