【问题标题】:GAE/J : Development and Production EnvironmentGAE/J : 开发和生产环境
【发布时间】:2011-06-19 23:43:09
【问题描述】:

开发和生产环境之间的 GAE/J 主要区别是什么。

  • 生产时应重新检查哪些内容?
  • 我应该期待什么样的数据存储差异?

【问题讨论】:

    标签: java google-app-engine development-environment production-environment


    【解决方案1】:

    开发性能(可以理解)与生产绝对无关。冷启动不是开发中的问题。

    在开发服务器上存储特别大量的数据可能会出现问题,您可能必须将开发服务器的数据存储切换到 sqlite。

    使用 javamail 发送电子邮件在开发中不可测试。

    oauth 和 users API 仅在开发中实现最低限度。

    Cron 作业不会在开发时执行,必须手动触发。

    我很确定爆炸性索引问题不会在开发过程中对您造成影响,上传到生产环境后会遇到一个有趣的问题。

    我有完全可以接受的 JDO 代码,可以在生产环境中的 dev throw 上运行 (persistall())。单独持久化每个对象然后工作。

    根据我的经验,我相信还有更多。

    【讨论】:

    • 与您的问题不完全相关,但请注意:JDO 可以针对结果很简单的问题提供一些极其神秘的错误消息。
    • 我很伤心,我完全明白你的意思!
    【解决方案2】:

    开发环境和生产环境之间存在许多差异,您应该在设计应用程序之前了解所有这些差异;与分布式生产环境的复杂性/令人敬畏相比,开发服务器是一个“玩具”(没有索引,单线程)是没有用的。

    以下是您在生产环境中会发现的一些问题:

    1. 截止日期(每个请求 30 秒,任务队列 10 分钟,Urlfetch 最多 10 秒)
    2. 更新实体时发生争用
    3. 尝试存储或传递太大的东西时对象太大的异常
    4. 环境的分布式性质的瞬态错误(超时)

    一般来说,每当 API 上有记录的约束(超时配额)时,开发环境都会放宽相同的约束;准备好编写大量防御性代码。

    Viceversa,开发服务器,即使启用 Sqlite,在尝试存储/更新数千个实体时也存在严重限制;生产服务器是一个强大的野兽。

    【讨论】:

      【解决方案3】:
      • 开发环境是单线程的
      • 没有请求超时
      • 没有exploding index,事实上开发环境根本不使用索引进行查询
      • 没有异步 URLFetch
      • 没有异步数据存储
      • 明显没有请求统计/日志搜索界面
      • 索引构建没有等待时间
      • 没有数据存储超时
      • 不减capabilities

      【讨论】:

        【解决方案4】:

        除了上面提到的那些,我还发现了另一个不同之处。在开发环境中,您可以将不可序列化的类和对象存储在会话属性中。但请注意仅在生产环境中将可序列化的类存储在会话属性中,否则会出现异常。

        【讨论】:

          猜你喜欢
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-27
          • 2013-07-14
          • 2012-05-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多