Evolving architecture
make development easy and your site faster




                        Leo Lapworth @ YAPC::EU 2007
...
Covering
Covering

 How running websites has evolved
Covering

 How running websites has evolved
  Servers improved
Covering

 How running websites has evolved
  Servers improved
  Architecture improved
Covering

 How running websites has evolved
  Servers improved
  Architecture improved
  Development tools improved
Covering

 How running websites has evolved
  Servers improved
  Architecture improved
  Development tools improved
  Code...
but not...
but not...

  Covering anything in depth
Concepts stolen from
Concepts stolen from

 Mod_perl guide
Concepts stolen from

 Mod_perl guide
 Léon Brocard
Concepts stolen from

 Mod_perl guide
 Léon Brocard
 Six Apart
Concepts stolen from

 Mod_perl guide
 Léon Brocard
 Six Apart
 Yahoo!
Concepts stolen from

 Mod_perl guide
 Léon Brocard
 Six Apart
 Yahoo!
 + many other people...
Concepts stolen from

 Mod_perl guide
 Léon Brocard
 Six Apart
 Yahoo!
 + many other people...

                          ...
Templates
Templates
An example of how things have improved...
Recognise this?
Recognise this?
use CGI;
$q = CGI->new();
$name = $q->param('name');
print $q->header('text/html');
$link = 'http://foo.co...
How about...
How about...

           Now, was it cellspacing, or
          cellpadding I need for ie4.02?
and...
and...
           I'm a developer, not a designer. I
         shouldn't have to know this £@$%!
Use templates...
Use templates...



  use Template;
Code, not HTML
Code, not HTML
use CGI;
use Template;

$q = CGI->new();
print $q->header('text/html');
my %vals = (
	 name = $q->param('na...
I just code, I have
 clean code and I don't
have to know HTML or
 browser compatibility
         issues
Simple changes make
a huge difference
Servers
Single server
Single server

            Internet




           Web server
       (static & dynamic)
                            All ed...
Lots of...
and...

            I thought I only
         changed one thing, but
            it's still broken
1 live server
1 development server
1 live server
1 development server

     Internet




    Live server       Development server

     Web server           ...
Does not solve:


         What did I change last?
         Who changed what / when?
You need...
You need...
Version control & docs
Version control & docs

        Use SVK with Subversion
Version control & docs

        Use SVK with Subversion
Version control & docs

              Use SVK with Subversion




Clkao - SVK
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)




Clka...
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)
        ...
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)
        ...
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)
        ...
Tests - all you need on one slide
Tests - all you need on one slide

Write tests, write tests often
Tests - all you need on one slide

Write tests, write tests often
Run tests, run tests often
Tests - all you need on one slide

Write tests, write tests often
Run tests, run tests often
Tests are good
Tests - all you need on one slide

Write tests, write tests often
Run tests, run tests often
Tests are good
Found a bug? -...
Tests - all you need on one slide

Write tests, write tests often
Run tests, run tests often
Tests are good
Found a bug? -...
Making your site faster
mod_perl
mod_perl
 Code caching (loaded/compiled once)
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
 Apache::Registry for old/existing...
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
 Apache::Registry for old/existing...
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
 Apache::Registry for old/existing...
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
 Apache::Registry for old/existing...
Front/back end split
Front/back end split

        Internet



             Slow
                                            Back end
       Fr...
or put another way...
or put another way...




  Internet
 slow and
demanding
     kids
   (users)
or put another way...
                    Canteen




  Internet           Front end
 slow and    Dinner-ladies - good at
...
or put another way...
                    Canteen                 Kitchen




  Internet           Front end              ...
Internet



          Slow
                                         Back end
    Front end
                               ...
Internet



          Slow
                                         Back end
    Front end
                               ...
Speed up the frequent...
Speed up the frequent...

  Are you re-creating the same objects/data
  structures again and again?
Speed up the frequent...

  Are you re-creating the same objects/data
  structures again and again?
  Can this information...
Add caching
Add caching

 Persisting data for a period of time
Add caching

 Persisting data for a period of time
 Simple to implement:
Add caching

 Persisting data for a period of time
 Simple to implement:
   Does cache exist?
Add caching

 Persisting data for a period of time
 Simple to implement:
   Does cache exist?
     YES -> retrieve it and ...
Add caching

 Persisting data for a period of time
 Simple to implement:
   Does cache exist?
     YES -> retrieve it and ...
Things you might cache
Things you might cache


 Search result sets (a list of ids)
Things you might cache


 Search result sets (a list of ids)
 Individual items
Things you might cache


 Search result sets (a list of ids)
 Individual items
 Look-ups of information from a database
Things you might cache


 Search result sets (a list of ids)
 Individual items
 Look-ups of information from a database
 F...
Centralise
Centralise


  Put caching methods in one package
Centralise


  Put caching methods in one package
  Put any generic methods in a package
We now have a cache

        Internet



             Slow
                                            Back end
       Fro...
We now have a cache

        Internet



             Slow
                                            Back end
       Fro...
Adding in the cache...
Adding in the cache...




Internet
  Kids
Adding in the cache...




Internet    Front end
  Kids     Dinner-ladies
Adding in the cache...




Internet                   Back end
            Front end
  Kids                      Chefs
   ...
Adding in the cache...




                                       Cache
Internet                   Back end
            Fr...
Coping with more traffic
Coping with more traffic
                                           Development
     Internet
                       Stage ...
Coping with more traffic
                                           Development
     Internet
                       Stage ...
That's two separate disks
That's two separate disks

                                             Development
    Internet
                      Sta...
Second kitchen, two
freezers...
Second kitchen, two
freezers...




Internet
  Kids
Second kitchen, two
freezers...




Internet    Front end
  Kids     Dinner-ladies
Second kitchen, two
freezers...
                           Kitchen 1



                           Kitchen 2



Internet  ...
Second kitchen, two
freezers...
                           Kitchen 1



                           Kitchen 2



Internet  ...
We want a cache across
servers...
We want a cache across
servers...


           Enter
         Memcache
We want a cache across
servers...


           Enter
         Memcache




              See Léon Brocard's talk
         ...
Development
   Internet
                     Stage server                server (in the
                                  ...
Shared freezer
Shared freezer




Internet
  Kids
Shared freezer




Internet    Front end
  Kids     Dinner-ladies
Shared freezer

                           Kitchen 1



                           Kitchen 2

Internet    Front end
  Kids...
Shared freezer

                           Kitchen 1



                           Kitchen 2

Internet    Front end
  Kids...
Maintaining servers
Maintaining servers
  Keep all servers identical where possible
Maintaining servers
  Keep all servers identical where possible
  Package your code (e.g. .debs)
Maintaining servers
  Keep all servers identical where possible
  Package your code (e.g. .debs)
  Centralise your crontab...
Maintaining servers
  Keep all servers identical where possible
  Package your code (e.g. .debs)
  Centralise your crontab...
Simplify further
                                               Development
     Internet
                       Stage ser...
Simplify further
                                               Development
     Internet
                       Stage ser...
Simplify further
                                               Development
     Internet
                       Stage ser...
Waiters: cheaper, faster and
less demanding
Waiters: cheaper, faster and
less demanding




Internet
  Kids
Waiters: cheaper, faster and
less demanding




                   Front end
Internet
           Waiters - good at serving...
Waiters: cheaper, faster and
less demanding
                                           Kitchen 1




                     ...
Waiters: cheaper, faster and
less demanding
                                           Kitchen 1




                     ...
More tips for faster user
experience
mod_gzip
mod_gzip




HTML/css/xml
mod_gzip




HTML/css/xml
mod_gzip




               gzip
HTML/css/xml
mod_gzip




               gzip
HTML/css/xml
mod_gzip




               gzip
HTML/css/xml          Users
mod_gzip




                          gzip
HTML/css/xml                                Users

 If a browser support compr...
Cache headers (expiry)
Cache headers (expiry)
Cache headers (expiry)




  Let web browsers know how long to cache
Cache somethings forever
Cache somethings forever

  /includes/js/<VERSION>/common.js
Cache somethings forever

  /includes/js/<VERSION>/common.js


 Ensures user has version which matches HTML
 (client could...
Cache somethings forever

  /includes/js/<VERSION>/common.js


 Ensures user has version which matches HTML
 (client could...
Handling images: MogileFS
Handling images: MogileFS
 Store images by group (replication levels)
Handling images: MogileFS
 Store images by group (replication levels)
 Spread IO across disks & servers
Handling images: MogileFS
 Store images by group (replication levels)
 Spread IO across disks & servers
 Retrieve from fas...
Handling images: MogileFS
 Store images by group (replication levels)
 Spread IO across disks & servers
 Retrieve from fas...
Handling images: MogileFS
 Store images by group (replication levels)
 Spread IO across disks & servers
 Retrieve from fas...
Handling images: MogileFS
 Store images by group (replication levels)
 Spread IO across disks & servers
 Retrieve from fas...
Basic rules to consider
Basic rules to consider
  Centralise (code/templates/configuration/
  deployment etc)
Basic rules to consider
  Centralise (code/templates/configuration/
  deployment etc)
  Test, run lots of them
Basic rules to consider
  Centralise (code/templates/configuration/
  deployment etc)
  Test, run lots of them
  Cache if y...
Basic rules to consider
  Centralise (code/templates/configuration/
  deployment etc)
  Test, run lots of them
  Cache if y...
Basic rules to consider
  Centralise (code/templates/configuration/
  deployment etc)
  Test, run lots of them
  Cache if y...
We covered...
We covered...
  perlbal
We covered...
  perlbal
  memcached
We covered...
  perlbal
  memcached
  svk (subversion)
We covered...
  perlbal
  memcached
  svk (subversion)
  trac
We covered...
  perlbal
  memcached
  svk (subversion)
  trac
  rsync
We covered...
  perlbal
  memcached
  svk (subversion)
  trac
  rsync
  gzip
We covered...
  perlbal            mogileFS
  memcached
  svk (subversion)
  trac
  rsync
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
  svk (subversion)
  trac...
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test...
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test...
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test...
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test...
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test...
...how a kitchen should run
...how a kitchen should run
...how a kitchen should run




       Any questions?
Evolving architecture
  http://leo.cuckoo.org/projects/ea/




                                Leo Lapworth
              ...
Evolving Archetecture
Upcoming SlideShare
Loading in...5
×

Evolving Archetecture

5,965

Published on


Looking at historic, current and evolving approaches, I will take you through from how we used to 'live' edit on one server with HTML in the code; to implementing Template Toolkit and 'front end / back end' servers; to the addition of version control; all the way through to distributed caching, file systems and processing (aka Six Apart worship) with 15+ servers.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,965
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
191
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Evolving Archetecture

  1. 1. Evolving architecture make development easy and your site faster Leo Lapworth @ YAPC::EU 2007 http://leo.cuckoo.org/
  2. 2. Covering
  3. 3. Covering How running websites has evolved
  4. 4. Covering How running websites has evolved Servers improved
  5. 5. Covering How running websites has evolved Servers improved Architecture improved
  6. 6. Covering How running websites has evolved Servers improved Architecture improved Development tools improved
  7. 7. Covering How running websites has evolved Servers improved Architecture improved Development tools improved Code (and code libraries) got better
  8. 8. but not...
  9. 9. but not... Covering anything in depth
  10. 10. Concepts stolen from
  11. 11. Concepts stolen from Mod_perl guide
  12. 12. Concepts stolen from Mod_perl guide Léon Brocard
  13. 13. Concepts stolen from Mod_perl guide Léon Brocard Six Apart
  14. 14. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo!
  15. 15. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo! + many other people...
  16. 16. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo! + many other people... ... this is social Perl
  17. 17. Templates
  18. 18. Templates An example of how things have improved...
  19. 19. Recognise this?
  20. 20. Recognise this? use CGI; $q = CGI->new(); $name = $q->param('name'); print $q->header('text/html'); $link = 'http://foo.com/'; print quot;<html><head><title>HTML and code together</title></head><body>quot;; print quot;<a href=quot;$link/$namequot;>quot;; print quot;Click here $name</a><br />nquot;; print quot;<table>quot; . join(quot;nquot;, map { quot;<tr><td>$_</td></tr>quot; } qw(this is hard to maintain)); print quot;</table>quot;;
  21. 21. How about...
  22. 22. How about... Now, was it cellspacing, or cellpadding I need for ie4.02?
  23. 23. and...
  24. 24. and... I'm a developer, not a designer. I shouldn't have to know this £@$%!
  25. 25. Use templates...
  26. 26. Use templates... use Template;
  27. 27. Code, not HTML
  28. 28. Code, not HTML use CGI; use Template; $q = CGI->new(); print $q->header('text/html'); my %vals = ( name = $q->param('name'), ); $template = Template->new({ INCLUDE => '/path/' }); $template->process('hello.html',%vals);
  29. 29. I just code, I have clean code and I don't have to know HTML or browser compatibility issues
  30. 30. Simple changes make a huge difference
  31. 31. Servers
  32. 32. Single server
  33. 33. Single server Internet Web server (static & dynamic) All editing Database server
  34. 34. Lots of...
  35. 35. and... I thought I only changed one thing, but it's still broken
  36. 36. 1 live server 1 development server
  37. 37. 1 live server 1 development server Internet Live server Development server Web server Web server All editing (static & dynamic) (static & dynamic) Database server Database server
  38. 38. Does not solve: What did I change last? Who changed what / when?
  39. 39. You need...
  40. 40. You need...
  41. 41. Version control & docs
  42. 42. Version control & docs Use SVK with Subversion
  43. 43. Version control & docs Use SVK with Subversion
  44. 44. Version control & docs Use SVK with Subversion Clkao - SVK
  45. 45. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) Clkao - SVK
  46. 46. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki Clkao - SVK
  47. 47. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki - task tracker Clkao - SVK
  48. 48. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki - task tracker - web interface to Subversion Clkao - SVK
  49. 49. Tests - all you need on one slide
  50. 50. Tests - all you need on one slide Write tests, write tests often
  51. 51. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often
  52. 52. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often Tests are good
  53. 53. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often Tests are good Found a bug? - write the test that replicates it. You know it's fixed when your test passes
  54. 54. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often Tests are good Found a bug? - write the test that replicates it. You know it's fixed when your test passes Use Test::More, and then test some more!
  55. 55. Making your site faster
  56. 56. mod_perl
  57. 57. mod_perl Code caching (loaded/compiled once)
  58. 58. mod_perl Code caching (loaded/compiled once) Server only spends time running the code
  59. 59. mod_perl Code caching (loaded/compiled once) Server only spends time running the code Apache::Registry for old/existing code
  60. 60. mod_perl Code caching (loaded/compiled once) Server only spends time running the code Apache::Registry for old/existing code Apache::SizeLimit (safety net)
  61. 61. mod_perl Code caching (loaded/compiled once) Server only spends time running the code Apache::Registry for old/existing code Apache::SizeLimit (safety net) Set it high
  62. 62. mod_perl Code caching (loaded/compiled once) Server only spends time running the code Apache::Registry for old/existing code Apache::SizeLimit (safety net) Set it high Check it
  63. 63. Front/back end split
  64. 64. Front/back end split Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to (dynamic) application server) Database server Development server
  65. 65. or put another way...
  66. 66. or put another way... Internet slow and demanding kids (users)
  67. 67. or put another way... Canteen Internet Front end slow and Dinner-ladies - good at demanding serving precooked kids (static) food. Can order (users) from à la carte chefs and then serve
  68. 68. or put another way... Canteen Kitchen Internet Front end Back end slow and Dinner-ladies - good at Chefs - good at demanding serving precooked making à la carte kids (static) food. Can order (dynamic) food (users) from à la carte chefs and then serve
  69. 69. Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to (dynamic) application server) Database server Development server
  70. 70. Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to (dynamic) application server) Database server Development server
  71. 71. Speed up the frequent...
  72. 72. Speed up the frequent... Are you re-creating the same objects/data structures again and again?
  73. 73. Speed up the frequent... Are you re-creating the same objects/data structures again and again? Can this information persist for a period of time?
  74. 74. Add caching
  75. 75. Add caching Persisting data for a period of time
  76. 76. Add caching Persisting data for a period of time Simple to implement:
  77. 77. Add caching Persisting data for a period of time Simple to implement: Does cache exist?
  78. 78. Add caching Persisting data for a period of time Simple to implement: Does cache exist? YES -> retrieve it and return it
  79. 79. Add caching Persisting data for a period of time Simple to implement: Does cache exist? YES -> retrieve it and return it NO -> create data/object, store in cache and return it
  80. 80. Things you might cache
  81. 81. Things you might cache Search result sets (a list of ids)
  82. 82. Things you might cache Search result sets (a list of ids) Individual items
  83. 83. Things you might cache Search result sets (a list of ids) Individual items Look-ups of information from a database
  84. 84. Things you might cache Search result sets (a list of ids) Individual items Look-ups of information from a database Fetching of information from external sources
  85. 85. Centralise
  86. 86. Centralise Put caching methods in one package
  87. 87. Centralise Put caching methods in one package Put any generic methods in a package
  88. 88. We now have a cache Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to Cache (dynamic) application server) Database server Development server
  89. 89. We now have a cache Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to Cache Cache (dynamic) application server) Database server Development server
  90. 90. Adding in the cache...
  91. 91. Adding in the cache... Internet Kids
  92. 92. Adding in the cache... Internet Front end Kids Dinner-ladies
  93. 93. Adding in the cache... Internet Back end Front end Kids Chefs Dinner-ladies
  94. 94. Adding in the cache... Cache Internet Back end Front end Magic Kids Chefs Dinner-ladies freezer
  95. 95. Coping with more traffic
  96. 96. Coping with more traffic Development Internet Stage server server (in the office) Front end Back end Web server (application server) Database (static & proxy server to application Web server server) (dynamic) Back end (application server) Web server (dynamic)
  97. 97. Coping with more traffic Development Internet Stage server server (in the office) Front end Back end Web server (application server) Database (static & proxy server to application Web server server) (dynamic) Back end (application server) Web server (dynamic)
  98. 98. That's two separate disks
  99. 99. That's two separate disks Development Internet Stage server server (in the office) Front end Back end Web server (application server) Database (static & proxy server to application Web server Cache server) (dynamic) Back end (application server) Web server Cache (dynamic)
  100. 100. Second kitchen, two freezers...
  101. 101. Second kitchen, two freezers... Internet Kids
  102. 102. Second kitchen, two freezers... Internet Front end Kids Dinner-ladies
  103. 103. Second kitchen, two freezers... Kitchen 1 Kitchen 2 Internet Front end Back end Kids Dinner-ladies Chefs
  104. 104. Second kitchen, two freezers... Kitchen 1 Kitchen 2 Internet Front end Back end Cache Kids Dinner-ladies Chefs Freezers
  105. 105. We want a cache across servers...
  106. 106. We want a cache across servers... Enter Memcache
  107. 107. We want a cache across servers... Enter Memcache See Léon Brocard's talk at 16:20 for the details
  108. 108. Development Internet Stage server server (in the office) Front end Back end Web server (application server) Database (static & proxy server to application Web server server) (dynamic) Cache Back end (application server) Web server (dynamic)
  109. 109. Shared freezer
  110. 110. Shared freezer Internet Kids
  111. 111. Shared freezer Internet Front end Kids Dinner-ladies
  112. 112. Shared freezer Kitchen 1 Kitchen 2 Internet Front end Kids Dinner-ladies Back end Chefs
  113. 113. Shared freezer Kitchen 1 Kitchen 2 Internet Front end Kids Dinner-ladies Back end Cache Chefs Freezer
  114. 114. Maintaining servers
  115. 115. Maintaining servers Keep all servers identical where possible
  116. 116. Maintaining servers Keep all servers identical where possible Package your code (e.g. .debs)
  117. 117. Maintaining servers Keep all servers identical where possible Package your code (e.g. .debs) Centralise your crontabs and configuration files (and put in version control)
  118. 118. Maintaining servers Keep all servers identical where possible Package your code (e.g. .debs) Centralise your crontabs and configuration files (and put in version control) Deploy with one script: rsync + ssh + apt-get update & apt-get upgrade (or your OS equivalent) to each server
  119. 119. Simplify further Development Internet Stage server server (in the office) Front end Back end Perlbal Web server load balancer / (static+dynamic) proxy Database Cache server Back end Web server (static+dynamic)
  120. 120. Simplify further Development Internet Stage server server (in the office) Front end Back end Perlbal Web server load balancer / (static+dynamic) proxy Database Cache server Back end Web server (static+dynamic)
  121. 121. Simplify further Development Internet Stage server server (in the office) Front end Back end Perlbal Web server load balancer / (static+dynamic) proxy Database Cache server Back end Web server (static+dynamic)
  122. 122. Waiters: cheaper, faster and less demanding
  123. 123. Waiters: cheaper, faster and less demanding Internet Kids
  124. 124. Waiters: cheaper, faster and less demanding Front end Internet Waiters - good at serving Kids quickly and dealing with annoying customers or Kitchens
  125. 125. Waiters: cheaper, faster and less demanding Kitchen 1 Kitchen 2 Front end Internet Waiters - good at serving Kids Back end quickly and dealing with annoying customers or Chefs - simple and complex meals (static and dynamic) Kitchens
  126. 126. Waiters: cheaper, faster and less demanding Kitchen 1 Kitchen 2 Front end Internet Waiters - good at serving Kids Back end quickly and dealing with Cache annoying customers or Chefs - simple and complex meals Freezer (static and dynamic) Kitchens
  127. 127. More tips for faster user experience
  128. 128. mod_gzip
  129. 129. mod_gzip HTML/css/xml
  130. 130. mod_gzip HTML/css/xml
  131. 131. mod_gzip gzip HTML/css/xml
  132. 132. mod_gzip gzip HTML/css/xml
  133. 133. mod_gzip gzip HTML/css/xml Users
  134. 134. mod_gzip gzip HTML/css/xml Users If a browser support compressions... compress (javascript can be tricky - at least minify)
  135. 135. Cache headers (expiry)
  136. 136. Cache headers (expiry)
  137. 137. Cache headers (expiry) Let web browsers know how long to cache
  138. 138. Cache somethings forever
  139. 139. Cache somethings forever /includes/js/<VERSION>/common.js
  140. 140. Cache somethings forever /includes/js/<VERSION>/common.js Ensures user has version which matches HTML (client could have cache of old HTML)
  141. 141. Cache somethings forever /includes/js/<VERSION>/common.js Ensures user has version which matches HTML (client could have cache of old HTML) Use include file to update all pages
  142. 142. Handling images: MogileFS
  143. 143. Handling images: MogileFS Store images by group (replication levels)
  144. 144. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers
  145. 145. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers Retrieve from fastest server
  146. 146. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers Retrieve from fastest server Integrate with Perlbal, hidden from the user
  147. 147. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers Retrieve from fastest server Integrate with Perlbal, hidden from the user Automatic resilience
  148. 148. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers Retrieve from fastest server Integrate with Perlbal, hidden from the user Automatic resilience
  149. 149. Basic rules to consider
  150. 150. Basic rules to consider Centralise (code/templates/configuration/ deployment etc)
  151. 151. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them
  152. 152. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them Cache if you need it; memcache is great
  153. 153. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them Cache if you need it; memcache is great Keep is simple (perlbal especially)
  154. 154. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them Cache if you need it; memcache is great Keep is simple (perlbal especially) Sometimes it's just easier to buy another server (this is not always true)
  155. 155. We covered...
  156. 156. We covered... perlbal
  157. 157. We covered... perlbal memcached
  158. 158. We covered... perlbal memcached svk (subversion)
  159. 159. We covered... perlbal memcached svk (subversion) trac
  160. 160. We covered... perlbal memcached svk (subversion) trac rsync
  161. 161. We covered... perlbal memcached svk (subversion) trac rsync gzip
  162. 162. We covered... perlbal mogileFS memcached svk (subversion) trac rsync gzip
  163. 163. We covered... perlbal mogileFS server architecture memcached svk (subversion) trac rsync gzip
  164. 164. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) trac rsync gzip
  165. 165. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac rsync gzip
  166. 166. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync gzip
  167. 167. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync HTTP Cache headers gzip
  168. 168. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync HTTP Cache headers gzip and...
  169. 169. ...how a kitchen should run
  170. 170. ...how a kitchen should run
  171. 171. ...how a kitchen should run Any questions?
  172. 172. Evolving architecture http://leo.cuckoo.org/projects/ea/ Leo Lapworth http://leo.cuckoo.org/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×