59
 Scalable Architectures 101 ConFoo Mar 10, 2011 Mike Willbanks    Blog: http://blog.digitalstruct.com Twitter: mwillbanks      IRC: lubs on freenode

Scalable Architecture 101

  • Upload
    confoo

  • View
    4.709

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Scalable Architecture 101

   

ScalableArchitectures 101

ConFooMar 10, 2011

Mike Willbanks   Blog: http://blog.digitalstruct.comTwitter: mwillbanks     IRC: lubs on freenode

Page 2: Scalable Architecture 101

   

● Software Development Manager● Organizer of MNPHP / MNMySQL● Zend Certified Engineer (PHP/ZF)

Who am I?

Page 3: Scalable Architecture 101

   

Your application is growing, your systems are slowing and growth is inevitable... 

● Where do we go from here?● Load Balancing● Web Servers● Database Servers● Cache Servers

● Job Servers● DNS Servers● CDN Servers● Front­End Performance

Scalability?

Page 4: Scalable Architecture 101

   

Single Server Syndrome

● One Server Many Functions

● Web Server, Database Server, Cache Server, Job Server, DNS Server, Mail Server....

● How we know it's time

● iostat, cpu load, overall degradation● OR.....

The Beginning

Page 5: Scalable Architecture 101

   

Page 6: Scalable Architecture 101

   

Single Separation Syndrome

● Separation of Web and Database

● Fix the main disk I/O bottleneck.● Still generally running several things on a single 

server.

The Next Step

Page 7: Scalable Architecture 101

   

Uh, oh :(

Page 8: Scalable Architecture 101

   

     Load Balancing

Page 9: Scalable Architecture 101

   

A Load Balanced Environment

Page 10: Scalable Architecture 101

   

● 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.

Load Balancing Options

Page 11: Scalable Architecture 101

   

● Round Robin● Static● Least Connections● Source● IP● Basic Authentication

● URI● URI Parameter● Header● Cookie● Regular Expression

Load Balancing Routing Types

Page 12: Scalable Architecture 101

   

● 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

Targeting Open Source Software Packages

Page 13: Scalable Architecture 101

   

● 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

HAProxy

Page 14: Scalable Architecture 101

   

global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon

defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000

listen localhost 0.0.0.0:80 option httpchk GET / balance roundrobin cookie SERVERID server serv1 0.0.0.0:8080 check inter 2000 rise 2 fall 5 server serv2 0.0.0.0:8080 check inter 2000 rise 2 fall 5 option httpclose stats enable stats uri /lb?stats stats realm haproxy stats auth test:test

HAProxy: Sample Configuration

Page 15: Scalable Architecture 101

   

● 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...

Pound

Page 16: Scalable Architecture 101

   

User "www-data"Group "www-data"LogLevel 1 Alive 30Control "/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

Pound: Sample Configuration

Page 17: Scalable Architecture 101

   

● 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

Varnish

Page 18: Scalable Architecture 101

   

backend default1 { .host = "127.0.0.1"; .port = "8080"; .probe = { .url = "/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } }

backend default2 { .host = "127.0.0.1"; .port = "8080"; .probe = { .url = "/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } }

director default round-robin { { .backend = default1; } { .backend = default2; } }

sub vcl_recv { if (req.http.host ~ "^127.0.0.1$") { set req.backend = default; } }

Varnish: Sample Configuration

Page 19: Scalable Architecture 101

   

● Web Servers● One always needs to be available● Don't 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

Load Balancing: Keep in Mind

Page 20: Scalable Architecture 101

   

     Web Servers

Page 21: Scalable Architecture 101

   

● Apache● IIS● Nginx● Lighttpd● etc.

Many Web Servers

Page 22: Scalable Architecture 101

   

● 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.

Web Server Configuration

Page 23: Scalable Architecture 101

   

● 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?

Web Servers: Keep in Mind

Page 24: Scalable Architecture 101

   

● 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.

Web Servers: Other Information

Page 25: Scalable Architecture 101

   

DatabaseServers

Page 26: Scalable Architecture 101

   

Single Database Server

● Lots of options and steps as we move forward.

Single Database Server

Page 27: Scalable Architecture 101

   

Single Master, Single Slave

● Write code that can write to the master and read from the slave.

● Exception: Be smart, don't write to the master and read from the slave on the table you just wrote to.

Database Replication

Page 28: Scalable Architecture 101

   

Single Master, Multiple Slaves

● It is a great time to start to implement connection pooling.

Database Replication Multiple Slaves

Page 29: Scalable Architecture 101

   

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.

Database Replication Multiple Everything

Page 30: Scalable Architecture 101

   

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.

Database Table Partitioning

Page 31: Scalable Architecture 101

   

● Replication● There may be a lag!● All reports / read queries should go here● Don't 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.

Database Servers: Keep in Mind

Page 32: Scalable Architecture 101

   

CacheServers

(not full page)

Page 33: Scalable Architecture 101

   

“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.

Cache Servers: What Type?

Page 34: Scalable Architecture 101

   

In The Beginning

● Single Caching Server

● Start to cache fetches, invalidate cache on write and write new cache, always reading from the cache.

Caching: Single Server

Page 35: Scalable Architecture 101

   

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.

Caching: Going Distributed

Page 36: Scalable Architecture 101

   

In the most simple form...

Caching: Read / Write with a Database

Page 37: Scalable Architecture 101

   

● 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, it's 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?

Caching: Keep in Mind

Page 38: Scalable Architecture 101

   

JobServers

(message queues)

Page 39: Scalable Architecture 101

   

“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

Page 40: Scalable Architecture 101

   

Messages: They're Everywhere

Page 41: Scalable Architecture 101

   

● 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.

Message Queues: What are They?

Page 42: Scalable Architecture 101

   

Single Job Server

● Lots of options and steps as we move forward.

Producer Message QueueServer

ConsumerQueue Receive

Message Queues: The Basic Concept

Page 43: Scalable Architecture 101

   

Distributed Mania

● Load balance a message queue for scale

● Can continue to create more workers

Producer

QueueServer

Consumer Consumer Consumer ConsumerConsumer

QueueServer

QueueServer

Producer Producer

Message Queue: Going Distributed

Page 44: Scalable Architecture 101

   

● Asynchronous Processing● Communication between Applications / Systems● Image Resizing● Video Processing● Sending out Emails● Auto­Scaling Virtual Instances● Log Analysis● The list goes on...

Message Queues: Useful for?

Page 45: Scalable Architecture 101

   

● Replication or not?● You need to keep your workers running

● Supervisord or monit or some other monitoring...

● Don't 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 :)

Message Queues: Keep in Mind

Page 46: Scalable Architecture 101

   

     DNS Servers

Page 47: Scalable Architecture 101

   

● Just about every domain registrar runs DNS● If you don't 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.

● It's sexy, it's sweet and it is FAST!

DNS Servers: Are you running your own?

Page 48: Scalable Architecture 101

   

● Wildcard support● Failover / Distributed● CNAME support● TXT support● Name Server support

DNS Servers: Identifying a Good Service

Page 49: Scalable Architecture 101

   

     CDN Servers

Page 50: Scalable Architecture 101

   

● 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).

CDN: What is a CDN?

http://en.wikipedia.org/wiki/Content_delivery_network

Page 51: Scalable Architecture 101

   

● Extremely fast at serving files● Increased serving capacity● Distributed nodes● Frees up your server for the difficult stuff

CDN: Why Use One?

Page 52: Scalable Architecture 101

   

● 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.

CDN: The Types

Page 53: Scalable Architecture 101

   

● 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.

CDN: What Should I Use?

Page 54: Scalable Architecture 101

   

     Mail Servers

Page 55: Scalable Architecture 101

   

● Google Apps – just offload it!● If you do not need to run a mail server don't.

● SpamAssassin and ClamAV are resource hogs● If you need it, put it on it's own server.

Mail Servers: A Quick Note

Page 56: Scalable Architecture 101

   

Front­EndPerformance

Page 57: Scalable Architecture 101

   

● 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

Front­End Performance: Points

Page 58: Scalable Architecture 101

   

● Tools for Identifying Areas● Yslow● Firebug● Google Page Speed● Google Webmaster Tools● Pingdom

Front­End Performance: Tools

Page 59: Scalable Architecture 101

   

Questions?

Mike Willbanks Blog : http://blog.digitalstruct.com Twitter : mwillbanks IRC : lubs on freenodeJoind.in : http://joind.in/2838