我有一个非常简单的应用程序引擎应用程序,提供存储在 blobstore 中的 1.8Kb - 3.6Kb gzipped 文件。从数字文件 ID 到 blobkey 的映射存储在数据存储中并缓存在 memcache 中。servlet 实现很简单:在请求中接收到一个数字文件 ID;从 memcache/datastore 中检索 blobkey,并BlobstoreService.serve(blobKey, resp)
调用标准来提供响应。正如预期的那样,应用日志显示响应大小始终与提供的 blobstore 文件大小相匹配。
我一直在进行一些重点容量测试,这表明传出带宽配额利用率一直报告为大约是我预期收到的请求的 2 倍。我一直在一次运行 100k 请求,将客户端收到的字节相加,将其与应用程序日志进行比较,除传出带宽配额利用率外,所有内容均保持平衡。
对于我上面描述的简单应用程序如何确定传出带宽配额利用率有什么帮助吗?我错过了什么或没有考虑什么?为什么它与应用日志中显示的响应大小总数不相符?
[2013.03.04 更新:我放弃了使用 blobstore 并恢复为将 blob 直接存储在数据存储中。传出带宽利用率现在完全符合预期。似乎 2x 乘数在某种程度上与 blobstore 的使用有关(但仍然无法解释)。我在使用 blobstore 服务时遇到了其他几个问题;最成问题的是额外的数据存储读取和写入(这与数据存储中管理的 blobinfo 和 blobindex 元数据有关 - 这是我最初试图通过将数据迁移到 blobstore 来减少的)。对我来说一个特别严重的问题是:https ://code.google.com/p/googleappengine/issues/detail?id=6849. 我认为这是 blobstore 服务内存泄漏;创建 Blob 后,您将永远无法删除数据存储中的 Blob 元数据。我将永远为此付出代价,因为我愚蠢地进行了 24 小时的容量和性能测试,现在无法释放测试期间使用的存储空间。看来,blobstore 目前只适用于非常特定的场景(即永久静态数据)。具有大量流失或频繁刷新或更改的数据的对象不应存储在 blobstore 中。]