Upload
ikailan
View
1.864
Download
0
Embed Size (px)
DESCRIPTION
Slides for my talk at the Singapore GTUG in June 2011. Includes a quick program update as well as an introduction to Golang.
Citation preview
Ikai Lan - @ikaiSingapore GTUG
June 12, 2011
GAE Program Update
Monday, June 13, 2011
About the speaker
• Developer Relations at Google based out of San Francisco, CA
• Software Engineer at heart
• Singapore, Kuala Lumpur and Taipei on this trip
• Twitter: @ikai
Monday, June 13, 2011
Agenda
• What is Google App Engine?
• What’s new in App Engine?
• What’s coming in App Engine?
• Go on App Engine
Monday, June 13, 2011
3
What iscloud
computing?
Monday, June 13, 2011
IaaS
APaaS
SaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
IaaS
APaaS
SaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
IaaS
APaaS
SaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
IaaS
APaaS
SaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
• Easy to build
• Easy to manage
• Easy to scale
Monday, June 13, 2011
“We wear pagers soyou don’t have to”
Monday, June 13, 2011
Monday, June 13, 2011
>130K Apps
>90K Developers
>700M daily pageviews
Monday, June 13, 2011
SDK & “The Cloud”
Hardware
Networking
Operating system
Application runtime
Java, Python
Static file serving
20
Monday, June 13, 2011
Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.Go Gopher
Monday, June 13, 2011
• Java
• Scala
• JRuby (Ruby)
• Groovy
• Quercus (PHP)
• Rhino (JavaScript)
• Jython (Python)
Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.
Extended Language support through JVM
Monday, June 13, 2011
The Go Gopher
(We’ll talk about this guy
in a bit)
Monday, June 13, 2011
BlobstoreImages
Mail XMPP Task Queue
Memcache Datastore URL Fetch
User Service
Core APIs
Monday, June 13, 2011
Apr 2008 Python launchMay 2008 Memcache, Images API
Jul 2008 Logs export
Aug 2008 Batch write/delete
Oct 2008 HTTPS support
Dec 2008 Status dashboard, quota details
Feb 2009 Billing, larger files
Apr 2009 Java launch, DB import, cron support, SDC
May 2009 Key-only queries
Jun 2009 Task queues
Aug 2009 Kindless queries
Sep 2009 XMPP
Oct 2009 Incoming email
Dec 2009 Blobstore
Feb 2010 Datastore cursors, Appstats, Async UrlFetch
Two+ years in review
Monday, June 13, 2011
Jun 2010 Python Precompilation, raised Task Queue limitsAug 2010 Multitenancy
Oct 2010 Datastore Admin, query improvements
Dec 2010 Always on, Channel API, Task queue out of labs
Jan 2011 High Replication Datastore, datastore copy
Feb 2011 XMPP Presence, programmatic Task Queue deletions
Mar 2011 Files API, Prospective Search, Testbed API
May 2011 Backends, Pull Queues, massive bugfix release
Mar 2010 Read policies, IPv6
May 2010 OpenID, OAuth, Bulkloader
Two+ years in review
Monday, June 13, 2011
App Engine Roadmap
http://code.google.com/appengine/docs/roadmap.html
• App Engine out of Preview• SSL access on custom domains• Full-text search over Datastore• Support for Python 2.7• Support for running MapReduce jobs across App Engine datasets• Bulk Datastore Import and Export tool• Improved monitoring and alerting of application serving• Logging system improvements to remove limits on size and storage• Integration with Google Storage for Developers
Monday, June 13, 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
Monday, June 13, 2011
Leaving preview ...
• Pricing changes towards a sustainable model
• Guarantee that Google is investing in long term future of App Engine
• Premium support available
Monday, June 13, 2011
• Go with most features intact on App Engine
• Goroutines
• Execution speed!
Go on App Engine
Monday, June 13, 2011
Why Go?
• Fast, modern language
• Strongly typed, very flexible interfaces
• Functions as first class objects
• Ridiculously fast compilation times
• Concurrency baked in
• Tooling
Monday, June 13, 2011
Fast, modern languages
• Standard library: JSON, websockets, web server; more
• Garbage collection
• Multiple return values
• Unicode
Monday, June 13, 2011
Strongly typed
• ... but feels like a dynamic languages
• // Combo statement - We can infer type here, so no Java style type declaration redundancy
s := “This is a String”
Monday, June 13, 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)}
Monday, June 13, 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
Monday, June 13, 2011
Concurrency baked in
• goroutines - prefix a go in front of a method and it will run concurrently! Similar to appending & in *nix systems
• channels - blocking or buffered queues for cross process communication
Monday, June 13, 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)}
Monday, June 13, 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/
Monday, June 13, 2011
Mustachio
Monday, June 13, 2011
Summary
• Lots has been going on with App Engine!
• Lots more on the way
• Go (golang.org) - worth a look
Monday, June 13, 2011