本文是作者开发 GAE 应用的性能优化经验谈,主要从框架、缓存、异步调用等方面介绍了如何进行高性能 GAE 应用的设计及优化。

ToC

使用 Memcache 进行缓存

HTML 页面

数据查询结果

Memcache 使用注意

减少内存使用

尽量避免使用框架

无状态设计

异步 APIs

其他

静态资源

实体组

域名解析

实现逻辑

参考资料

使用 Memcache 进行缓存
使用缓存主要是为了提高响应速度。

HTML 页面
页面可以根据功能来划分进行缓存,请参考:应用 memcached 提升站点性能——减少读自数据库和数据源 。

当然,也可以缓存整个页面,简化缓存及模板处理逻辑。

数据查询结果
如果你是直接使用 GAE DatastoreService 来进行数据查询,那么有必要缓存查询结果:

•单一实体
根据唯一标识进行查询的实体。
•集合实体
根据组合查询条件查询的实体,例如分页结果。
Memcache 使用注意
•调用 GAE Memcache 也是会消耗一定 CPU 的(需要进行序列化/反序列化)
•使用 GAE MemcaheService#clearAll() 方法会清除所有命名空间的缓存
减少内存使用
减少内存使用主要是为了充分利用有限的 Memcache 服务,降低实例启动时间。

尽量避免使用框架
虽然目前一些流行的 Java Web 框架(Spring、Struts、Play!、etc)是可以运行在 GAE 上的,但如果你想尽量免费地使用 GAE,

那最好还是不要使用现有框架,因为,大多数框架:

•不是专门为 GAE 设计的
•比较消耗内存
•将延长启动时间
另外,关于 JSP 与其他模板引擎的优劣取舍问题这里不讨论。目前经测试无页面缓冲情况下,FreeMarker 与 JSP 性能非常接近。

无状态设计
有状态的设计是比较吃内存的,服务端最好少使用有状态的模型,除非要处理复杂的业务逻辑(例如多步表单、高级搜索)。

异步 APIs
GAE 提供了数据存取、HTTP 请求等 APIs 的异步版本。但需要注意:

•目前 GAE/J(1.4.0)中的 Query 是没有异步 APIs 的
AsyncDatastoreService 或者 DatastoreService 上使用 PreparedQuery.asIterable() 与 PreparedQuery.asIterator()
效果一样,都是调用了就返回,迭代时才真正去获取数据
•阻塞(同步)点
异步 APIs 调用后的代码块中要注意在哪个点进行同步,过早进行同步将降低异步 APIs 带来的优势。
•调用异步 APIs 与调用同步 APIs 消耗同样的配额

其他
静态资源
仔细配置 appengine-web.xml 中 <static-files> 元素,这些资源将从单独的 Google 服务器、缓存获取,并不占用

应用服务器配额。

实体组
实体组是具有一定逻辑关系的、保存在同一 GAE 云存储区域的实体集。事务操作只能针对同一实体组的实体操作。

实体组对性能有一定影响(目前尚未实践证明影响有多大),但请尽量保持实体组的最小化。

域名解析
GAE 送的二级域名(*.appspot.com)在国内访问非常不稳定,所以最好绑定绑定自己的域名。

但绑定域名时需要配置 GHS IP,目前在国内已经没有 IP 可用。进一步,需要配置反向代理来进行请求代理。

在服务端性能优化后需要选择一个速度快、稳定的反向代理。不然,辛辛苦苦在服务端优化降低了几百 ms 的处理时间,

结果全耗在路由、丢包上了 :-(

如果免费的反向代理实在不能够满足性能需要,只能自己打个付费的了,或者等到 GHS 可用。。。。

实现逻辑
另外,目前 GAE 给的免费 CPU 配额比较少,所以优化实现逻辑以减少 CPU、APIs 使用也是非常关键的。

写代码时应该时刻注意代码的逻辑是否足够简洁,能一次性获取的参数就别重复获取,获取后以方法参数的形式进行传递。

参考资料
•App Engine Java Overview
•Best practices for writing scalable applications
•GAE SDK Javadoc
•GAE 数据存储——事务
•GAE/Java 应用框架——B3log Latke

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/DL88250/archive/2011/02/08/6174582.aspx

转载于:https://www.cnblogs.com/mengheyun/archive/2011/02/10/1951021.html

GAE Java 应用性能优化相关推荐

  1. java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)

    原标题:干货收藏 | 35个Java 代码性能优化总结(上) 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这 ...

  2. Java中性能优化的35种方法汇总

    原文地址:http://www.jb51.net/article/102831.htm 前言 对程序员们来说,代码优化是一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于 ...

  3. [译]GC专家系列5-Java应用性能优化的原则

    原文链接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-performance-tuning/ ...

  4. 44个Java代码性能优化总结

    转载自 44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是 ...

  5. java常见性能优化_十大最常见的Java性能问题

    java常见性能优化 Java性能是所有Java应用程序开发人员都关心的问题,因为快速使应用程序与使其正常运行同等重要. 史蒂文·海恩斯(Steven Haines)使用他在Java性能问题上的个人经 ...

  6. Java 程序性能优化《第一章》Java性能调优概述 1.4小结

    Java 程序性能优化<第一章>1.4小结 通过本章的学习,读者应该了解性能的基本概念及其常用的参考指标.此外,本章还较为详细的介绍了与性能调优相关的两个重要理论--木桶原理以及Amdah ...

  7. 【Java】44个Java代码性能优化总结

    1.概述 转载:44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最 ...

  8. Java程序性能优化——设计优化

    原文出自:http://blog.csdn.net/anxpp/article/details/51914119,转载请注明出处,谢谢! 1.前言 OK,之前写了一篇文章:"23种设计模式介 ...

  9. java程序性能优化(实例)

    java程序性能优化(实例) 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: i ...

最新文章

  1. m_Orchestrate learning system---七、如何快速学好前端
  2. Matlab与线性代数 -- 数组的乘法与除法
  3. MMD_3b_StreamAlgorithms
  4. oc 自定义导航栏背景
  5. FJ集团企业级邮件服务器构建方案
  6. SQLSERVER中的自旋锁
  7. DButils工具使用笔记以及常见问题总结
  8. java reducebykey_Spark入门(五)--Spark的reduce和reduceByKey
  9. Bootstrap 条纹进度条
  10. 5个月内要完成的东西
  11. win7下程序运行权限问题解决方案
  12. [Ubuntu] 文件权限
  13. html写彩虹,HTML5 Canvas彩虹粒子组成的动画文本
  14. 使用 charles 进行抓包
  15. 产品的国内版和国际版背后的思考
  16. 微星MSI-GP65 Ubuntu Linux驱动 ALC 1220声卡
  17. 复数Complex类
  18. android_驱动_qcom_【高通SDM660平台】(4) --- Camera Init 初始化流程
  19. 验证随机数案例java_Java实现随机验证码功能实例代码
  20. 使用纯 python 实现 Instruments 协议,跨平台 (win,mac,linux) 获取 iOS 性能数据

热门文章

  1. matlab对服务器性能要求,服务器运行matlab
  2. 理性预测,未来音视频开发前景将是这般光景
  3. 【加密与解密(第四版)】第一章笔记
  4. 保护电脑私密资源,隐藏你的小秘密
  5. win10安装ensp启动40_升级win10后 eNSP AR启动失败错误代码40的终极思路和解决办法...
  6. 基于sys文件系统的LED驱动的移植【原创】
  7. 大整数加法(详细讲解C++)
  8. 电商类app商品详情参数选择联动的实现
  9. 「镁客·请讲」狗尾草邱楠:做更好的AI虚拟生命
  10. 测试计划的目的是什么?如何做好测试计划?