SlideShare a Scribd company logo
Designing OpenSocial
Apps For Speed and Scale
Patrick Chanezon
with slides from
Arne Roomann-Kurrik & Chris Chabot
June 9 2009
Success In A Social Market

• Social application eCPM is lower than average




• Direct access to millions of signed in users
   o Growth functionality built into social platforms
• Small margins x Lots of users = Small Tweaks Matter

Chart from Pubmatic AdPrice Index 2008: http://pubmatic.com/adpriceindex/index.html
quot;Improving our latency is really, really
importantquot;
+0.5 seconds costs Google 20% search
traffic




Marissa Mayer, Google
http://bit.ly/idItc ~12:50
quot;Even very small delays would result in
substantial and costly drops in revenuequot;
+0.1 seconds costs Amazon 1% of sales




Greg Linden, Amazon
http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html
http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
quot;If you make a product faster, you get that
back in terms of increased usagequot;
-30KB gave Google Maps 30% growth in 3
weeks




Marissa Mayer, Google
http://www.youtube.com/watch?v=6x0cAzQ7PVs ~18:10
A monk asked Joshu:
                               “Will my web application have
                                Buddha-nature if I optimize for
                                speed or number of features?”
                               Joshu answered:
                               “Mu”

                                Liberally adapted from “Zen Flesh, Zen Bones”
                                Jōshū Jūshin (778–897)


Image Source http://en.wikipedia.org/wiki/Image:BodhidharmaYoshitoshi1887.jpg
public domain
This Presentation

• Measure impact of changes on large scale apps

• Sample OpenSocial application
   o Different strategies
   o Real performance numbers


• Goals
  o Deliver a fast user experience
  o Minimize costs of running a large social app
  o Highlight new OpenSocial features
Introducing Quartermile




Photo by Phil McElhinney http://www.flickr.com/photos/philmcelhinney/1000986005/
Quartermile UI
Building Quartermile

• Backend:
   o Built on Google App Engine
   o Remote Procedure Calls
   o JSON


• Frontend:
   o Gadgets on many containers
   o JavaScript library for RPC calls


• View the source: http://bit.ly/quartermile-src
• XML spec: http://bit.ly/quartermile-app
Measuring Quartermile

• Request types
   o Quartermile API
   o OpenSocial API
   o Assets (images, JS, CSS)


• Metrics
  o Bandwidth / PV (KB)
  o Requests / PV (#)
  o Latency / PV (ms)
  o CPU time (megacycles)


• Measuring each individually is important
• Have more control over some than others
Quartermile 'Naive' Implementation Metrics



                            Bandwidth /   Requests / PV   Latency   CPU time
                              PV(kb)                       (ms)     (megacycles)




    Quartermile API calls
                              4.21             4          6490 2078
    Social requests
                             1.45              2          804           0
    Assets
                            135.6            22           3152          0
Quartermile 'Naive' Implementation Costs
Web Development
Best Practices*




* Gadgets are web pages too!
Photo by rudolf_schuba http://www.flickr.com/photos/rudolf_schuba/153225000/
Web Development Best Practices
 Gadgets are web pages too!
• We're interested in the following metrics:
  o Application size
  o Request count
  o Latency of initial load
• Measuring
  o Safari: Web Inspector
  o Firefox: Firebug & YSlow
  o IE: HttpWatch
Web Development Best Practices
 Minify JavaScript & CSS
• Concatenate JavaScript & CSS files
   o Reduces latency
   o Reduces HTTP Requests
• Compress JavaScript and CSS
   o Reduces download size

var foo = ['1','2','3','4'];
for (var i = 0 ; i < 4 ; i++) {
  alert(foo[i]);
}


var foo=[quot;1quot;,quot;2quot;,quot;3quot;,quot;4quot;];for(var i=0;i<4;i++){alert(foo[i])}
Web Development Best Practices
Determining application size
Quartermile Improvement
After JavaScript + CSS Minification (YUI Compressor)
Web Development Best Practices
Measuring Latency
Web Development Best Practices
Measuring latency
Web Development Best Practices
Latency is not a static number
Web Development Best Practices
 Decreasing latency increases user happiness and engagement
• Measure from different locations
• Measure often
Web Development Best Practices
 Automatically collecting latency measurements


• JavaScript code for recording gadget latency:
var startTime = new Date();
var imgElement = new Image()
imgElement.onload = function() {
  var endTime = new Date();
  var latency = endTime. getTime() - startTime.getTime();
  // report latency back to your server
}
imgElement.src = quot;http://your.server.com/ping.gifquot;;
Web Development Best Practices
 Spriting Images

• Concatenate images into a single file (sprite) and use
  CSS to selectively display portions of the sprite
   o Reduce # of requests
   o Reduce latency
Web Development Best Practices
Determining Request Count With YSlow!
Quartermile Improvement
After Image Spriting
Web Development Best Practices
 Adjusting Cache Headers

• Use the browser's cache for static data
   o Reduces total bandwidth & requests
   o Reduces latency
• Apache configuration example:
 <FilesMatch quot;.(css|js|gif|jpe?g|png)$quot;>
   Header set Cache-Control quot;max-age=290304000, publicquot;
 </FilesMatch>


• Use Cache-busting to force refresh
 http://example.org/css/style.css?v=3
Server Assisted
                                                                           Optimizations




Photo by zappowbang http://www.flickr.com/photos/zappowbang/3202362752/
Server Assisted Optimizations

• Social gadget:
   o Small tweak == big gain
• Social network
   o Many small tweaks == very big gain


• Social network advantages:
   o Control over the HTML they output
   o Better network infrastructure
Static Content Proxies

• Social network willing to absorb some traffic for you
   o Could use content delivery networks (CDNs)
   o Distributed network, great for serving static content
     all over the world
• Important for clients further away from your servers!

 var div = $(quot;#flashcontainerquot;);
 var url = gadgets.io.getProxyUrl(
           quot;http://me.com/flash.swfquot;);
 gadgets.flash.embedFlash(url, div, 10);
Content Rewriting

• Social network has control over its own output
   o CSS first, JS last
   o Concatenate, Minify
   o Rewrite URLs for static proxy
• Caching controls in your gadget spec:

 <Module>
   <ModulePrefs>
     <Optional feature=quot;content-rewritequot;>
        <Param name=quot;include-urlsquot;></Param>
        <Param name=quot;exclude-urlsquot;>.*</
 Param>
        <Param name=quot;include-tagsquot;></Param>
     </Optional>
   ...
OpenSocial Best




Image by Paul Downey http://www.flickr.com/photos/psd/2841928867/in/datetaken
                                                                                Practices
OpenSocial: Designed For Social Apps

• Some optimizations only make sense in a social
  application context
• OpenSocial offers conveniences to social app
  developers

• Learn from the OpenSocial API when designing your
  own application interfaces
Batching
 One API call == 1 HTTP request:
osapi.people.getViewer().execute(onVwr);
osapi.people.getOwner().execute(onOwnr);
osapi.people.getViewerFriends().execute(onFr
nd);
osapi.people.getOwnerFriends().execute(onOFr
nd);
varas much as osapi.newBatch()
 Do batch = you can in a single trip:
  .add(quot;vwrquot;, osapi.people.getViewer())
  .add(quot;vfdquot;,
osapi.people.getViewerFriends())
  .add(quot;owrquot;, osapi.people.getOwner())
  .add(quot;ofdquot;,
osapi.people.getOwnerFriends())
  .execute(onData);
 2 -> 1 OpenSocial requests
 4 -> 1 Quartermile API requests
Quartermile Improvement
After Request Batching
OpenSocial Best Practices
 Data Pipelining + Proxied Content


• The Naive implementation makes a lot of requests
• How can we improve on that?
OpenSocial Best Practices
 Data Pipelining + Proxied Content

• Using OpenSocial 0.9's Data-Pipelining, we can
  declare which social data to POST to your server
• Your server operates on the data and returns the
  HTML to display
• Available in iGoogle & orkut sandboxes, coming to a
  container near you soon(tm)
OpenSocial Best Practices
Data Pipelining + Proxied Content



 <Module>
  <ModulePrefs ... etc .../>
  <Content type=quot;htmlquot; view=quot;profilequot;
           href=quot;http://yoursite.com/proxied.phpquot;
           authz=quot;signedquot;>
   <os:ViewerRequest key=quot;vwrDataquot; fields=quot;id,displayNamequot;/>
   <os:OwnerRequest key=quot;ownDataquot;/>
   <os:PeopleRequest key=quot;ownFriendsquot;
            userId=quot;@ownerquot; groupId=quot;@selfquot;/>
  </Content>
 </Module>
OpenSocial Best Practices
Data Pipelining + Proxied Content


<?php

$postData = json_decode(file_get_contents(quot;php://inputquot;));

echo quot;<h1>Hello {$postData['vwrData']['name']}</h1>quot;;
echo quot;These are {$postData['ownData']['name']}'s friends:quot;;
echo quot;<br/>quot;;

foreach ($postData['ownFriends'] as $friend) {
  echo quot;{$friend['name']}<br/>quot;;
}
Quartermile Improvement
After Data Pipelining
OpenSocial Best Practices
 Invalidation Pattern

• New application design pattern available with the
  features introduced in 0.9
• When your internal state changes on the application
  server, use REST/RPC calls to invalidate data:
   o Per user or url
   o Application ID is determined by 2 Legged OAuth
     call
OpenSocial Best Practices
 Invalidation Pattern

• Calling the invalidation API:


  POST /api/rest/cache/invalidate
  HOST opensocial.example.org
  Content-Type: application/json
  {
    invalidationKeys : [
     quot;http://www.myapp.com/gadgetspec.xmlquot;,
     quot;http://yoursite.com/proxied.phpquot;
     quot;user:123quot;]
  }
Optimizing Your Data Store




Image by euthman http://www.flickr.com/photos/euthman/1846038389/
OpenSocial Best Practices
 Data Store Structuring

• Database joins against friend lists are generally very
  expensive
• Plan ahead if you're not using App Engine
   o Master / Slave architecture
   o Database partitioning
• Use Memcache to cache data (in App Engine too!)
   o Filter results in software, make the most of cache
• Consider storing frequently used data in JSON Blobs
  instead traditional relational storage
OpenSocial Best Practices
 Data Store Structuring

• Consider using background processing
   o Updates are slightly delayed
   o Doesn't block user interaction
   o Great for quot;What are your friends doingquot; result sets
• Use a off-the-shelf / open source Queue system or
• App Engine, use cron.yaml:

 cron:
 - description: process activities entries
   url: /tasks/processActivities
   schedule: every 1 minutes
Designing Quartermile's Data Model

• How to plan a scalable social application?

• Prefer to enforce hard limits up front, than deliver a
  poor user experience

• Decided friend queries were too expensive:
   o orkut lets you have 1000 friends
   o MySpace lets you have 100,000s+ of friends


• Do all 100,000 friends need to see your exercises?
   o Created artificial idea of quot;teamsquot;
   o Choose a subset of friends to invite to your team
   o Side effect: Drive adoption!
Dreaming Up Reasonable Limits

• Goal: Fetch all of a team's data for any given week
  in one database query

• How many users can we put on a team?

• App Engine returns 1000 entries max for any query
• 1 entry / workout
• 3 / day ~ 20 / week

• 1000 / 20 = 50 users
Limits: Made To Be Broken
 Not every app will be able to enforce such restrictions

• Goal: Implement quot;updates from your friendsquot;
  inside of the Quartermile app

• Slow!
   o Fetch all friends
   o See which updated recently
   o Sort


• Friend updates are lower priority than team updates
   o Process in the background
   o Fetch friends using 2-legged OAuth
   o Do quot;updates from friendsquot; calculation
   o Store result of calculation (can be stale)
Where To Put It?

• Database
• Memcache
• OpenSocial App Data
quot;App Data is one of the most misunderstood
and misused portions of the OpenSocial
specificationquot;
App Data is often used incorrectly




Arne Roomann-Kurrik, Google
May 2009 at Google I/O
App Data

• Data store of keys and values
   o Essentially public, so you can't put secrets here
   o User writable via JS, so you can't trust it
   o But it's fast!
• Perfect place to cache slow data

• Background process does slow calculation
• Pushes result to AppData
• When rendered, injected directly into the gadget
   o No server hit!
Container-Mandated
Optimizations




Photo by redjar http://www.flickr.com/photos/redjar/704710355/
Container-Mandated Optimizations

• 'Naive' implementation:
   o Easy to make mistakes


• Container:
   o Keep gadgets fast == keep container fast
   o Userbase affects acceptable latency values
   o Constraints to keep gadget developers honest
iGoogle's Latency
• Directory will soon be taking latency into account
• Implicit latency penalty, too:
orkut's Template-Only Profiles

• Profiles:
   o The most traffic on orkut
   o Users love gadgets!


• OpenSocial 0.9 templates
  o Can display social data
  o Can display App Data
  o No external fetches or dynamic data


• Produces an extremely fast profile render
• Great use case for AppData cache
orkut's Template-Only Profiles

<Module>
  <ModulePrefs title=quot;Templatequot;>
    <Require feature=quot;opensocial-dataquot; />
    <Require feature=quot;opensocial-templatesquot;>
      <Param name=quot;process-on-serverquot;>true</Param>
    </Require>
  </ModulePrefs>
  <Content type=quot;htmlquot; view=quot;profilequot;><![CDATA[
    <script type=quot;text/os-dataquot;>
      <os:PeopleRequest key=quot;friendsquot; userId=quot;@viewerquot;
          groupId=quot;@friendsquot;/>
    </script>
    <script type=quot;text/os-templatequot;>
      <div repeat=quot;${friends}quot;>${Cur.name.givenName}</div>
    </script>
  ]]></Content>
</Module>
Summary




Photo by peagreengirl http://www.flickr.com/photos/peagreenchick/384744358/in/photostream/
Summary
Comparison of each technique

App Size:                      Latency:
 • JS Minification              • JS Minification
 • Content Rewriting            • Spriting
 • Content Proxy                • Content Rewriting
 • Pipelining                   • Content Proxy
 • Invalidation                 • Batching
 • Cache Headers                • Data Store Optimization
                                • Background
                                • App Data Cache
Requests:
                                • Pipelining
 • JS Minification
                                • Invalidation
 • Spriting
                                • Limited Profiles
 • Content Rewriting
                                • Cache Headers
 • Cache Headers
Quartermile 'Most Optmized' Implementation
All you ever wanted to know about web apps
performance tuning

           http://stevesouders.com/




61
Performance                          ?)


A monk asked Zhaozhou to teach him.
Zhaozhou asked, quot;Have you eaten your meal?quot;
The monk replied, quot;Yes, I have.quot;
quot;Then go wash your bowlquot;, said Zhaozhou.
At that moment, the monk was enlightened.

                                   , Mumonkan



Image Source http://commons.wikimedia.org/wiki/File:Satori.svg
public domain
Page Speed Firefox Extension
• Released June 4 2009
• http://code.google.com/speed/page-speed/




63
Google Developer Relations Japan
• Google
     – Google Developer Day
     –




              http://sites.google.com/site/devreljp/
64
code.google.com
• Google
     –
     –




           http://code.google.com/intl/ja/
65
• Google Developer Day


•             2
     –
     –
         •
     –            Google Developer Relations Japan


             http://sites.google.com/site/devreljp/




66
Q&A
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

More Related Content

What's hot

Hacking Web Performance
Hacking Web Performance Hacking Web Performance
Hacking Web Performance
Maximiliano Firtman
 
Design+Performance Velocity 2015
Design+Performance Velocity 2015Design+Performance Velocity 2015
Design+Performance Velocity 2015
Steve Souders
 
Design+Performance
Design+PerformanceDesign+Performance
Design+Performance
Steve Souders
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)Steve Souders
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentation
Justin Dorfman
 
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Andy Davies
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
Matt Raible
 
High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)
Stoyan Stefanov
 
International Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 BarcelonaInternational Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 Barcelona
Bastian Grimm
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and you
Patrick Meenan
 
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
Andy Davies
 
High Performance Web Components
High Performance Web ComponentsHigh Performance Web Components
High Performance Web Components
Steve Souders
 
Not your daddy's web server
Not your daddy's web serverNot your daddy's web server
Not your daddy's web server
Jim Jagielski
 
Going Fast on the Mobile Web
Going Fast on the Mobile WebGoing Fast on the Mobile Web
Going Fast on the Mobile Web
Jason Grigsby
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker Caching
Chris Love
 
High-Speed HTML5
High-Speed HTML5High-Speed HTML5
High-Speed HTML5
Peter Lubbers
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of Things
Peter Moskovits
 
Apache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatApache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and Tomcat
Jim Jagielski
 
How fast are we going now?
How fast are we going now?How fast are we going now?
How fast are we going now?
Steve Souders
 
The WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitchThe WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitch
Lior Rotkovitch
 

What's hot (20)

Hacking Web Performance
Hacking Web Performance Hacking Web Performance
Hacking Web Performance
 
Design+Performance Velocity 2015
Design+Performance Velocity 2015Design+Performance Velocity 2015
Design+Performance Velocity 2015
 
Design+Performance
Design+PerformanceDesign+Performance
Design+Performance
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentation
 
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)
 
International Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 BarcelonaInternational Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 Barcelona
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and you
 
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
 
High Performance Web Components
High Performance Web ComponentsHigh Performance Web Components
High Performance Web Components
 
Not your daddy's web server
Not your daddy's web serverNot your daddy's web server
Not your daddy's web server
 
Going Fast on the Mobile Web
Going Fast on the Mobile WebGoing Fast on the Mobile Web
Going Fast on the Mobile Web
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker Caching
 
High-Speed HTML5
High-Speed HTML5High-Speed HTML5
High-Speed HTML5
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of Things
 
Apache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatApache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and Tomcat
 
How fast are we going now?
How fast are we going now?How fast are we going now?
How fast are we going now?
 
The WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitchThe WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitch
 

Viewers also liked

Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Philip Tellis
 
Browser War 2009
Browser War 2009Browser War 2009
Browser War 2009
Daniel Glazman
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performanceCédric MORIN
 
Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013DigitasLBi Paris
 
Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]
Aaron Gustafson
 
Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)
Stephen Anderson
 

Viewers also liked (6)

Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?
 
Browser War 2009
Browser War 2009Browser War 2009
Browser War 2009
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performance
 
Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013
 
Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]
 
Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)
 

Similar to GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile DevelopmentGabriele Lana
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
Udi Bauman
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developerslisab517
 
Castles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App EngineCastles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App Engine
catherinewall
 
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
SOASTA
 
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Adam Dunford
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom Kraljevic
Sri Ambati
 
Performance Engineering - how to start!
Performance Engineering - how to start!Performance Engineering - how to start!
Performance Engineering - how to start!
Yoav Weiss
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站areyouok
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
topgeek
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuning
John McCaffrey
 
Windy cityrails performance_tuning
Windy cityrails performance_tuningWindy cityrails performance_tuning
Windy cityrails performance_tuning
John McCaffrey
 
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
John McCaffrey
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
Pablo Godel
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013
Jon Arne Sæterås
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web Sites
Páris Neto
 
High Performance Websites By Souders Steve
High Performance Websites By Souders SteveHigh Performance Websites By Souders Steve
High Performance Websites By Souders Steve
w3guru
 
Progressive Web Apps for Education
Progressive Web Apps for EducationProgressive Web Apps for Education
Progressive Web Apps for Education
Chris Love
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
Chris Love
 

Similar to GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale (20)

Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile Development
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
 
Castles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App EngineCastles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App Engine
 
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
 
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom Kraljevic
 
Performance Engineering - how to start!
Performance Engineering - how to start!Performance Engineering - how to start!
Performance Engineering - how to start!
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuning
 
Windy cityrails performance_tuning
Windy cityrails performance_tuningWindy cityrails performance_tuning
Windy cityrails performance_tuning
 
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web Sites
 
High Performance Websites By Souders Steve
High Performance Websites By Souders SteveHigh Performance Websites By Souders Steve
High Performance Websites By Souders Steve
 
Plop
PlopPlop
Plop
 
Progressive Web Apps for Education
Progressive Web Apps for EducationProgressive Web Apps for Education
Progressive Web Apps for Education
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
 

More from Patrick Chanezon

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)
Patrick Chanezon
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
Patrick Chanezon
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Patrick Chanezon
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
Patrick Chanezon
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - Intro
Patrick Chanezon
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - Technical
Patrick Chanezon
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018
Patrick Chanezon
 
Moby KubeCon 2017
Moby KubeCon 2017Moby KubeCon 2017
Moby KubeCon 2017
Patrick Chanezon
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and Microsoft
Patrick Chanezon
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Patrick Chanezon
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Patrick Chanezon
 
DockerCon EU 2017 Recap
DockerCon EU 2017 RecapDockerCon EU 2017 Recap
DockerCon EU 2017 Recap
Patrick Chanezon
 
Docker Innovation Culture
Docker Innovation CultureDocker Innovation Culture
Docker Innovation Culture
Patrick Chanezon
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017
Patrick Chanezon
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Patrick Chanezon
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017
Patrick Chanezon
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017
Patrick Chanezon
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Patrick Chanezon
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 Recap
Patrick Chanezon
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby project
Patrick Chanezon
 

More from Patrick Chanezon (20)

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - Intro
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - Technical
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018
 
Moby KubeCon 2017
Moby KubeCon 2017Moby KubeCon 2017
Moby KubeCon 2017
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and Microsoft
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
 
DockerCon EU 2017 Recap
DockerCon EU 2017 RecapDockerCon EU 2017 Recap
DockerCon EU 2017 Recap
 
Docker Innovation Culture
Docker Innovation CultureDocker Innovation Culture
Docker Innovation Culture
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 Recap
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby project
 

Recently uploaded

FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 

GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

  • 1.
  • 2. Designing OpenSocial Apps For Speed and Scale Patrick Chanezon with slides from Arne Roomann-Kurrik & Chris Chabot June 9 2009
  • 3. Success In A Social Market • Social application eCPM is lower than average • Direct access to millions of signed in users o Growth functionality built into social platforms • Small margins x Lots of users = Small Tweaks Matter Chart from Pubmatic AdPrice Index 2008: http://pubmatic.com/adpriceindex/index.html
  • 4. quot;Improving our latency is really, really importantquot; +0.5 seconds costs Google 20% search traffic Marissa Mayer, Google http://bit.ly/idItc ~12:50
  • 5. quot;Even very small delays would result in substantial and costly drops in revenuequot; +0.1 seconds costs Amazon 1% of sales Greg Linden, Amazon http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
  • 6. quot;If you make a product faster, you get that back in terms of increased usagequot; -30KB gave Google Maps 30% growth in 3 weeks Marissa Mayer, Google http://www.youtube.com/watch?v=6x0cAzQ7PVs ~18:10
  • 7. A monk asked Joshu: “Will my web application have Buddha-nature if I optimize for speed or number of features?” Joshu answered: “Mu” Liberally adapted from “Zen Flesh, Zen Bones” Jōshū Jūshin (778–897) Image Source http://en.wikipedia.org/wiki/Image:BodhidharmaYoshitoshi1887.jpg public domain
  • 8. This Presentation • Measure impact of changes on large scale apps • Sample OpenSocial application o Different strategies o Real performance numbers • Goals o Deliver a fast user experience o Minimize costs of running a large social app o Highlight new OpenSocial features
  • 9. Introducing Quartermile Photo by Phil McElhinney http://www.flickr.com/photos/philmcelhinney/1000986005/
  • 11. Building Quartermile • Backend: o Built on Google App Engine o Remote Procedure Calls o JSON • Frontend: o Gadgets on many containers o JavaScript library for RPC calls • View the source: http://bit.ly/quartermile-src • XML spec: http://bit.ly/quartermile-app
  • 12. Measuring Quartermile • Request types o Quartermile API o OpenSocial API o Assets (images, JS, CSS) • Metrics o Bandwidth / PV (KB) o Requests / PV (#) o Latency / PV (ms) o CPU time (megacycles) • Measuring each individually is important • Have more control over some than others
  • 13. Quartermile 'Naive' Implementation Metrics Bandwidth / Requests / PV Latency CPU time PV(kb) (ms) (megacycles) Quartermile API calls 4.21 4 6490 2078 Social requests 1.45 2 804 0 Assets 135.6 22 3152 0
  • 15. Web Development Best Practices* * Gadgets are web pages too! Photo by rudolf_schuba http://www.flickr.com/photos/rudolf_schuba/153225000/
  • 16. Web Development Best Practices Gadgets are web pages too! • We're interested in the following metrics: o Application size o Request count o Latency of initial load • Measuring o Safari: Web Inspector o Firefox: Firebug & YSlow o IE: HttpWatch
  • 17. Web Development Best Practices Minify JavaScript & CSS • Concatenate JavaScript & CSS files o Reduces latency o Reduces HTTP Requests • Compress JavaScript and CSS o Reduces download size var foo = ['1','2','3','4']; for (var i = 0 ; i < 4 ; i++) { alert(foo[i]); } var foo=[quot;1quot;,quot;2quot;,quot;3quot;,quot;4quot;];for(var i=0;i<4;i++){alert(foo[i])}
  • 18. Web Development Best Practices Determining application size
  • 19. Quartermile Improvement After JavaScript + CSS Minification (YUI Compressor)
  • 20. Web Development Best Practices Measuring Latency
  • 21. Web Development Best Practices Measuring latency
  • 22. Web Development Best Practices Latency is not a static number
  • 23. Web Development Best Practices Decreasing latency increases user happiness and engagement • Measure from different locations • Measure often
  • 24. Web Development Best Practices Automatically collecting latency measurements • JavaScript code for recording gadget latency: var startTime = new Date(); var imgElement = new Image() imgElement.onload = function() { var endTime = new Date(); var latency = endTime. getTime() - startTime.getTime(); // report latency back to your server } imgElement.src = quot;http://your.server.com/ping.gifquot;;
  • 25. Web Development Best Practices Spriting Images • Concatenate images into a single file (sprite) and use CSS to selectively display portions of the sprite o Reduce # of requests o Reduce latency
  • 26. Web Development Best Practices Determining Request Count With YSlow!
  • 28. Web Development Best Practices Adjusting Cache Headers • Use the browser's cache for static data o Reduces total bandwidth & requests o Reduces latency • Apache configuration example: <FilesMatch quot;.(css|js|gif|jpe?g|png)$quot;> Header set Cache-Control quot;max-age=290304000, publicquot; </FilesMatch> • Use Cache-busting to force refresh http://example.org/css/style.css?v=3
  • 29. Server Assisted Optimizations Photo by zappowbang http://www.flickr.com/photos/zappowbang/3202362752/
  • 30. Server Assisted Optimizations • Social gadget: o Small tweak == big gain • Social network o Many small tweaks == very big gain • Social network advantages: o Control over the HTML they output o Better network infrastructure
  • 31. Static Content Proxies • Social network willing to absorb some traffic for you o Could use content delivery networks (CDNs) o Distributed network, great for serving static content all over the world • Important for clients further away from your servers! var div = $(quot;#flashcontainerquot;); var url = gadgets.io.getProxyUrl( quot;http://me.com/flash.swfquot;); gadgets.flash.embedFlash(url, div, 10);
  • 32. Content Rewriting • Social network has control over its own output o CSS first, JS last o Concatenate, Minify o Rewrite URLs for static proxy • Caching controls in your gadget spec: <Module> <ModulePrefs> <Optional feature=quot;content-rewritequot;> <Param name=quot;include-urlsquot;></Param> <Param name=quot;exclude-urlsquot;>.*</ Param> <Param name=quot;include-tagsquot;></Param> </Optional> ...
  • 33. OpenSocial Best Image by Paul Downey http://www.flickr.com/photos/psd/2841928867/in/datetaken Practices
  • 34. OpenSocial: Designed For Social Apps • Some optimizations only make sense in a social application context • OpenSocial offers conveniences to social app developers • Learn from the OpenSocial API when designing your own application interfaces
  • 35. Batching One API call == 1 HTTP request: osapi.people.getViewer().execute(onVwr); osapi.people.getOwner().execute(onOwnr); osapi.people.getViewerFriends().execute(onFr nd); osapi.people.getOwnerFriends().execute(onOFr nd); varas much as osapi.newBatch() Do batch = you can in a single trip: .add(quot;vwrquot;, osapi.people.getViewer()) .add(quot;vfdquot;, osapi.people.getViewerFriends()) .add(quot;owrquot;, osapi.people.getOwner()) .add(quot;ofdquot;, osapi.people.getOwnerFriends()) .execute(onData); 2 -> 1 OpenSocial requests 4 -> 1 Quartermile API requests
  • 37. OpenSocial Best Practices Data Pipelining + Proxied Content • The Naive implementation makes a lot of requests • How can we improve on that?
  • 38. OpenSocial Best Practices Data Pipelining + Proxied Content • Using OpenSocial 0.9's Data-Pipelining, we can declare which social data to POST to your server • Your server operates on the data and returns the HTML to display • Available in iGoogle & orkut sandboxes, coming to a container near you soon(tm)
  • 39. OpenSocial Best Practices Data Pipelining + Proxied Content <Module> <ModulePrefs ... etc .../> <Content type=quot;htmlquot; view=quot;profilequot; href=quot;http://yoursite.com/proxied.phpquot; authz=quot;signedquot;> <os:ViewerRequest key=quot;vwrDataquot; fields=quot;id,displayNamequot;/> <os:OwnerRequest key=quot;ownDataquot;/> <os:PeopleRequest key=quot;ownFriendsquot; userId=quot;@ownerquot; groupId=quot;@selfquot;/> </Content> </Module>
  • 40. OpenSocial Best Practices Data Pipelining + Proxied Content <?php $postData = json_decode(file_get_contents(quot;php://inputquot;)); echo quot;<h1>Hello {$postData['vwrData']['name']}</h1>quot;; echo quot;These are {$postData['ownData']['name']}'s friends:quot;; echo quot;<br/>quot;; foreach ($postData['ownFriends'] as $friend) { echo quot;{$friend['name']}<br/>quot;; }
  • 42. OpenSocial Best Practices Invalidation Pattern • New application design pattern available with the features introduced in 0.9 • When your internal state changes on the application server, use REST/RPC calls to invalidate data: o Per user or url o Application ID is determined by 2 Legged OAuth call
  • 43. OpenSocial Best Practices Invalidation Pattern • Calling the invalidation API: POST /api/rest/cache/invalidate HOST opensocial.example.org Content-Type: application/json { invalidationKeys : [ quot;http://www.myapp.com/gadgetspec.xmlquot;, quot;http://yoursite.com/proxied.phpquot; quot;user:123quot;] }
  • 44. Optimizing Your Data Store Image by euthman http://www.flickr.com/photos/euthman/1846038389/
  • 45. OpenSocial Best Practices Data Store Structuring • Database joins against friend lists are generally very expensive • Plan ahead if you're not using App Engine o Master / Slave architecture o Database partitioning • Use Memcache to cache data (in App Engine too!) o Filter results in software, make the most of cache • Consider storing frequently used data in JSON Blobs instead traditional relational storage
  • 46. OpenSocial Best Practices Data Store Structuring • Consider using background processing o Updates are slightly delayed o Doesn't block user interaction o Great for quot;What are your friends doingquot; result sets • Use a off-the-shelf / open source Queue system or • App Engine, use cron.yaml: cron: - description: process activities entries url: /tasks/processActivities schedule: every 1 minutes
  • 47. Designing Quartermile's Data Model • How to plan a scalable social application? • Prefer to enforce hard limits up front, than deliver a poor user experience • Decided friend queries were too expensive: o orkut lets you have 1000 friends o MySpace lets you have 100,000s+ of friends • Do all 100,000 friends need to see your exercises? o Created artificial idea of quot;teamsquot; o Choose a subset of friends to invite to your team o Side effect: Drive adoption!
  • 48. Dreaming Up Reasonable Limits • Goal: Fetch all of a team's data for any given week in one database query • How many users can we put on a team? • App Engine returns 1000 entries max for any query • 1 entry / workout • 3 / day ~ 20 / week • 1000 / 20 = 50 users
  • 49. Limits: Made To Be Broken Not every app will be able to enforce such restrictions • Goal: Implement quot;updates from your friendsquot; inside of the Quartermile app • Slow! o Fetch all friends o See which updated recently o Sort • Friend updates are lower priority than team updates o Process in the background o Fetch friends using 2-legged OAuth o Do quot;updates from friendsquot; calculation o Store result of calculation (can be stale)
  • 50. Where To Put It? • Database • Memcache • OpenSocial App Data
  • 51. quot;App Data is one of the most misunderstood and misused portions of the OpenSocial specificationquot; App Data is often used incorrectly Arne Roomann-Kurrik, Google May 2009 at Google I/O
  • 52. App Data • Data store of keys and values o Essentially public, so you can't put secrets here o User writable via JS, so you can't trust it o But it's fast! • Perfect place to cache slow data • Background process does slow calculation • Pushes result to AppData • When rendered, injected directly into the gadget o No server hit!
  • 53. Container-Mandated Optimizations Photo by redjar http://www.flickr.com/photos/redjar/704710355/
  • 54. Container-Mandated Optimizations • 'Naive' implementation: o Easy to make mistakes • Container: o Keep gadgets fast == keep container fast o Userbase affects acceptable latency values o Constraints to keep gadget developers honest
  • 55. iGoogle's Latency • Directory will soon be taking latency into account • Implicit latency penalty, too:
  • 56. orkut's Template-Only Profiles • Profiles: o The most traffic on orkut o Users love gadgets! • OpenSocial 0.9 templates o Can display social data o Can display App Data o No external fetches or dynamic data • Produces an extremely fast profile render • Great use case for AppData cache
  • 57. orkut's Template-Only Profiles <Module> <ModulePrefs title=quot;Templatequot;> <Require feature=quot;opensocial-dataquot; /> <Require feature=quot;opensocial-templatesquot;> <Param name=quot;process-on-serverquot;>true</Param> </Require> </ModulePrefs> <Content type=quot;htmlquot; view=quot;profilequot;><![CDATA[ <script type=quot;text/os-dataquot;> <os:PeopleRequest key=quot;friendsquot; userId=quot;@viewerquot; groupId=quot;@friendsquot;/> </script> <script type=quot;text/os-templatequot;> <div repeat=quot;${friends}quot;>${Cur.name.givenName}</div> </script> ]]></Content> </Module>
  • 58. Summary Photo by peagreengirl http://www.flickr.com/photos/peagreenchick/384744358/in/photostream/
  • 59. Summary Comparison of each technique App Size: Latency: • JS Minification • JS Minification • Content Rewriting • Spriting • Content Proxy • Content Rewriting • Pipelining • Content Proxy • Invalidation • Batching • Cache Headers • Data Store Optimization • Background • App Data Cache Requests: • Pipelining • JS Minification • Invalidation • Spriting • Limited Profiles • Content Rewriting • Cache Headers • Cache Headers
  • 60. Quartermile 'Most Optmized' Implementation
  • 61. All you ever wanted to know about web apps performance tuning http://stevesouders.com/ 61
  • 62. Performance ?) A monk asked Zhaozhou to teach him. Zhaozhou asked, quot;Have you eaten your meal?quot; The monk replied, quot;Yes, I have.quot; quot;Then go wash your bowlquot;, said Zhaozhou. At that moment, the monk was enlightened. , Mumonkan Image Source http://commons.wikimedia.org/wiki/File:Satori.svg public domain
  • 63. Page Speed Firefox Extension • Released June 4 2009 • http://code.google.com/speed/page-speed/ 63
  • 64. Google Developer Relations Japan • Google – Google Developer Day – http://sites.google.com/site/devreljp/ 64
  • 65. code.google.com • Google – – http://code.google.com/intl/ja/ 65
  • 66. • Google Developer Day • 2 – – • – Google Developer Relations Japan http://sites.google.com/site/devreljp/ 66
  • 67. Q&A