SlideShare una empresa de Scribd logo
1 de 173
Descargar para leer sin conexión
Evolving architecture
make development easy and your site faster




                        Leo Lapworth @ YAPC::EU 2007
                                 http://leo.cuckoo.org/
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 (and code libraries) got better
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...

                          ... this is social Perl
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.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;;
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('name'),
);

$template =
	 Template->new({ INCLUDE => '/path/' });
$template->process('hello.html',%vals);
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 editing
       Database server
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            Web server
                                            All editing
 (static & dynamic)    (static & dynamic)

 Database server       Database 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)




Clkao - SVK
Version control & docs

              Use SVK with Subversion


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



Clkao - SVK
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)
              - wiki
              - task tracker


Clkao - SVK
Version control & docs

              Use SVK with Subversion


              Use Trac (http://trac.edgewall.org)
              - wiki
              - task tracker
              - web interface to Subversion

Clkao - SVK
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? - write the test that replicates it.
You know it's fixed when your test passes
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!
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 code
mod_perl
 Code caching (loaded/compiled once)
 Server only spends time running the code
 Apache::Registry for old/existing code
 Apache::SizeLimit (safety net)
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
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
Front/back end split
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
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
demanding       serving precooked
     kids    (static) food. Can order
   (users)     from à la carte chefs
                  and then serve
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
Internet



          Slow
                                         Back end
    Front end
                                    (application server)
                          Fast
    Web server
                                        Web server
 (static & proxy to
                                        (dynamic)
application server)
                                     Database server


                      Development
                         server
Internet



          Slow
                                         Back end
    Front end
                                    (application server)
                          Fast
    Web server
                                        Web server
 (static & proxy to
                                        (dynamic)
application server)
                                     Database server


                      Development
                         server
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 persist for a period of
  time?
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 return it
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
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
 Fetching of information from external sources
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
       Front end
                                       (application server)
                             Fast
       Web server
                                           Web server
    (static & proxy to                                   Cache
                                           (dynamic)
   application server)
                                        Database server


                         Development
                            server
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
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
           Dinner-ladies
Adding in the cache...




                                       Cache
Internet                   Back end
            Front end                  Magic
  Kids                      Chefs
           Dinner-ladies              freezer
Coping with more traffic
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)
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)
That's two separate disks
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)
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    Front end      Back end
  Kids     Dinner-ladies    Chefs
Second kitchen, two
freezers...
                           Kitchen 1



                           Kitchen 2



Internet    Front end      Back end     Cache
  Kids     Dinner-ladies    Chefs      Freezers
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
               at 16:20 for the details
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)
Shared freezer
Shared freezer




Internet
  Kids
Shared freezer




Internet    Front end
  Kids     Dinner-ladies
Shared freezer

                           Kitchen 1



                           Kitchen 2

Internet    Front end
  Kids     Dinner-ladies    Back end
                             Chefs
Shared freezer

                           Kitchen 1



                           Kitchen 2

Internet    Front end
  Kids     Dinner-ladies    Back end    Cache
                             Chefs     Freezer
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 crontabs and configuration files
  (and put in version control)
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
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)
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)
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)
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
  Kids
           quickly and dealing with
            annoying customers or
                   Kitchens
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
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
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 compressions... compress
      (javascript can be tricky - at least minify)
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 have cache of old HTML)
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
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 fastest server
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
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
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
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 you need it; memcache is great
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)
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)
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
  rsync
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test::More
  svk (subversion)
  trac
  rsync
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test::More
  svk (subversion)
                     mod_perl
  trac
  rsync
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test::More
  svk (subversion)
                     mod_perl
  trac
                     Template::Toolkit
  rsync
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test::More
  svk (subversion)
                     mod_perl
  trac
                     Template::Toolkit
  rsync
                     HTTP Cache headers
  gzip
We covered...
  perlbal            mogileFS
                     server architecture
  memcached
                     Test::More
  svk (subversion)
                     mod_perl
  trac
                     Template::Toolkit
  rsync
                     HTTP Cache headers
  gzip

                                    and...
...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
                       http://leo.cuckoo.org/

Más contenido relacionado

La actualidad más candente

Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Louis Jacomet
 
LinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akkanartamonov
 
Terracotta's OffHeap Explained
Terracotta's OffHeap ExplainedTerracotta's OffHeap Explained
Terracotta's OffHeap ExplainedChris Dennis
 
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)jaxLondonConference
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCCal Henderson
 
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and ScalabilitySolving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and ScalabilityZendCon
 
Kafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersKafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersJean-Paul Azar
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Konrad Malawski
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
Concurrency in Scala - the Akka way
Concurrency in Scala - the Akka wayConcurrency in Scala - the Akka way
Concurrency in Scala - the Akka wayYardena Meymann
 
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Hiroshi Ono
 
Pacemaker: OpenStack's Pid 1
Pacemaker: OpenStack's Pid 1Pacemaker: OpenStack's Pid 1
Pacemaker: OpenStack's Pid 1David Vossel
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn
 
Linkedin NUS QCon 2009 slides
Linkedin NUS QCon 2009 slidesLinkedin NUS QCon 2009 slides
Linkedin NUS QCon 2009 slidesruslansv
 

La actualidad más candente (20)

Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3
 
LinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn Communication Architecture
LinkedIn Communication Architecture
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akka
 
Terracotta's OffHeap Explained
Terracotta's OffHeap ExplainedTerracotta's OffHeap Explained
Terracotta's OffHeap Explained
 
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
 
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and ScalabilitySolving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
 
Kafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersKafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced Producers
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016
 
Wt unit 1 ppts web development process
Wt unit 1 ppts web development processWt unit 1 ppts web development process
Wt unit 1 ppts web development process
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Ehcache 3 @ BruJUG
Ehcache 3 @ BruJUGEhcache 3 @ BruJUG
Ehcache 3 @ BruJUG
 
Wt unit 3 server side technology
Wt unit 3 server side technologyWt unit 3 server side technology
Wt unit 3 server side technology
 
Concurrency in Scala - the Akka way
Concurrency in Scala - the Akka wayConcurrency in Scala - the Akka way
Concurrency in Scala - the Akka way
 
Virtualization and Containers
Virtualization and ContainersVirtualization and Containers
Virtualization and Containers
 
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
 
Pacemaker: OpenStack's Pid 1
Pacemaker: OpenStack's Pid 1Pacemaker: OpenStack's Pid 1
Pacemaker: OpenStack's Pid 1
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
 
Linkedin NUS QCon 2009 slides
Linkedin NUS QCon 2009 slidesLinkedin NUS QCon 2009 slides
Linkedin NUS QCon 2009 slides
 
Top ten-list
Top ten-listTop ten-list
Top ten-list
 

Destacado

eHealth companies Overview
eHealth companies OvervieweHealth companies Overview
eHealth companies Overviewmarialafuente
 
Drupal opleiding
Drupal opleidingDrupal opleiding
Drupal opleidingHans Rossel
 
Evolving Architecture - Further
Evolving Architecture - FurtherEvolving Architecture - Further
Evolving Architecture - Furtherleo lapworth
 
Evolving an Application Architecture
Evolving an Application ArchitectureEvolving an Application Architecture
Evolving an Application ArchitectureGarret Fick
 
Software design principles for evolving architectures
Software design principles for evolving architecturesSoftware design principles for evolving architectures
Software design principles for evolving architecturesFirat Atagun
 
Awakening to a long forgotten resource
Awakening to a long forgotten resourceAwakening to a long forgotten resource
Awakening to a long forgotten resourceHeba Hashem
 
Architecture in Ancient Civilizations
Architecture in Ancient CivilizationsArchitecture in Ancient Civilizations
Architecture in Ancient Civilizationsborisv390
 
Alexandria university site analysis
Alexandria university site analysisAlexandria university site analysis
Alexandria university site analysisAhmed Mamdouh
 
The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...
 The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد... The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...
The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...Imén Chhoumi
 
2. نظرية المحاكاة
2.  نظرية المحاكاة2.  نظرية المحاكاة
2. نظرية المحاكاةMulyadi O
 
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...Abdulwahab Jarrah
 
المحاضرة الرابعة السابعة
المحاضرة الرابعة  السابعةالمحاضرة الرابعة  السابعة
المحاضرة الرابعة السابعةArcshawki
 
Walter gropius- والتر جروبيوس- عمارة الحداثة
Walter gropius- والتر جروبيوس- عمارة الحداثةWalter gropius- والتر جروبيوس- عمارة الحداثة
Walter gropius- والتر جروبيوس- عمارة الحداثةnada khaled
 
التعريف بقسم العمارة
التعريف بقسم العمارة التعريف بقسم العمارة
التعريف بقسم العمارة mohamed wahdan
 

Destacado (20)

eHealth companies Overview
eHealth companies OvervieweHealth companies Overview
eHealth companies Overview
 
Drupal opleiding
Drupal opleidingDrupal opleiding
Drupal opleiding
 
Evolving Architecture - Further
Evolving Architecture - FurtherEvolving Architecture - Further
Evolving Architecture - Further
 
Evolving an Application Architecture
Evolving an Application ArchitectureEvolving an Application Architecture
Evolving an Application Architecture
 
Arch and env2
Arch and env2Arch and env2
Arch and env2
 
Software design principles for evolving architectures
Software design principles for evolving architecturesSoftware design principles for evolving architectures
Software design principles for evolving architectures
 
Awakening to a long forgotten resource
Awakening to a long forgotten resourceAwakening to a long forgotten resource
Awakening to a long forgotten resource
 
Architecture in Ancient Civilizations
Architecture in Ancient CivilizationsArchitecture in Ancient Civilizations
Architecture in Ancient Civilizations
 
Alexandria university site analysis
Alexandria university site analysisAlexandria university site analysis
Alexandria university site analysis
 
Site analysis
Site analysisSite analysis
Site analysis
 
Site Analysis
Site Analysis Site Analysis
Site Analysis
 
Site Analysis
Site Analysis Site Analysis
Site Analysis
 
Site Analysis
Site AnalysisSite Analysis
Site Analysis
 
RIBA [ In Arabic ]
RIBA [ In Arabic ]RIBA [ In Arabic ]
RIBA [ In Arabic ]
 
The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...
 The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد... The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...
The image of the city-chapter 1+chapter5- tripolis-libya الصورة الذهنية للمد...
 
2. نظرية المحاكاة
2.  نظرية المحاكاة2.  نظرية المحاكاة
2. نظرية المحاكاة
 
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...
research about design basics of residential towers - حلقة بحث عن اسس تصميم ال...
 
المحاضرة الرابعة السابعة
المحاضرة الرابعة  السابعةالمحاضرة الرابعة  السابعة
المحاضرة الرابعة السابعة
 
Walter gropius- والتر جروبيوس- عمارة الحداثة
Walter gropius- والتر جروبيوس- عمارة الحداثةWalter gropius- والتر جروبيوس- عمارة الحداثة
Walter gropius- والتر جروبيوس- عمارة الحداثة
 
التعريف بقسم العمارة
التعريف بقسم العمارة التعريف بقسم العمارة
التعريف بقسم العمارة
 

Similar a Evolving Archetecture

Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Embrace NoSQL and Eventual Consistency with Ripple
Embrace NoSQL and Eventual Consistency with RippleEmbrace NoSQL and Eventual Consistency with Ripple
Embrace NoSQL and Eventual Consistency with RippleSean Cribbs
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRaymond Camden
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
Profiling php applications
Profiling php applicationsProfiling php applications
Profiling php applicationsJustin Carmony
 
NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncaimoncai
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - DeploymentFabio Akita
 
Real-World Pulsar Architectural Patterns
Real-World Pulsar Architectural PatternsReal-World Pulsar Architectural Patterns
Real-World Pulsar Architectural PatternsDevin Bost
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Continuous Deployment: The Dirty Details
Continuous Deployment: The Dirty DetailsContinuous Deployment: The Dirty Details
Continuous Deployment: The Dirty DetailsMike Brittain
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011Mike Willbanks
 
MLOps with a Feature Store: Filling the Gap in ML Infrastructure
MLOps with a Feature Store: Filling the Gap in ML InfrastructureMLOps with a Feature Store: Filling the Gap in ML Infrastructure
MLOps with a Feature Store: Filling the Gap in ML InfrastructureData Science Milan
 
Google Devfest 2009 Argentina - Intro to Appengine
Google Devfest 2009 Argentina - Intro to AppengineGoogle Devfest 2009 Argentina - Intro to Appengine
Google Devfest 2009 Argentina - Intro to AppenginePatrick Chanezon
 
Quilt - Distributed Load Simulation from AWS
Quilt - Distributed Load Simulation from AWSQuilt - Distributed Load Simulation from AWS
Quilt - Distributed Load Simulation from AWSAjith Jose
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Server Monitoring (Scaling while bootstrapped)
Server Monitoring  (Scaling while bootstrapped)Server Monitoring  (Scaling while bootstrapped)
Server Monitoring (Scaling while bootstrapped)Ajibola Aiyedogbon
 
Offline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo OfflineOffline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo Offlineguestcb5c22
 
AWS Customer Presentation - Conde Nast
AWS Customer Presentation - Conde NastAWS Customer Presentation - Conde Nast
AWS Customer Presentation - Conde NastAmazon Web Services
 
Rails Asset Pipeline - What, Why, Tips, Do's and Dont's
Rails Asset Pipeline - What, Why, Tips, Do's and Dont'sRails Asset Pipeline - What, Why, Tips, Do's and Dont's
Rails Asset Pipeline - What, Why, Tips, Do's and Dont'sRohan Daxini
 

Similar a Evolving Archetecture (20)

Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Embrace NoSQL and Eventual Consistency with Ripple
Embrace NoSQL and Eventual Consistency with RippleEmbrace NoSQL and Eventual Consistency with Ripple
Embrace NoSQL and Eventual Consistency with Ripple
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoop
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
Web server
Web serverWeb server
Web server
 
Profiling php applications
Profiling php applicationsProfiling php applications
Profiling php applications
 
NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncai
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Real-World Pulsar Architectural Patterns
Real-World Pulsar Architectural PatternsReal-World Pulsar Architectural Patterns
Real-World Pulsar Architectural Patterns
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Continuous Deployment: The Dirty Details
Continuous Deployment: The Dirty DetailsContinuous Deployment: The Dirty Details
Continuous Deployment: The Dirty Details
 
MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011MNPHP Scalable Architecture 101 - Feb 3 2011
MNPHP Scalable Architecture 101 - Feb 3 2011
 
MLOps with a Feature Store: Filling the Gap in ML Infrastructure
MLOps with a Feature Store: Filling the Gap in ML InfrastructureMLOps with a Feature Store: Filling the Gap in ML Infrastructure
MLOps with a Feature Store: Filling the Gap in ML Infrastructure
 
Google Devfest 2009 Argentina - Intro to Appengine
Google Devfest 2009 Argentina - Intro to AppengineGoogle Devfest 2009 Argentina - Intro to Appengine
Google Devfest 2009 Argentina - Intro to Appengine
 
Quilt - Distributed Load Simulation from AWS
Quilt - Distributed Load Simulation from AWSQuilt - Distributed Load Simulation from AWS
Quilt - Distributed Load Simulation from AWS
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Server Monitoring (Scaling while bootstrapped)
Server Monitoring  (Scaling while bootstrapped)Server Monitoring  (Scaling while bootstrapped)
Server Monitoring (Scaling while bootstrapped)
 
Offline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo OfflineOffline capable web applications with Google Gears and Dojo Offline
Offline capable web applications with Google Gears and Dojo Offline
 
AWS Customer Presentation - Conde Nast
AWS Customer Presentation - Conde NastAWS Customer Presentation - Conde Nast
AWS Customer Presentation - Conde Nast
 
Rails Asset Pipeline - What, Why, Tips, Do's and Dont's
Rails Asset Pipeline - What, Why, Tips, Do's and Dont'sRails Asset Pipeline - What, Why, Tips, Do's and Dont's
Rails Asset Pipeline - What, Why, Tips, Do's and Dont's
 

Último

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Último (20)

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Evolving Archetecture

  • 1. Evolving architecture make development easy and your site faster Leo Lapworth @ YAPC::EU 2007 http://leo.cuckoo.org/
  • 3. Covering How running websites has evolved
  • 4. Covering How running websites has evolved Servers improved
  • 5. Covering How running websites has evolved Servers improved Architecture improved
  • 6. Covering How running websites has evolved Servers improved Architecture improved Development tools improved
  • 7. Covering How running websites has evolved Servers improved Architecture improved Development tools improved Code (and code libraries) got better
  • 9. but not... Covering anything in depth
  • 11. Concepts stolen from Mod_perl guide
  • 12. Concepts stolen from Mod_perl guide Léon Brocard
  • 13. Concepts stolen from Mod_perl guide Léon Brocard Six Apart
  • 14. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo!
  • 15. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo! + many other people...
  • 16. Concepts stolen from Mod_perl guide Léon Brocard Six Apart Yahoo! + many other people... ... this is social Perl
  • 18. Templates An example of how things have improved...
  • 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;;
  • 22. How about... Now, was it cellspacing, or cellpadding I need for ie4.02?
  • 24. and... I'm a developer, not a designer. I shouldn't have to know this £@$%!
  • 26. Use templates... use Template;
  • 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. I just code, I have clean code and I don't have to know HTML or browser compatibility issues
  • 30. Simple changes make a huge difference
  • 33. Single server Internet Web server (static & dynamic) All editing Database server
  • 35. and... I thought I only changed one thing, but it's still broken
  • 36. 1 live server 1 development server
  • 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. Does not solve: What did I change last? Who changed what / when?
  • 42. Version control & docs Use SVK with Subversion
  • 43. Version control & docs Use SVK with Subversion
  • 44. Version control & docs Use SVK with Subversion Clkao - SVK
  • 45. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) Clkao - SVK
  • 46. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki Clkao - SVK
  • 47. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki - task tracker Clkao - SVK
  • 48. Version control & docs Use SVK with Subversion Use Trac (http://trac.edgewall.org) - wiki - task tracker - web interface to Subversion Clkao - SVK
  • 49.
  • 50. Tests - all you need on one slide
  • 51. Tests - all you need on one slide Write tests, write tests often
  • 52. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often
  • 53. Tests - all you need on one slide Write tests, write tests often Run tests, run tests often Tests are good
  • 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
  • 55. 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!
  • 58. mod_perl Code caching (loaded/compiled once)
  • 59. mod_perl Code caching (loaded/compiled once) Server only spends time running the code
  • 60. mod_perl Code caching (loaded/compiled once) Server only spends time running the code Apache::Registry for old/existing code
  • 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)
  • 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
  • 63. 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
  • 65. 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
  • 66. or put another way...
  • 67. or put another way... Internet slow and demanding kids (users)
  • 68. 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
  • 69. 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
  • 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. Internet Slow Back end Front end (application server) Fast Web server Web server (static & proxy to (dynamic) application server) Database server Development server
  • 72. Speed up the frequent...
  • 73. Speed up the frequent... Are you re-creating the same objects/data structures again and again?
  • 74. 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?
  • 76. Add caching Persisting data for a period of time
  • 77. Add caching Persisting data for a period of time Simple to implement:
  • 78. Add caching Persisting data for a period of time Simple to implement: Does cache exist?
  • 79. Add caching Persisting data for a period of time Simple to implement: Does cache exist? YES -> retrieve it and return it
  • 80. 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
  • 82. Things you might cache Search result sets (a list of ids)
  • 83. Things you might cache Search result sets (a list of ids) Individual items
  • 84. Things you might cache Search result sets (a list of ids) Individual items Look-ups of information from a database
  • 85. 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
  • 87. Centralise Put caching methods in one package
  • 88. Centralise Put caching methods in one package Put any generic methods in a package
  • 89. 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
  • 90. 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
  • 91. Adding in the cache...
  • 92. Adding in the cache... Internet Kids
  • 93. Adding in the cache... Internet Front end Kids Dinner-ladies
  • 94. Adding in the cache... Internet Back end Front end Kids Chefs Dinner-ladies
  • 95. Adding in the cache... Cache Internet Back end Front end Magic Kids Chefs Dinner-ladies freezer
  • 96. Coping with more traffic
  • 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. 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)
  • 100. 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)
  • 103. Second kitchen, two freezers... Internet Front end Kids Dinner-ladies
  • 104. Second kitchen, two freezers... Kitchen 1 Kitchen 2 Internet Front end Back end Kids Dinner-ladies Chefs
  • 105. Second kitchen, two freezers... Kitchen 1 Kitchen 2 Internet Front end Back end Cache Kids Dinner-ladies Chefs Freezers
  • 106. We want a cache across servers...
  • 107. We want a cache across servers... Enter Memcache
  • 108. We want a cache across servers... Enter Memcache See Léon Brocard's talk at 16:20 for the details
  • 109. 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)
  • 112. Shared freezer Internet Front end Kids Dinner-ladies
  • 113. Shared freezer Kitchen 1 Kitchen 2 Internet Front end Kids Dinner-ladies Back end Chefs
  • 114. Shared freezer Kitchen 1 Kitchen 2 Internet Front end Kids Dinner-ladies Back end Cache Chefs Freezer
  • 116. Maintaining servers Keep all servers identical where possible
  • 117. Maintaining servers Keep all servers identical where possible Package your code (e.g. .debs)
  • 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)
  • 119. 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
  • 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. 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. 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)
  • 123. Waiters: cheaper, faster and less demanding
  • 124. Waiters: cheaper, faster and less demanding Internet Kids
  • 125. Waiters: cheaper, faster and less demanding Front end Internet Waiters - good at serving Kids quickly and dealing with annoying customers or Kitchens
  • 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 annoying customers or Chefs - simple and complex meals (static and dynamic) Kitchens
  • 127. 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
  • 128. More tips for faster user experience
  • 132. mod_gzip gzip HTML/css/xml
  • 133. mod_gzip gzip HTML/css/xml
  • 134. mod_gzip gzip HTML/css/xml Users
  • 135. mod_gzip gzip HTML/css/xml Users If a browser support compressions... compress (javascript can be tricky - at least minify)
  • 138. Cache headers (expiry) Let web browsers know how long to cache
  • 140. Cache somethings forever /includes/js/<VERSION>/common.js
  • 141. Cache somethings forever /includes/js/<VERSION>/common.js Ensures user has version which matches HTML (client could have cache of old HTML)
  • 142. 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
  • 144. Handling images: MogileFS Store images by group (replication levels)
  • 145. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers
  • 146. Handling images: MogileFS Store images by group (replication levels) Spread IO across disks & servers Retrieve from fastest server
  • 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
  • 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. 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
  • 150. Basic rules to consider
  • 151. Basic rules to consider Centralise (code/templates/configuration/ deployment etc)
  • 152. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them
  • 153. Basic rules to consider Centralise (code/templates/configuration/ deployment etc) Test, run lots of them Cache if you need it; memcache is great
  • 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)
  • 155. 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)
  • 157. We covered... perlbal
  • 158. We covered... perlbal memcached
  • 159. We covered... perlbal memcached svk (subversion)
  • 160. We covered... perlbal memcached svk (subversion) trac
  • 161. We covered... perlbal memcached svk (subversion) trac rsync
  • 162. We covered... perlbal memcached svk (subversion) trac rsync gzip
  • 163. We covered... perlbal mogileFS memcached svk (subversion) trac rsync gzip
  • 164. We covered... perlbal mogileFS server architecture memcached svk (subversion) trac rsync gzip
  • 165. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) trac rsync gzip
  • 166. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac rsync gzip
  • 167. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync gzip
  • 168. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync HTTP Cache headers gzip
  • 169. We covered... perlbal mogileFS server architecture memcached Test::More svk (subversion) mod_perl trac Template::Toolkit rsync HTTP Cache headers gzip and...
  • 170. ...how a kitchen should run
  • 171. ...how a kitchen should run
  • 172. ...how a kitchen should run Any questions?
  • 173. Evolving architecture http://leo.cuckoo.org/projects/ea/ Leo Lapworth http://leo.cuckoo.org/