Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure

2,633 views

Published on

In the modern web, the user rules. Nearly every successful web app has to worry about scaling to an exponentially growing user base and giving those users multiple ways of interacting with their data. Pamela Fox, Maps API Support Engineer & Developer advocate, provides an overview of two technologies - Google App Engine and the Google Data APIs - that aim to make web development and data portability easier.

Published in: Technology, News & Politics
  • Be the first to comment

Living in the Cloud: Hosting Data & Apps Using the Google Infrastructure

  1. 1. Living In The Cloud <ul><li>Hosting Data & Apps Using The Google Infrastructure </li></ul>
  2. 2. Introductions <ul><li>Pamela Fox USC/Google </li></ul>http://www.wordle.net/gallery/wrdl/710650/fkedupmonkey_tags
  3. 3. The Cloud!
  4. 4. Tonight’s Agenda <ul><li>Google Data APIs </li></ul>App Engine
  5. 5. Before the Cloud: Web Apps
  6. 6. After the Cloud: Web Apps
  7. 7. <ul><li>Viral Spread + User Edits = Scaling Nightmare </li></ul>Mo’ Users, Mo’ Problems
  8. 8. Old Architecture code/data
  9. 9. Old Architecture
  10. 10. Old Architecture
  11. 11. Old Architecture
  12. 12. Solution: App Engine
  13. 13. What Is App Engine? <ul><li>Lets you run your web application on top of Google’s infrastructure. </li></ul><ul><li>Servers </li></ul><ul><li>Network </li></ul><ul><li>Datastore </li></ul><ul><li>Backups </li></ul><ul><li>Pagers </li></ul>“ We wear pagers so you don’t have to.” — Guido van Rossum Scalable }
  14. 14. App Engine Architecture code data
  15. 15. Simple, Automatic Scaling
  16. 16. App Engine Components code data
  17. 17. Python
  18. 18. Data Store
  19. 19. Data Store db.GqlQuery(&quot;SELECT * FROM Shout &quot; &quot;WHERE who >= 'b ' AND who < ' c ' &quot; &quot;ORDER BY when DESC&quot;).fetch(100) query = Shout.all() query.order('-date') query.filter('who >=', 'b') query.filter('who <', ‘c') shouts = query.fetch(100)
  20. 20. Memcache
  21. 21. Users @gmail.com @myappsdomain.com
  22. 22. Demo <ul><li>Google App Engine </li></ul>
  23. 23. Before the Cloud: User Apps
  24. 24. After the Cloud: User Apps
  25. 25. <ul><li>Users demand ownership of their content. </li></ul><ul><li>Other sites want to access that content. </li></ul>Damn Needy Users
  26. 26. Solution: Google data APIs
  27. 27. How Do You Make Things Accessible? <ul><li>An application programming interface (API) is a set of functions, procedures, methods or classes that an operating system , library or service provides to support requests made by computer programs . </li></ul><ul><li>Source: Wikipedia </li></ul>A pplication P rogramming I nterface ( )
  28. 28. APIs <ul><li>RPC || REST </li></ul><ul><li>* SOAP </li></ul>
  29. 29. Remote Procedure Calls fooInstance->addNumbers(2, 3); <?xml version=&quot;1.0&quot;?><methodCall> <methodName>Foo.addNumbers</methodName> <params> <param> <value><int>2</int></value> <value><int>3</int></value> </param> </params></methodCall> fooInstance.addNumbers(2, 3); PHP XML (Network) C++
  30. 30. REST [Fielding 2000] Re presentational S tate T ransfer ( )
  31. 31. REST <ul><li>Fundamentals of REST: </li></ul>Application state and functionality is abstracted into discrete resources .
  32. 32. REST <ul><li>Fundamentals of REST: </li></ul>Resources are accessible via URLs . /blog/posts/1234
  33. 33. REST <ul><li>Fundamentals of REST: </li></ul>Resources share a uniform interface for transferring state . HTTP:// } GET POST PUT DELETE
  34. 34. RSS/ATOM Feed { Entries Example RSS feed.
  35. 35. ATOMPub Feed { Entries GET POST PUT DELETE
  36. 36. Google data APIs Protocol Feed Query { Entries GET POST PUT DELETE
  37. 37. The Google Data Protocol REST Google Data Protocol RSS 2.0 Architecture Syndication Updates AtomPub Atom
  38. 38. The Google Data Protocol RSS 2.0 Atom(Pub) Google Data Syndication Format ✓ ✓ ✓ Queries ✓ Updates ✓ ✓ Optimistic Concurrency ✓ Authentication ✓
  39. 39. The Google Data Protocol Over 15 APIs, 1 Protocol Many Uses
  40. 40. Case Study: CalGoo
  41. 41. The Google Data Protocol <ul><li>GET /myFeed </li></ul><ul><li>200 OK </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><feed xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><title>Foo</title> </li></ul><ul><li><updated>2006-01-23T16:25:00-08:00</updated> </li></ul><ul><li><id> http://www.example.com/myFeed </id> </li></ul><ul><li><author> </li></ul><ul><li><name>Jo March</name> </li></ul><ul><li></author> </li></ul><ul><li><link href=&quot;/myFeed&quot; rel=&quot;self&quot;/> </li></ul><ul><li></feed> </li></ul>Requesting a feed or resource
  42. 42. The Google Data Protocol <ul><li>POST /myFeed </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><entry xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><author> </li></ul><ul><li><name>Elizabeth Bennet</name> </li></ul><ul><li><email> [email_address] </email> </li></ul><ul><li></author> </li></ul><ul><li><title type=&quot;text&quot;>Entry 1</title> </li></ul><ul><li><content type=&quot;text&quot;>This is my entry</content> </li></ul><ul><li></entry> </li></ul>Creating a new resource
  43. 43. The Google Data Protocol <ul><li>201 CREATED </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><entry xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><id> http://www.example.com/id/1 </id> </li></ul><ul><li><link rel=&quot;edit&quot; href=&quot; http://example.com/myFeed/1/1/ &quot;/> </li></ul><ul><li><updated>2006-01-23T16:26:03-08:00</updated> </li></ul><ul><li><author> </li></ul><ul><li><name>Elizabeth Bennet</name> </li></ul><ul><li><email> [email_address] </email> </li></ul><ul><li></author> </li></ul><ul><li><title type=&quot;text&quot;>Entry 1</title> </li></ul><ul><li><content type=&quot;text&quot;>This is my entry</content> </li></ul><ul><li></entry> </li></ul>Creating a new resource
  44. 44. The Google Data Protocol <ul><li>PUT /myFeed/1/1/ </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><entry xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><id> http://www.example.com/id/1 </id> </li></ul><ul><li><link rel=&quot;edit&quot; href=&quot; http://example.com/myFeed/1/1/ &quot;/> </li></ul><ul><li><updated>2006-01-23T16:28:05-08:00</updated> </li></ul><ul><li><author> </li></ul><ul><li><name>Elizabeth Bennet</name> </li></ul><ul><li><email> [email_address] </email> </li></ul><ul><li></author> </li></ul><ul><li><title type=&quot;text&quot;>Entry 1</title> </li></ul><ul><li><content type=&quot;text&quot;>This is my first entry.</content> </li></ul><ul><li></entry> </li></ul>Updating an entry
  45. 45. The Google Data Protocol <ul><li>200 OK </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><entry xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><id> http://www.example.com/id/1 </id> </li></ul><ul><li><link rel=&quot;edit&quot; href=&quot; http://example.com/myFeed/1/2/ &quot;/> </li></ul><ul><li><updated>2006-01-23T16:28:05-08:00</updated> </li></ul><ul><li><author> </li></ul><ul><li><name>Elizabeth Bennet</name> </li></ul><ul><li><email> [email_address] </email> </li></ul><ul><li></author> </li></ul><ul><li><title type=&quot;text&quot;>Entry 1</title> </li></ul><ul><li><content type=&quot;text&quot;>This is my first entry.</content> </li></ul><ul><li></entry> </li></ul>Updating an entry
  46. 46. The Google Data Protocol <ul><li>DELETE /myFeed/1/2/ </li></ul><ul><li>200 OK </li></ul>Updating an entry
  47. 47. Demo <ul><li>Google Data CRUD </li></ul>
  48. 48. The Google Data Protocol <ul><li>GET /myFeed?q=This </li></ul><ul><li>200 OK </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><feed xmlns=&quot; http://www.w3.org/2005/Atom &quot;> </li></ul><ul><li><title>Foo</title> </li></ul><ul><li><updated>2006-01-23T16:26:03-08:00</updated> </li></ul><ul><li><id> http://www.example.com/myFeed </id> </li></ul><ul><li><link href=&quot;/myFeed&quot; rel=&quot;self&quot;/> </li></ul><ul><li><entry> </li></ul><ul><li><id> http://www.example.com/id/1 </id> </li></ul><ul><li><link rel=&quot;edit&quot; href=&quot; http://example.com/myFeed/1/1/ &quot;/> </li></ul><ul><li><updated>2006-01-23T16:26:03-08:00</updated> </li></ul><ul><li><title type=&quot;text&quot;>Entry 1</title> </li></ul><ul><li><content type=&quot;text&quot;>This is my entry</content> </li></ul><ul><li></entry> </li></ul><ul><li></feed> </li></ul>Searching for a resource
  49. 49. Demo <ul><li>Youtube Searcher </li></ul>
  50. 50. JSON and RSS <ul><li>Other formats are also supported: </li></ul>?alt=json ?alt=json-in-script ?alt=kml ?alt=rss
  51. 51. Client Libraries <ul><li>PHP </li></ul>.NET Java JavaScript Objective-C Python + Community Contributed
  52. 52. Demo <ul><li>Google Data Sample Applications </li></ul>
  53. 53. My Secret Motivation For Giving This Talk <ul><li>Google Data APIs </li></ul><ul><li>♥ </li></ul><ul><li>App Engine </li></ul>
  54. 54. Demo <ul><li>Google Data APIs + App Engine </li></ul>
  55. 55. Conclusion <ul><li>Google Data APIs </li></ul>App Engine Scalable Architecture (AtomPub) APIs
  56. 56. Questions? Pamela Fox [email_address] @pamelafox More Info http://code.google.com ↶

×