15
8 rules to build web app on top of Google AppEngine effectively Lessons learned www.comvai.com

Google app engine example apps

Embed Size (px)

DESCRIPTION

Google app engine example apps

Citation preview

Page 1: Google app engine example apps

8 rules to build web app on top of Google AppEngine effectively

Lessons learned

www.comvai.com

Page 2: Google app engine example apps

Google App Engine

•Keep in mind Google AppEngine supports subset of Java EE specifications. Check at http://code.google.com/p/googleappengine/wiki/WillItPlayInJava

www.comvai.com

Page 3: Google app engine example apps

1. Design Data model as simple as possible

• The App Engine Datastore is not traditional relational SQL database and there are several important differences.

• AppEngine datastore is schemaless. Entities of the same kind can have different properties. The application itself is responsible for ensuring that entities conform to it.

• If you want to migrate your existing data model to App Engine you will probably need it to redesign.

• Data-model consistency will be split to the data-model and application.

• Check app engine datastore limitations to understand it. It gives you better overview regarding your future data-model design. http://code.google.com/appengine/articles/datastore/overview.html

www.comvai.com

Page 4: Google app engine example apps

How to

• Use recommended High Replication Datastore HRD.

• Use Objectify with JPA annotations over built-in JPA or JDO.

• Prefer to use unowned relationships between entities.

• Forget about count entities over filtered query result. Design your UI so that count is not being required.

• If you need statistic calculations, do it on entity update.

• Note: Building data model on top of built-in either JPA or JDO doesn't guarantee that application will be vendor independent because of different behavior of AppEngine datastore in some cases. Even it doesn't mean that's not possible to do so just requires understanding of AppEngine datastore behavior.

www.comvai.com

Page 5: Google app engine example apps

2. Handle your data model via non default version of your GAE

app

• The AppEngine allows you to deploy more than one non default version of your application. Deploy specifically designed application to perform update of your data model only as a non default version to be independent from your main application release cycle.

www.comvai.com

Page 6: Google app engine example apps

3. Price shields tips

• Use Appstats out of the box tool to detect datastore bottleneck. Just plug in. It helps you to find the hidden unnecessary datastore operations that are dragging you down.

• Use memcache. Datastore operations costs money and caching of "static" data could save you from using unnecessary datastore operations.

• Use as many static files as possible. Static files are handled with high performance static front-end servers (CDN) which are highly optimized for this type of content.

• See more http://www.gregtracy.com/revisiting-google-app-engines-pricing-changes

www.comvai.com

Page 7: Google app engine example apps

4. Improve cold startup time

• AppEngine instances starts quite often thus cold startup time (known as well as warmup request, loading request) is more important than in traditional Java EE application. Good startup time improves user experience.

• Minimize number of your application java library dependencies as much as possible. Make sure if all your libs are really needed. Otherwise it will slow your cold startup time down.

• Don't use JSP if you are already using another Frontend framework

• Using JSPs will add additional libraries into your lib directory that are used for processing of JSP. http://www.listry.com/blog/2010/03/google-app-engine-cold-start-tip-dont

• Use Objectify over built-in JPA or JDO. http://www.listry.com/blog/2010/03/google-app-engine-cold-start-guide-for

www.comvai.com

Page 8: Google app engine example apps

5. Prefer Google Guice as DI framework

• It's simple, small in size and powerful library and you probably won't need more.

www.comvai.com

Page 9: Google app engine example apps

6. Use GWT for your desktop like web app

• GWT together with GAE offers lot of built-in technics to improve your web app performance. Built-in features coming as advice from the book High Performance Web Sites.

• It's better to have only one framework for the UI even it means to build some components yourself. Among other things it means less dependencies and simplified upgrade process.

www.comvai.com

Page 10: Google app engine example apps

How to GWT

• Use built-in optimization technics with help of GWT's ClientBundles.

• ClientBundles and ImageResource makes using images more efficient.

• CssResource for CSS minification, CSS image strips and much more, see docs for ClientBundles (DataResource, TextResource, ExternalTextResource).

• Switch on minification and obfuscation of the Java-JavaScript compiler.

www.comvai.com

Page 11: Google app engine example apps

How to GAE

• Content Delivery Network CDN

• Gzip compression

• Memcache

www.comvai.com

Page 12: Google app engine example apps

7. Use GWT MVP pattern

• It's not easy to work with but worth of time. GWT has built-in support for MVP pattern.

www.comvai.com

Page 13: Google app engine example apps

Benefits

• Well suited for large scale application.

• Separation of functionality into components. Helps simplify UI unit testing.

• Built-in browser history management. MVP is not concerned with browser history management, but Activities and Places may be used very well with MVP development.

• Built-in event bus as a central point for app events.

• Caching all of your code books via GWT event bus as a central pipe to go to the backend.

www.comvai.com

Page 14: Google app engine example apps

8. Use Apache Wicket for website

• The component based web framework. Version 1.5 or higher optimized for Google AppEngine

• In Java ecosystem there is a lot of front-end frameworks thus to choose the right one depends on many varying factors. We like Apache Wicket because it's Java, feature rich component-oriented framework with good API. As version 1.5 it very well operates on App Engine. So it's up to you and your requirements but ones Apache Wicket is good fit for you we recommend it.

• Add wicketstuff-gae-initializer dependency along side with wicket core dependencies

• Alternative Play framework as it has specific module for App Engine.

www.comvai.com

Page 15: Google app engine example apps

• Visit http://www.comvai.com/google-app-engine-development and register yourself to get development of your Google AppEngine project's Proof of Concept for free.

• Validate suitability of your project to be built on top of Google App Engine.

www.comvai.com