`

GAE Java 应用性能优化

 
阅读更多

GAE Java 应用性能优化

转载请保留作者信息:

作者:88250

日期:2011 年 2 月 8 日

本文是作者开发 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 使用也是非常关键的。

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

参考资料

本文是使用 B3log Solo简约设计の艺术 进行同步发布的
分享到:
评论

相关推荐

    GAE for java

    这是开发GAE for Java应用的基础。 2. **项目创建**:通过Eclipse新建一个GAE for Java项目。在创建过程中,可以选择基于Java Servlet API或GWT(Google Web Toolkit)。 3. **应用开发**:根据项目需求,选择合适的...

    基于GAE的Demo

    通过学习和分析这个Demo,开发者可以了解如何在GAE上构建一个完整的Java Web应用,掌握Struts2、Spring和Tiles的整合使用,以及如何利用GAE的特性优化应用性能和可扩展性。这不仅有助于提升个人技能,也有助于团队在...

    appengine-java-sdk-1.9.24

    每个新版本通常会包含 bug 修复、性能优化以及新增或更新的功能。对于这个特定版本,可能包括了对先前版本中已知问题的修复,或者引入了新的 API 或改进的开发工具。 **4. 开发流程** 使用 GAE Java SDK,开发流程...

    GAE blog安装

    标题“GAE blog安装”指的是在...总的来说,"GAE blog安装"涵盖了从准备环境、编写代码、配置应用、部署到GAE,以及后续的测试、监控和优化等多个IT领域的知识。这个过程需要对Web开发、云服务和项目管理有深入理解。

    spring+gae+hibernate

    Spring是一个开源的Java企业级应用开发框架,它提供了一个全面的编程和配置模型,用于简化Java应用程序的创建。Spring的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...

    关于GAE的教程、工具与文档(建站)

    9. **监控与日志**:GAE提供了详细的监控工具,可以跟踪应用的性能指标,如请求率、响应时间和错误率。日志服务则帮助开发者追踪应用程序的行为和诊断问题。 10. **弹性扩展**:GAE会根据应用的负载自动调整实例...

    gae-java-first:Java 中的 Google Appengine 示例

    - **Memcache**:提供高速缓存服务,可提升应用性能。 - **Task Queue**:处理异步任务,例如发送电子邮件或执行后台处理。 - **UserService**:用于用户身份验证和授权,简化了Google账户登录流程。 - **URL ...

    Google App Engine1.3.0 java sdk 第一部分

    这个1.3.0版本可能包含了对先前版本的改进和新功能,比如性能优化或新的API支持。开发者可以使用SDK来构建、测试和部署Java应用程序,而无需考虑底层硬件或系统管理。 **Java SDK的组成部分** 1. **开发服务器**:...

    GAE上groovy初尝试

    7. **问题与解决**:在GAE上使用Groovy可能会遇到兼容性问题、性能优化挑战、依赖管理问题等,博主可能分享了如何解决这些问题的经验和技巧。 8. **源码分析**:通过分析“gaedemo”项目的源码,读者可以学习到如何...

    EGL扩展GAE示例代码

    7. **性能优化**:由于GAE的特性,EGL代码可能需要特别优化以适应GAE的自动缩放和内存限制。 8. **部署和调试**:EGL扩展可能包含了对GAE部署流程的支持,以及在GAE环境下进行远程调试的工具。 项目中的...

    Apress - Beginning Java Google App Engine(Java)(Dec 2009).pdf

    Google App Engine (GAE) 是一个强大的云服务平台,允许开发者使用多种语言(包括 Java)创建高度可扩展的 Web 应用程序。本书主要聚焦于 Java 版本的 GAE。 - **核心组件:**书中详细介绍了 GAE 的 SDK(软件开发...

    Google App Engine Java and GWT Application Development

    4. **性能优化**:通过使用缓存、CDN(内容分发网络)以及对代码进行优化,可以显著提高应用程序的响应速度和用户体验。 5. **监控与调试**:GAE提供了详细的监控和日志记录功能,帮助开发者及时发现并解决应用运行...

    latke-gae-1.0.10.zip

    总之,"Latke-GAE-1.0.10"和"MicroORM"是Android开发中的两个实用工具,它们分别解决了云端服务构建和客户端数据操作的问题,对于提升开发效率和优化应用性能具有显著作用。开源社区的力量使得这样的优秀项目得以...

    GAE扩展程序

    7. **部署与监控**:学习如何将扩展程序部署到GAE生产环境,以及如何使用GAE提供的监控工具(如日志、性能指标)来确保应用的健康运行。 通过这些知识点的学习和实践,你将能够熟练地开发和维护GAE扩展程序,充分...

    GAE中整合SSH2的空项目备份

    5. **性能优化**:由于GAE的资源限制,需要考虑如何高效地处理SSH请求,避免过度消耗资源。 综上所述,这个项目可能是一个教育性质的实践,展示了如何在Google App Engine上搭建一个模拟的SSH2服务,使用Spring框架...

    Programming Google App Engine with Java-2015年英文原版,0积分

    - **性能优化**: 分析如何优化应用程序的性能,以确保其在面对大量用户时仍能保持高效运行。 #### 五、读者反馈与评价 根据书籍描述中的推荐语可以看出,《Programming Google App Engine with Java》受到了业界...

    云端代码Google App Engine编程指南 高清带书签

    - 性能优化:介绍如何优化GAE应用的性能,包括代码优化、资源管理等。 - 调试与监控:讲述如何使用GAE提供的工具进行应用的调试和监控。 - 部署和扩展:介绍如何将应用部署到云端,并在需要时进行扩展。 - 最佳实践...

    gae:sunguoqiang

    8. **性能优化**:包括前端的加载速度优化、后端的代码性能优化、缓存策略以及GAE特定的性能优化技巧。 9. **安全性**:学习如何保护应用免受常见攻击,如XSS、CSRF,以及如何使用HTTPS确保数据传输安全。 10. **...

    部署一个简单GWT应用到Google App Engine

    **Google Web Toolkit (GWT)** 是一个开放源代码的Java框架,用于构建和优化复杂的JavaScript前端应用程序。开发者可以使用Java语言编写客户端代码,然后GWT编译器会将这些Java代码转换为高效的JavaScript和HTML,...

Global site tag (gtag.js) - Google Analytics