2011 june-kuala-lumpur-gtug-hackathon

Post on 08-May-2015

1.593 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slides for my presentation at the GTUG hackathon in Kuala Lum

TRANSCRIPT

Ikai LanKuala Lumpur, GTUG Hackathon

Twitter: @ikaiJune 18, 2011

Google App Engine

Saturday, June 18, 2011

About the speaker

• Developer Relations at Google based out of San Francisco, CA

• Primarily work in Java and Python nowadays; lots of experience with Ruby, JavaScript, PHP <5.3

• Focus: Cloud products

• Twitter: @ikai

Saturday, June 18, 2011

Agenda

• What is Google App Engine?

• Various features of GAE

• How to get started

• Introduction to Go

• Important tools + some tips

Saturday, June 18, 2011

Infrastructure

Platform

Software

Source: Gartner AADI Summit Dec 2009

Saturday, June 18, 2011

Infrastructure

Platform

Software

Source: Gartner AADI Summit Dec 2009

Saturday, June 18, 2011

Infrastructure

Platform

Software

Source: Gartner AADI Summit Dec 2009

Saturday, June 18, 2011

Infrastructure

Platform

Software

Source: Gartner AADI Summit Dec 2009

Saturday, June 18, 2011

• Easy to build

• Easy to manage

• Easy to scale

Saturday, June 18, 2011

“We wear pagers soyou don’t have to”

Saturday, June 18, 2011

Saturday, June 18, 2011

>130K Apps

>90K Developers

>700M daily pageviews

Saturday, June 18, 2011

SDK & “The Cloud”

Hardware

Networking

Operating system

Application runtime

Java, Python, Go

Static file serving

20

Saturday, June 18, 2011

• Write code locally

• Test, push to Google Servers

• Administer via a web interface - http://appengine.google.com

Development Cycle

Saturday, June 18, 2011

Admin Console

Saturday, June 18, 2011

Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.Go Gopher

Saturday, June 18, 2011

• Java

• Scala

• JRuby (Ruby)

• Groovy

• Quercus (PHP)

• Rhino (JavaScript)

• Jython (Python)

• Clojure

Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.

Extended Language support through JVM

Saturday, June 18, 2011

BlobstoreImages

Mail XMPP Task Queue

Memcache Datastore URL Fetch

User Service

Core APIs

Saturday, June 18, 2011

• Strongly consistent, multi-datastore, multi-data center serving solution

• Write once, have your data be available in a highly consistent manner

•No data loss, no datastore outages

High Replication

Saturday, June 18, 2011

Other APIs

• High performance image serving

• App Engine Map Reduce

• Prospective Search API

• Pipeline API

• OAuth provider

Saturday, June 18, 2011

Prospective Search

• Matches a high rate of incoming documents

• 100,000 matches a second

• Think: How might we build something like Google Alerts?

• http://code.google.com/appengine/docs/python/prospectivesearch/

Saturday, June 18, 2011

A basic Python app

• 2 files: app.yaml and main.py

• Easier to use when Python SDK is in your system path

• Start server with dev_appserver.py

• Deploy via appcfg.py

Saturday, June 18, 2011

app.yaml

Saturday, June 18, 2011

main.py

Saturday, June 18, 2011

Getting started with Java

• Servlets API

• Google Plugin for Eclipse will generate a skeleton project: http://code.google.com/eclipse/beta/docs/download.html

Saturday, June 18, 2011

Go: why I like it

• “The next version of C, brought to you by the guys who didn’t bring you C++”

• Modern, type safe compiled language (stdlib includes: json parsing, web server)

• Functions as first class objects

• Concurrency baked in via goroutines and channels

• Very fast compilation times

Saturday, June 18, 2011

Flexible interfaces// This is an interface declarationtype myInterface interface { set(i int)}

// This is a Type declaration. Note that it is a type, not a classtype myType struct { i int }

// This is how we define a function where myType is a receiver// With an instance of myType we can call myType.set(123)func (p *myType) set(i int) { p.i = i }

// Because myType defines a function with the signature set(int i) method, // we can use it anywhere myInterface is accepted!func setToThousand(x myInterface) { myInterface.set(1000)}

Saturday, June 18, 2011

First class functionspackage main import "fmt"

// Make a function that returns a new functionfunc makeAdd(increment int) (counter func(int) int) { return func(v int) int { return v + increment; } }

func main() { fmt.Printf("value of makeAdd(100)(1) is %v\n", makeAdd(100)(1)); fmt.Printf("value of makeAdd(200)(2) is %v\n", makeAdd(200)(2)); }

// Outputs:// value of makeAdd(100)(1) is 101// value of makeAdd(200)(2) is 202

Saturday, June 18, 2011

Goroutines and Channels

package main import ( "fmt" "time")

func doLotsOfWork(until int, ch chan int) { c := 0 for i := 0; i < until; i++ { c += i time.Sleep(1000) } ch <- c }

func main() { ch := make(chan int) // First the work off into the background go doLotsOfWork(5, ch) // Do more work here while we wait for this process to complete // Block until doLotsOfWork sends data back on this channel i := <- ch fmt.Printf("Final value: %v\n", i)}

Saturday, June 18, 2011

It runs on App Engine!

• Currently requires whitelisting

• Experimental status

• Goroutines allow for concurrency within request; concurrent requests coming

• Demo app: http://moustach-io.appspot.com/

• Source: https://code.google.com/p/appengine-go/source/browse/example/

Saturday, June 18, 2011

Mustachio

Saturday, June 18, 2011

General tips

• The datastore is built on top of BigTable. It is non-relational!

• Be aware of limits: 30 second requests, 10 minute tasks queues/cron jobs, whitelisted classes

• Python 2.5 compatible (but can use 2.6 or 2.7 locally)

Saturday, June 18, 2011

Java tips

• Use low-level datastore API or third party API: http://code.google.com/p/objectify-appengine/

• Start with servlets API - will have to do some work to make your favorite framework work. Slim3 is a good GAE specific framework

Saturday, June 18, 2011

Summary

• Hopefully people here are interested in hacking on App Engine

• Java, Python and Go

• Ask me if you have general questions, I will be around all weekend

Saturday, June 18, 2011

Questions?

• Twitter: @ikai

• App Engine: http://code.google.com/appengine

Saturday, June 18, 2011

top related