© All rights reserved. Zend Technologies, Inc.
How to scale PHP applications
by Jan Burkl, Enrico Zimuel
Zend Technologies...
© All rights reserved. Zend Technologies, Inc.
About us
● Jan Burkl (jan.burkl@zend.com)
● Senior System Engineer at Zend
...
© All rights reserved. Zend Technologies, Inc.
Summary
● Scalability of a web application
● How to scale a PHP application...
© 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
s...
© All rights reserved. Zend Technologies, Inc.
Scalability of a web application
A web application is scalable when is
able...
© All rights reserved. Zend Technologies, Inc.
Scale vertically vs. Scale horizontally
● Scale vertically (scale up)
▶ Add...
© All rights reserved. Zend Technologies, Inc.
Scale up vs. Scale out
Scale up Scale out
vs.
© All rights reserved. Zend Technologies, Inc.
The web scale out
● As Google taught, the best way to scale an high traffic...
© All rights reserved. Zend Technologies, Inc.
A typical load balancer architecture
Load Balancer
Web Servers
Internet
Fir...
© All rights reserved. Zend Technologies, Inc.
How to scale a PHP application?
● The PHP application uses session/local da...
© All rights reserved. Zend Technologies, Inc.
Persistent load balancer
● A client request is assigned always to the same
...
© All rights reserved. Zend Technologies, Inc.
Share the session data
● Manage the session data across the servers
● Pros:...
© 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 cert...
© All rights reserved. Zend Technologies, Inc.
PHP session management
● Configure the PHP session management (php.ini dire...
© All rights reserved. Zend Technologies, Inc.
Example (PHP sessions using files)
● <?php
session_start();
$_SESSION['user...
© All rights reserved. Zend Technologies, Inc.
Share session data
● How to share PHP sessions between multiple
servers?
▶ ...
© All rights reserved. Zend Technologies, Inc.
session_set_save_handler()
● You can write your PHP session handler using
t...
© 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.se...
© 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.sessio...
© All rights reserved. Zend Technologies, Inc.
Session sharing using DB (2)
● Pros:
▶ Solves the scalability limitation
▶ ...
© 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
(se...
© 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,...
© All rights reserved. Zend Technologies, Inc.
Session sharing using Redis
● Different PHP extensions for Redis:
▶ Predis,...
© All rights reserved. Zend Technologies, Inc.
Session sharing using Redis (2)
● Pros:
▶ Fast (works in RAM)
▶ Reliable (m...
© 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, enter...
© All rights reserved. Zend Technologies, Inc.
Session sharing with ZSCM
● Session Clustering Extension
● Session Clusteri...
© All rights reserved. Zend Technologies, Inc.
Zend Server Cluster Manager architecture
Load Balancer
MySQL
Firewall
© 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 i...
© All rights reserved. Zend Technologies, Inc.
Questions?
© All rights reserved. Zend Technologies, Inc.
Thank you for attending!
More info:
http://www.zend.com
http://phpconferenc...
Upcoming SlideShare
Loading in...5
×

How to scale PHP applications

32,438

Published on

In this last years a lot of high traffic web sites have been built in PHP. One of the main problem to design a distributed PHP architecture is how to share session data between multiple servers. In this presentation we showed the most used solutions to scale a PHP application along multiple servers. We presented different solutions to share session data using open source solutions (nfs, databases, memcached, redis, etc). Moreover we talk about Zend Server Cluster Manager, an enterprise­ ready Web Application Server for running and managing an HA Cluster of PHP servers.

Published in: Technology
3 Comments
33 Likes
Statistics
Notes
  • Memcached and redis are not the only alternatives for session management. I would like to see scache (http://scache.nanona.fi/) evaluated against them. It's very powerful when used in the right way.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Also contains summarty of session problems + memcached + redis information. good slideshow
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • That's not a conference talk, that is a product advertisement.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
32,438
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
474
Comments
3
Likes
33
Embeds 0
No embeds

No notes for slide

How to scale PHP applications

  1. 1. © All rights reserved. Zend Technologies, Inc. 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
  2. 2. © All rights reserved. Zend Technologies, Inc. About us ● Jan Burkl (jan.burkl@zend.com) ● Senior System Engineer at Zend Technologies in Stuttgart (Germany) since 2006 ● Enrico Zimuel (enrico@zend.com) ● Senior Consultant & Architect at Zend Technologies in Milan (Italy) since 2008 ● Blog on web dev't: http://www.zimuel.it/blog
  3. 3. © 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
  4. 4. © All rights reserved. Zend Technologies, Inc. Scalability of a web application
  5. 5. © 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
  6. 6. © 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
  7. 7. © 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
  8. 8. © All rights reserved. Zend Technologies, Inc. Scale up vs. Scale out Scale up Scale out vs.
  9. 9. © 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 ● We need load balancers to split the traffic between all the servers A Google server
  10. 10. © All rights reserved. Zend Technologies, Inc. A typical load balancer architecture Load Balancer Web Servers Internet Firewall
  11. 11. © 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
  12. 12. © 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
  13. 13. © 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
  14. 14. © All rights reserved. Zend Technologies, Inc. PHP session management
  15. 15. © 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
  16. 16. © 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)
  17. 17. © 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";
  18. 18. © 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
  19. 19. © 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
  20. 20. © All rights reserved. Zend Technologies, Inc. Session sharing using NFS
  21. 21. © 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
  22. 22. © All rights reserved. Zend Technologies, Inc. Session sharing using Database
  23. 23. © 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
  24. 24. © 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
  25. 25. © All rights reserved. Zend Technologies, Inc. Session sharing using Memcached
  26. 26. © 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)
  27. 27. © All rights reserved. Zend Technologies, Inc. Session sharing using Redis
  28. 28. © 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/
  29. 29. © 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
  30. 30. © 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!
  31. 31. © All rights reserved. Zend Technologies, Inc. Session sharing using Zend Server Cluster Manager
  32. 32. © 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.
  33. 33. © 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
  34. 34. © All rights reserved. Zend Technologies, Inc. Zend Server Cluster Manager architecture Load Balancer MySQL Firewall
  35. 35. © All rights reserved. Zend Technologies, Inc. High availability: session cluster
  36. 36. © All rights reserved. Zend Technologies, Inc. High availability: session cluster (2)
  37. 37. © 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
  38. 38. © All rights reserved. Zend Technologies, Inc. Questions?
  39. 39. © All rights reserved. Zend Technologies, Inc. Thank you for attending! More info: http://www.zend.com http://phpconference.es
  1. A particular slide catching your eye?

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

×