Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 38

How to scale PHP applications

by Jan Burkl, Enrico Zimuel


Zend Technologies

http://www.zend.com
jan.burkl@zend.com, enrico@zend.com

30th October 2010 – PHP Barcelona Conference

© All rights reserved. Zend Technologies, Inc.


Summary
● Scalability of a web application

How to scale a PHP application

PHP session management

Sharing session data using:
Network
▶ file system
Database

Memcached

▶ Redis
▶ Zend Server Cluster Manager

© All rights reserved. Zend Technologies, Inc.


Scalability of a web
application

© All rights reserved. Zend Technologies, Inc.


Scalability: general definition

“Scalability is a desirable property of a


system, a network, or a process, which
indicates its ability to either handle
growing amounts of work in a graceful
manner or to be enlarged”
Source: Wikipedia

© All rights reserved. Zend Technologies, Inc.


Scalability of a web application

A web application is scalable when is


able to manage a growing traffic with
additional resources (CPU, RAM)
without software changes

© All rights reserved. Zend Technologies, Inc.


Scale vertically vs. Scale horizontally

Scale vertically (scale up)
▶ Add resources to a single node in a system
▶ Enhance the server (more CPU, more RAM, etc)
▶ High availability difficult to implement


Scale horizontally (scale out)
▶ Add mores nodes to a system
▶ More servers, distributing the load
▶ High availability easy to implement

© All rights reserved. Zend Technologies, Inc.


Scale up vs. Scale out

vs.

Scale up Scale out


© All rights reserved. Zend Technologies, Inc.
The web scale out

As Google taught, the best way to scale an high traffic
web application is horizontally

No expensive servers to scale horizontally

A Google server


We need load balancers to split the traffic
between all the servers

© All rights reserved. Zend Technologies, Inc.


A typical load balancer architecture

Load Balancer

Firewall

Internet

Web Servers

© All rights reserved. Zend Technologies, Inc.


How to scale a PHP application?

The PHP application uses session/local data?
▶Yes = we have to manage the session/local
data across multiple servers

Using a persistent load balancer
● Share the session data
▶ No = we can scale very easy (stateless)

Most of the PHP applications are not stateless,
they use session data

© All rights reserved. Zend Technologies, Inc.


Persistent load balancer
● A client request is assigned always to the same
server (means same session/local data)

Pros:
▶ No software architecture changes

Cons:
▶No fault tolerant, if a server goes down the
session data are lost!
▶The load balancer is the bottleneck
▶The persistent load balancer are expensive

© All rights reserved. Zend Technologies, Inc.


Share the session data
● Manage the session data across the servers

Pros:
▶ Fault tolerant, if a server goes down the load
balancer can user another server
▶ No bottleneck in the load balancer
▶ The stateless load balancer are cheaper

Cons:

Software architecture changes

© All rights reserved. Zend Technologies, Inc.


PHP session management

© All rights reserved. Zend Technologies, Inc.


Sessions in PHP


Session support in PHP consists of a way to preserve certain
data across subsequent accesses

To identify the subsequent accesses, from the same client,
PHP uses a cookie variable (PHPSESSID)
▶ Example: PHPSESSID= tclq3an1ri8dsfiuo43845loo1

By default, session data are stored in the file system of the
server

In PHP we manage the session data using the $_SESSION
global variable

© All rights reserved. Zend Technologies, Inc.


PHP session management


Configure the PHP session management (php.ini directives):
▶ session.name

name of the session cookie identifier
(PHPSESSID by default)
▶ session.save_handler

defines the name of the handler which is used
for storing and retrieving data associated with
a session (files by default).
▶ session.save_path

defines the argument which is passed to the
save handler (with files handler is the path to
store the session data)

© All rights reserved. Zend Technologies, Inc.


Example (PHP sessions using files)


<?php
session_start();
$_SESSION['user']= 'enrico';


In session folder (for instance, /tmp) the PHP creates a file
named sess_fvi9r84f14sjel8r28o6aqspr2 (where
fvi9r84f14sjel8r28o6aqspr2 is PHPSESSID) that contains:

user|s:6:"enrico";

© All rights reserved. Zend Technologies, Inc.


Share session data

● How to share PHP sessions between multiple


servers?
Using
▶ a Network File System
Using
▶ a Database
Using
▶ Memcached
Using
▶ Redis
Using

Zend Server Cluster Manager
▶ etc

© All rights reserved. Zend Technologies, Inc.


session_set_save_handler()


You can write your PHP session handler using
the session_set_save_handler():

bool session_set_save_handler (
callback $open,
callback $close,
callback $read,
callback $write,
callback $destroy,
callback $gc)

More info: http://php.net/manual/en/function.session-set-save-handler.php

© All rights reserved. Zend Technologies, Inc.


Session sharing
using NFS

© All rights reserved. Zend Technologies, Inc.


Session sharing using NFS

● Use the default PHP session handler


(session.session_handler= files)

NFS to store the session data files
(session.save_path= NFS folder)

Pros:
▶ No changes on the PHP side

Cons:
▶ Highly inefficient
▶ Not designed for high read/write ratio
▶ Performance problems and data corruptions
© All rights reserved. Zend Technologies, Inc.
Session sharing
using Database

© All rights reserved. Zend Technologies, Inc.


Session sharing using DB
● Use the user PHP session handler
(session.session_handler= user)

Use the session_set_save_handler() to implement
your db session handler

Which db?
▶ MySQL
http://www.php.net/manual/en/function.session-set-save-handler.php#81761

▶ Ms SQL Server
●http://www.zimuel.it/blog/?p=402
▶ PostgreSQL, Oracle, etc

© All rights reserved. Zend Technologies, Inc.


Session sharing using DB (2)

Pros:
▶ Solves the scalability limitation
▶ A lot of best practices available
▶ Wide installation base
▶ DB is (normally) available

Cons:
▶Sessions have almost 1:1 read/write ratio
▶Connection overhead
▶Single point of failure
▶Performance bottleneck
© All rights reserved. Zend Technologies, Inc.
Session sharing
using Memcached

© All rights reserved. Zend Technologies, Inc.


Session sharing using Memcached

● Use the memcached PHP session handler


(session.session_handler= memcache)

Pros:
▶ Native session handler
▶ Very fast (works in RAM)
▶ Can be clustered

Cons:
▶No persistent data (it's a caching system)
▶Cyclic memory (data can be overwritten if the
memory is full)
© All rights reserved. Zend Technologies, Inc.
Session sharing
using Redis

© All rights reserved. Zend Technologies, Inc.


What is Redis?

Redis is an open-source,
networked, in-memory, persistent,
journaled, key-value data store
(NoSQL).

It's similar to memcached but the
dataset is not volatile

Developed by: Salvatore Sanfilippo

Sponsored by vmware

http://code.google.com/p/redis/

© All rights reserved. Zend Technologies, Inc.


Session sharing using Redis
● Different PHP extensions for Redis:
▶ Predis, http://github.com/nrk/predis/
▶ Rediska, http://rediska.geometria-lab.net/
▶ redis.php, http://github.com/antirez/redisdotphp
▶ PHPRedis!, http://github.com/owlient/phpredis

Custom session handler for Redis:
▶http://github.com/ivanstojic/redis-session-php

© All rights reserved. Zend Technologies, Inc.


Session sharing using Redis (2)

Pros:
▶ Fast (works in RAM)
▶ Reliable (master-slave replication)

Cons:
PHP Redis extensions are 0.x version

Custom PHP session handler


Not so scalable* (data are stored in RAM)


No High Availability* (master-slave limitation)


* but Redis developers are working on a Cluster version!


© All rights reserved. Zend Technologies, Inc.
Session sharing
using Zend Server
Cluster Manager

© All rights reserved. Zend Technologies, Inc.


What is Zend Server and Cluster Manager?


Zend Server is a complete, enterprise-ready
Web Application Server for running and
managing PHP applications that require a
high level of reliability, performance and
security on Linux, Windows or IBM i.

Zend Server Cluster Manager (ZSCM)
extends the benefits of Zend Server across
large-scale PHP deployments.

With ZSCM you can build a real PHP cluster
stack.

© All rights reserved. Zend Technologies, Inc.


Session sharing with ZSCM


Session Clustering Extension

Session Clustering Daemon (SCD)

Storage backends: Disk / Memory

Peer-to-peer protocol to communicate
between nodes

Session management
with master-backup
architecture

© All rights reserved. Zend Technologies, Inc.


Zend Server Cluster Manager architecture

Load Balancer Firewall

MySQL

© All rights reserved. Zend Technologies, Inc.


High availability: session cluster

© All rights reserved. Zend Technologies, Inc.


High availability: session cluster (2)

© All rights reserved. Zend Technologies, Inc.


Session cluster with ZSCM

Pros:
▶ Very Fast
▶ Reliable (data are stored in master-backup
servers)
▶ High Availability
▶ Scalable (session data are stored in all the
nodes of the cluster)

No changes to the PHP code

Cons:
▶ You need Zend Server on each node of the
cluster

© All rights reserved. Zend Technologies, Inc.


Questions?

© All rights reserved. Zend Technologies, Inc.


Thank you for attending!

More info:
http://www.zend.com
http://phpconference.es

© All rights reserved. Zend Technologies, Inc.

You might also like