`

Google App Engine上Java应用性能优化经验谈

阅读更多

使用 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 使用也是非常关键的。

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

分享到:
评论

相关推荐

    appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)

    标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...

    appengine-java-sdk

    5. **性能监控**:AppEngine提供了详细的性能监控工具,包括请求统计、内存使用情况、CPU使用率等,帮助开发者优化应用性能。 6. **版本控制**:SDK支持多版本部署,可以同时运行不同版本的应用,方便对比和回滚。 ...

    google app Engine for java中文api

    Google App Engine for Java为Java开发者提供了一个全面而强大的云计算平台,不仅支持常见的Java Web开发技术,还引入了一系列创新特性,如自动伸缩、易于部署等,极大地降低了构建高性能Web应用的技术门槛。...

    Google App Engine for Java 中文指南

    Google App Engine for Java 是一个平台,允许开发者使用Java语言构建并托管网络应用程序,该平台运行在Google的强大可扩展基础设施上。这个平台的核心特性是它的Java运行时环境,它基于Java 6虚拟机(JVM),并且...

    appengine-java-sdk-1.8.7.zip

    Java版本的App Engine,即我们讨论的"appengine-java-sdk-1.8.7.zip",是Google专门为Java开发者提供的工具包,用于在GAE上开发应用。 **主要组件和功能** 1. **SDK(Software Development Kit)**: SDK包含了开发...

    Google App Engine for Java快速入门指南v1.2.0

    通过这份Google App Engine for Java 快速入门指南 v1.2.0,开发者不仅可以了解到如何构建和部署基于Java的应用程序,还可以学习到如何利用Eclipse for App Engine 进行高效的开发工作。无论是初学者还是经验丰富的...

    Google App Engine for Java 快速使用指南 - 中国科学技术大学

    Google App Engine 是一项由 Google 提供的云计算平台服务,允许开发者在其基础设施上运行网络应用程序。该平台简化了应用程序的开发、测试和部署流程,特别适用于那些随着用户量和数据存储需求增长而需要动态扩展的...

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

    《Programming Google App Engine with Java》不仅是一本实用的技术指南,也是想要深入了解Google App Engine并利用其构建高性能Java应用程序的开发者的必备参考书。通过本书的学习,开发者可以掌握从应用设计、数据...

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

    Google App Engine(简称GAE)是由Google公司提供的一个无服务器(serverless)的云计算平台,该平台允许开发者快速构建、部署以及管理应用。开发者无需关心服务器的配置和维护,只需关注应用的开发。GAE支持多种...

    Google Appengine应用文档

    本文档将详细讲解如何在 Google App Engine 上安装和部署应用,特别是对于初学者来说,这是一个非常实用的入门级教程。 首先,安装 Google App Engine 插件是开发的第一步。以 MyEclipse 7.5 为例,你需要通过插件...

    appengine-java-sdk-1.5.0.1.zip_JDK1.5.0.1_appengine-java-s_appen

    描述中提到的"Google开发环境JDK,用于Goolge App Engine应用开发包"进一步确认了这个SDK是与Java开发紧密相关的,特别是对于在Google App Engine上构建应用。JDK(Java Development Kit)是Java编程的基础,包含...

    google appengine sdk for java

    The App Engine SDK for Java includes a local development server as well as the tooling for deploying and managing your applications in App Engine. By downloading, you agree to be bound by the Terms ...

    应用在 Google App Engine 的一个Java 实例

    一个应该在Google App Engine 上的一个实例。用Java语言编写,里面包含源代码。致以Google App Engine是什么,请Google。 实例部署的地址是:http://hellojavaweb.appspot.com

    Google App Engine1.3.0 java sdk 第一部分

    Google App Engine(GAE)是谷歌提供的一项云计算服务,允许开发者在谷歌的基础设施上运行自己的应用程序。它为开发者提供了无服务器(Serverless)的环境,可以托管Web应用,并且支持多种编程语言,包括Java。在本...

    Google App Engine 入门教程

    综上所述,入门教程涉及到了安装与配置Eclipse开发环境、安装Google App Engine插件、创建和配置Web应用项目以及编译时的Java版本兼容性问题,这些知识点对于想要开始使用Google App Engine开发Web应用的开发者来说...

    Begin Java Google APP Engine

    《 Beginning Java™ Google App Engine》是一本面向初学者至中级开发者的专业指南,旨在教你如何使用Java技术在Google App Engine上构建云端应用。Google App Engine是一个强大的云计算平台,它为Java开发者提供了...

    我的第一个Google App Engine 应用 Java 的,庆祝下

    标题 "我的第一个Google App Engine 应用 Java 的,庆祝下" 暗示了这是一个关于使用Java语言在Google App Engine平台上开发的初尝试项目。Google App Engine是一个由Google提供的云计算平台,它允许开发者构建、部署...

    Google App Engine Documentation

    Google App Engine 是谷歌提供的一项平台即服务(PaaS)产品,允许开发者构建并运行Web应用程序。这个平台的主要特点是它提供了全面的基础设施,包括计算、存储和数据库服务,开发者只需要关注应用逻辑,而无需管理...

Global site tag (gtag.js) - Google Analytics