【问题标题】:Google App Engine - prohibitively slow and expensive backup and restore?Google App Engine - 备份和恢复速度太慢且成本高昂?
【发布时间】:2012-03-14 19:48:51
【问题描述】:

在开发了几个 GAE 应用程序(其中一些正在用于生产)之后,我得出的结论是,在这个平台上,备份生产数据的速度足够慢,而且成本足够高,足以让我们过渡到其他基于云的应用程序技术栈。

在我们的一个生产应用中,我们有大约一百万个实体,每个实体的平均大小为 1KB。所以数据的总大小大约是 GB,这应该不是什么大问题,对吧?以下是使用默认选项从应用引擎获取实体后,bulkloader 工具的输出:

[INFO] 948212 个实体(608342497 字节)在 47722.7 中传输 秒

差不多 13 个小时。因此,如果我们想为生产数据设置每小时备份系统,使用当前的 GAE 工具集是不可能的。

成本是另一回事。我尝试使用数据存储管理员将实体复制到另一个我认为可以用于备份的应用程序。我首先将预算设置为每天 2 美元,这很快在大约 5000 个实体中用完,然后我将预算增加到每天 10 美元,但在没有接近复制百万个实体的情况下再次用完。

我显然不打算每次需要备份我的 1 GB 数据时花费 100 美元,我也不想等待数小时(甚至数天)来备份我的数据。因此,要么我什么都不知道,要么 Google App Engine 目前只是一种不切实际的方式来编写可以轻松备份和恢复的有意义大小的可扩展生产质量应用程序。

是否有一种快速且经济高效的方式从 GAE 应用程序备份您的数据?

【问题讨论】:

    标签: python google-app-engine backup restore


    【解决方案1】:

    这是一个非常好的问题。我一直在寻找这个问题,我认为 Google Cloud Storage(experimental) 将更适合备份数据,原因如下,我从 Google 网站获取这些数据以帮助您获取一些信息。

    Google App Engine 提供了一种更简单的方式来读取和写入 Google Cloud Storage 对象,它允许应用程序创建和提供数据对象。这些对象存储在 Cloud Storage 的存储桶中,但 Google App Engine 应用程序可以通过 Google Cloud Storage API 额外访问这些对象。您可以使用 RESTful 接口或通过适用于 Google App Engine 应用程序的 Google Cloud Storage Python API 与 Google Cloud Storage API 进行交互,这在本文档中进行了讨论。

    关于定价:
    免费配额:5GB 存储空间(非常适合您的情况)
    付费配额:前 0 - 1TB $0.085/GB/月

    Introducing Google Cloud Storage

    【讨论】:

    • GCS 无法解决备份 AppEngine 数据存储区的问题。仍然需要查询整个数据库,然后将其推送到 GCS。
    • 您可以按照 Nick Johnson 的建议在这里使用 MapReduce stackoverflow.com/questions/7747453/…
    • 那么,GCS 是公认的成本问题解决方案,还是有其他可用的解决方案?
    【解决方案2】:

    根据GAE billing doc,您应该支付以下费用:

    数据存储:

    1 query = 2 read operations
    1 Mio entity queries = 2 Mio read operations
    100k read operations = $0.07
    
    Cost: 1M entities queried = $0.14 
    

    带宽:

    Price: $0.12 / Gb  
    Cost: 1Gb data with 50% overhead (network + metadata) = 1.5Gb x $0.12 = $0.18
    

    后端实例:

    Price: $0.08/h smallest instance
    Cost: 1h = $0.08
    

    总费用:$0.40

    bulkloader 似乎效率很低。您可能会重新考虑编写自己的备份代码。如果您只有一种没有关系的实体,这应该很容易。

    【讨论】:

    • 我提到我产生的成本是当我使用他们自己的管理工具将数据写回备份数据存储时,因此写入成本将适用于这种情况,而不是读取成本。
    【解决方案3】:

    我想说您的大部分成本是用于将数据写入另一个应用程序,而不是从您的应用程序读取数据。根据您的数据模型,将实体写入数据存储区的成本很容易达到最初读取它的成本的 100 倍。

    由于备份很少被恢复,我建议您将备份存储在 Blobstore 中。将要备份的实体腌制为字节流,将流拆分为每个 1 MB 的块,然后 write them all into the blobstore

    将数据写入 blobstore 仍会花费您的数据存储写入费用,但根据 this StackOverflow answer,您似乎只需为每个存储 blobstore 实体支付 12 次写入操作。假设每个腌制实体的大小约为 2KB,并且每个实体每次存储到数据存储区需要 100 次写入操作,这表示写入成本节省了约 99.97%。

    【讨论】:

      【解决方案4】:

      打赌你现在已经找到了解决方案 Yasser,但对于其他从 Google 到这里的人来说,这是一个更新的答案:

      应用商店管理员中的备份选项已升级为支持数据存储和云存储。它还使用 mapreduce 进行备份,这使得系统上的查询更加轻松。

      【讨论】:

        猜你喜欢
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 2013-03-02
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多