Scalable                              Architectures 101                                             ConFoo                ...
Who am I?     ●   Software Development Manager     ●   Organizer of MNPHP / MNMySQL     ●   Zend Certified Engineer (PHP/Z...
Scalability?          Your application is growing, your systems are slowing                         and growth is inevitab...
The Beginning                          Single Server Syndrome      ●   One Server Many Functions          ●   Web Server, ...
     
The Next Step                        Single Separation Syndrome      ●   Separation of Web and Database          ●   Fix t...
Uh, oh :(             
     Load Balancing              
A Load Balanced Environment                         
Load Balancing Options      ●   DNS Rotation (Little to No Cost)          ●   Not reliable, but it can work on a small sca...
Load Balancing Routing Types      ●   Round Robin                ●   URI      ●   Static                     ●   URI Param...
Targeting Open Source Software Packages      ●   Out of the many options we will focus in on 3          ●   HAProxy – By a...
HAProxy     ●   Pros         ●   Extremely full featured         ●   Very well known         ●   Handles just about every ...
HAProxy: Sample Configuration  global                               listen     localhost 0.0.0.0:80      log 127.0.0.1    ...
Pound     ●   Pros         ●   chroot support         ●   Native SSL support         ●   Insanely simple setup         ●  ...
Pound: Sample Configuration  User         "www-data"  Group        "www-data"  LogLevel     1  Alive       30  Control "/v...
Varnish      ●   Pros          ●   Supports front­end caching          ●   Farily simple setup          ●   Extremely well...
Varnish: Sample Configuration  backend default1 {         director default round-robin {      .host = "127.0.0.1";       {...
Load Balancing: Keep in Mind      ●   Web Servers          ●   One always needs to be available          ●   Dont use SSL ...
     Web Servers            
Many Web Servers     ●   Apache     ●   IIS     ●   Nginx     ●   Lighttpd     ●   etc.                     
Web Server Configuration      ●   Sever name should be the same on all servers          ●   Make a server alias so you can...
Web Servers: Keep in Mind      ●   Files          ●   All web servers need our files.          ●   Static content could be...
Web Servers: Other Information      ●   Running PHP on your web server may be a           resource hog, you may want to of...
Database     Servers        
Single Database Server                         Single Database Server      ●   Lots of options and steps as we move forwar...
Database Replication                         Single Master, Single Slave      ●   Write code that can write to the master ...
Database Replication Multiple Slaves                       Single Master, Multiple Slaves      ●   It is a great time to s...
Database Replication Multiple Everything                    Multiple Master, Multiple Slaves      ●   Do NOT write to both...
Database Table Partitioning                             Segmenting your Data      ●   Vertical Partitioning          ●   M...
Database Servers: Keep in Mind      ●   Replication          ●   There may be a lag!          ●   All reports / read queri...
Cache    Servers     (not full page)             
Cache Servers: What Type?              “Caching is imperative in scaling and performance”          ●   Single Server      ...
Caching: Single Server                             In The Beginning      ●   Single Caching Server      ●   Start to cache...
Caching: Going Distributed                            Distributed Mania      ●   Write based on consistent hashing (hash o...
Caching: Read / Write with a Database               In the most simple form...                           
Caching: Keep in Mind      ●   Replicated or not...      ●   Elasticity          ●   Consistent hashing – cannot add or re...
Job      Servers    (message queues)            
“Message queues and mailboxes are software­engineering   components used for interprocess communication, or for inter­thre...
Messages: Theyre Everywhere                         
Message Queues: What are They?     ●   A FIFO buffer     ●   Asynchronous push / pull     ●   An application framework for...
Message Queues: The Basic Concept                            Single Job Server         Producer             Message Queue ...
Message Queue: Going Distributed                               Distributed Mania                           Producer   Prod...
Message Queues: Useful for?      ●   Asynchronous Processing      ●   Communication between Applications / Systems      ● ...
Message Queues: Keep in Mind      ●   Replication or not?      ●   You need to keep your workers running          ●   Supe...
     DNS Servers            
DNS Servers: Are you running your own?      ●   Just about every domain registrar runs DNS          ●   If you dont need t...
DNS Servers: Identifying a Good Service      ●   Wildcard support      ●   Failover / Distributed      ●   CNAME support  ...
     CDN Servers            
CDN: What is a CDN?     ●   A content delivery network or content distribution network          (CDN) is a system of compu...
CDN: Why Use One?     ●   Extremely fast at serving files     ●   Increased serving capacity     ●   Distributed nodes    ...
CDN: The Types     ●   Origin Pull         ●   Utilizes your own web server and pulls the content              and stores ...
CDN: What Should I Use?      ●   Depends on your need...      ●   Origin Pull is great if you want to maintain all of     ...
     Mail Servers             
Mail Servers: A Quick Note      ●   Google Apps – just offload it!      ●   If you do not need to run a mail server dont. ...
Front­End    Performance          
Front­End Performance: Points      ●   Tactics          ●   Minification (JavaScript / CSS)              –   PHP 5.3 libra...
Front­End Performance: Tools      ●   Tools for Identifying Areas          ●   Yslow          ●   Firebug          ●   Goo...
Questions?    Mike Willbanks         Blog : http://blog.digitalstruct.com     Twitter : mwillbanks          IRC : lubs on ...
Upcoming SlideShare
Loading in...5
×

Scalable Architecture 101

4,783

Published on

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

No Downloads
Views
Total Views
4,783
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
89
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Scalable Architecture 101

  1. 1. Scalable Architectures 101 ConFoo Mar 10, 2011 Mike Willbanks    Blog: http://blog.digitalstruct.com Twitter: mwillbanks      IRC: lubs on freenode   
  2. 2. Who am I? ● Software Development Manager ● Organizer of MNPHP / MNMySQL ● Zend Certified Engineer (PHP/ZF)    
  3. 3. Scalability? Your application is growing, your systems are slowing  and growth is inevitable...  ● Where do we go from here? ● Load Balancing ● Job Servers ● Web Servers ● DNS Servers ● CDN Servers ● Database Servers ● Cache Servers ● Front­End Performance    
  4. 4. The Beginning Single Server Syndrome ● One Server Many Functions ● Web Server, Database Server, Cache Server, Job  Server, DNS Server, Mail Server.... ● How we know its time ● iostat, cpu load, overall degradation   ● OR.....  
  5. 5.    
  6. 6. The Next Step Single Separation Syndrome ● Separation of Web and Database ● Fix the main disk I/O bottleneck. ● Still generally running several things on a single  server.    
  7. 7. Uh, oh :(    
  8. 8.      Load Balancing   
  9. 9. A Load Balanced Environment    
  10. 10. Load Balancing Options ● DNS Rotation (Little to No Cost) ● Not reliable, but it can work on a small scale. ● Software Based (Commodity Server Cost) ● HAProxy, Pound, Varnish, Squid, Wackamole,  Perlbal, Web Server Proxy (Nginx, Apache, etc)... ● Hardware Based (High Cost Appliance) ● Several vendors ranging based on need. – A10, F5, etc.    
  11. 11. Load Balancing Routing Types ● Round Robin ● URI ● Static ● URI Parameter ● Least Connections ● Header ● Source ● Cookie ● IP ● Regular Expression ● Basic Authentication    
  12. 12. Targeting Open Source Software Packages ● Out of the many options we will focus in on 3 ● HAProxy – By and large one of the most popular. ● Pound – Said to be great for medium traffic sites. ● Varnish – A caching solution that also does load  balancing    
  13. 13. HAProxy ● Pros ● Extremely full featured ● Very well known ● Handles just about every type of routing ● Several examples online ● Has a web­based GUI ● Cons ● No native SSL support (use Stunnel) ● Setup can be complex and take a lot of time    
  14. 14. HAProxy: Sample Configuration global listen localhost 0.0.0.0:80 log 127.0.0.1 local0 option httpchk GET / log 127.0.0.1 local1 notice balance roundrobin maxconn 4096 cookie SERVERID user haproxy server serv1 0.0.0.0:8080 check group haproxy inter 2000 rise 2 fall 5 daemon server serv2 0.0.0.0:8080 check inter 2000 rise 2 fall 5 defaults option httpclose log global stats enable mode http stats uri /lb?stats option httplog stats realm haproxy option dontlognull stats auth test:test retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000    
  15. 15. Pound ● Pros ● chroot support ● Native SSL support ● Insanely simple setup ● Supports virtually all types of routing ● Many online tutorials ● Cons ● No web­based statistics (use poundctl) ● HAProxy can scale more...    
  16. 16. Pound: Sample Configuration User "www-data" Group "www-data" LogLevel 1 Alive 30 Control "/var/run/pound/poundctl.socket" ListenHTTP Address 127.0.0.1 Port 80 xHTTP 0 Service BackEnd Address 127.0.0.1 Port 8080 End BackEnd Address 127.0.0.1 Port 8080 End End End    
  17. 17. Varnish ● Pros ● Supports front­end caching ● Farily simple setup ● Extremely well known ● Many online tutorials ● Large suite of tools (varnishstat, varnishtop,  varnishlog, varnishreplay, varnishncsa) ● Cons ● No native SSL support (use Pound or Stunnel) ● If you want a WebGUI you must PAY    
  18. 18. Varnish: Sample Configuration backend default1 { director default round-robin { .host = "127.0.0.1"; { .port = "8080"; .backend = default1; .probe = { } .url = "/"; { .interval = 5s; .backend = default2; .timeout = 1s; } .window = 5; } .threshold = 3; } sub vcl_recv { } if (req.http.host ~ "^127.0.0.1$") { set req.backend = default; backend default2 { } .host = "127.0.0.1"; } .port = "8080"; .probe = { .url = "/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } }    
  19. 19. Load Balancing: Keep in Mind ● Web Servers ● One always needs to be available ● Dont use SSL on the web server level! ● Headers ● Pass headers if SSL is on or not ● Client IP is likely on X­forwarded­for ● If using Virtual Hosts pass the Host ● Sessions ● Need a solution if not using sticky routing    
  20. 20.      Web Servers   
  21. 21. Many Web Servers ● Apache ● IIS ● Nginx ● Lighttpd ● etc.    
  22. 22. Web Server Configuration ● Sever name should be the same on all servers ● Make a server alias so you can reach individual  servers w/o load balancing ● Each configuration SHOULD or MUST be the  same. ● Client IP generally is in X­forwarded­for. ● SSL will not be in $_SERVER[HTTPS] and  HTTP_ header instead.    
  23. 23. Web Servers: Keep in Mind ● Files ● All web servers need our files. ● Static content could be tagged in version control. ● Static content may need a file server / CDN / etc. ● User Generated content on NFS mount or served  from the cloud or a CDN. ● Sessions ● All web servers need access to our sessions. ● Remember disk is slow and the database will be a  bottleneck.  How about distributed caching?    
  24. 24. Web Servers: Other Information ● Running PHP on your web server may be a  resource hog, you may want to offload static  content requests to varnish, nginx, lighttpd or  some other lightweight web server. ● Running a proxy to your main web servers works  great for hardworking processes.  While serving  static content from the lightweight server.    
  25. 25. Database Servers   
  26. 26. Single Database Server Single Database Server ● Lots of options and steps as we move forward.    
  27. 27. Database Replication Single Master, Single Slave ● Write code that can write to the master and read from  the slave. ● Exception: Be smart, dont write to the master and  read from the slave on the table you just wrote to.    
  28. 28. Database Replication Multiple Slaves Single Master, Multiple Slaves ● It is a great time to start to implement connection  pooling.    
  29. 29. Database Replication Multiple Everything Multiple Master, Multiple Slaves ● Do NOT write to both masters at once with MySQL! ● Be warned, auto­incrementing now should change so  you do not conflict.    
  30. 30. Database Table Partitioning Segmenting your Data ● Vertical Partitioning ● Move less accessed columns, large data columns  and columns not likely in the where to other tables. ● Horizontal Partitioning ● Done by moving rows into different tables. – Based on Range, Date, User or Interlaced – May require duplicate lookup tables for different  indexes.    
  31. 31. Database Servers: Keep in Mind ● Replication ● There may be a lag! ● All reports / read queries should go here ● Dont read here directly after a write – Transactions / Lag / etc. ● Sessions ● Never store sessions in the DB – Large binlogs, garbage collection causes slow queries,  queue may fill up and cause a crash or max connections.    
  32. 32. Cache Servers (not full page)   
  33. 33. Cache Servers: What Type? “Caching is imperative in scaling and performance” ● Single Server – Shared Memory: APC / Xcache / etc – File Based: Files / Sqlite / etc – Not highly scalable, great for configuration files. ● Distributed – Memcached, Redis, etc. – Setup consistent hashing. ● Do not cache what cannot be re­created.    
  34. 34. Caching: Single Server In The Beginning ● Single Caching Server ● Start to cache fetches, invalidate cache on write and  write new cache, always reading from the cache.    
  35. 35. Caching: Going Distributed Distributed Mania ● Write based on consistent hashing (hash of a key that  you are writing)  ● Server depends on the hash. ● Hint – use the memcached pecl extension.    
  36. 36. Caching: Read / Write with a Database In the most simple form...    
  37. 37. Caching: Keep in Mind ● Replicated or not... ● Elasticity ● Consistent hashing – cannot add or remove w/o losing data ● Sessions ● Store me here... please please please! ● Memory Caches ● Durability ­ If it fails, its gone! ● Ensure dedicated memory! ● If you run out of memory, does it remove an old and add the  new or not allow anything to come in?    
  38. 38. Job Servers (message queues)   
  39. 39. “Message queues and mailboxes are software­engineering  components used for interprocess communication, or for inter­thread communication within the same process. They use a queue  for messaging – the passing of control or of content.” http://en.wikipedia.org/wiki/Message_queue   
  40. 40. Messages: Theyre Everywhere    
  41. 41. Message Queues: What are They? ● A FIFO buffer ● Asynchronous push / pull ● An application framework for sending and  receiving messages. ● A way to communicate between applications /  systems. ● A way to decouple components. ● A way to offload work.    
  42. 42. Message Queues: The Basic Concept Single Job Server Producer Message Queue Consumer Queue Receive Server ● Lots of options and steps as we move forward.    
  43. 43. Message Queue: Going Distributed Distributed Mania Producer Producer Producer Queue Queue Queue Server Server Server Consumer Consumer Consumer Consumer Consumer ● Load balance a message queue for scale ● Can continue to create more workers    
  44. 44. Message Queues: Useful for? ● Asynchronous Processing ● Communication between Applications / Systems ● Image Resizing ● Video Processing ● Sending out Emails ● Auto­Scaling Virtual Instances ● Log Analysis ● The list goes on...    
  45. 45. Message Queues: Keep in Mind ● Replication or not? ● You need to keep your workers running ● Supervisord or monit or some other monitoring... ● Dont offload things just to offload ● If it needs to be real­time and not near real­time this  is not a  good place for things – however, your boss  does not need to know :)    
  46. 46.      DNS Servers   
  47. 47. DNS Servers: Are you running your own? ● Just about every domain registrar runs DNS ● If you dont need to, do not run your own. ● Anycast DNS ● Anycast is a network addressing and routing  scheme whereby data is routed to the "nearest" or  "best" destination as viewed by the routing topology. ● Its sexy, its sweet and it is FAST!    
  48. 48. DNS Servers: Identifying a Good Service ● Wildcard support ● Failover / Distributed ● CNAME support ● TXT support ● Name Server support    
  49. 49.      CDN Servers   
  50. 50. CDN: What is a CDN? ● A content delivery network or content distribution network  (CDN) is a system of computers containing copies of data,  placed at various points in a network so as to maximize  bandwidth for access to the data from clients throughout  the network. A client accesses a copy of the data near to  the client, as opposed to all clients accessing the same  central server, so as to avoid bottlenecks near that server. ● Content types include web objects, downloadable objects  (media files, software, documents), applications, real time  media streams, and other components of internet delivery  (DNS, routes, and database queries). http://en.wikipedia.org/wiki/Content_delivery_network    
  51. 51. CDN: Why Use One? ● Extremely fast at serving files ● Increased serving capacity ● Distributed nodes ● Frees up your server for the difficult stuff    
  52. 52. CDN: The Types ● Origin Pull ● Utilizes your own web server and pulls the content  and stores it in their nodes. ● PoP Pull ● You upload the content to something like S3 and it  has a CDN on the top of it like CloudFront.    
  53. 53. CDN: What Should I Use? ● Depends on your need... ● Origin Pull is great if you want to maintain all of  the content in your web server. ● PoP Push is great for storing things like user  generated content.    
  54. 54.      Mail Servers   
  55. 55. Mail Servers: A Quick Note ● Google Apps – just offload it! ● If you do not need to run a mail server dont. ● SpamAssassin and ClamAV are resource hogs ● If you need it, put it on its own server.    
  56. 56. Front­End Performance   
  57. 57. Front­End Performance: Points ● Tactics ● Minification (JavaScript / CSS) – PHP 5.3 library: Assetic  ● CSS Sprites – Several online and offline tools ● GZIP – Configured in the web server ● Cookies slow down the client ● Parallel downloads (use subdomains) ● HTTP Expires – Configured in the web server    
  58. 58. Front­End Performance: Tools ● Tools for Identifying Areas ● Yslow ● Firebug ● Google Page Speed ● Google Webmaster Tools ● Pingdom    
  59. 59. Questions? Mike Willbanks Blog : http://blog.digitalstruct.com Twitter : mwillbanks IRC : lubs on freenode Joind.in : http://joind.in/2838   
  1. A particular slide catching your eye?

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

×