1. PHP & Cloud Computing
PHPTOSTART 2013
Walter Dal Mut - @walterdalmut - @corleycloud
2. Whoami
• Walter Dal Mut • Corley S.r.l.
• Startupper • Scalable CMS
• Corley S.r.l.
• http://www.corley.it/ • www.xitecms.it
• UpCloo Ltd. • Load and Stress tests
• http://www.upcloo.com/
• Electronic Engineer
• www.corley.it
• Polytechnic of Turin • Consultancy
• Social • PHP
• @walterdalmut - @corleycloud - @upcloo • AWS
• Websites • Distributed Systems
• walterdalmut.com – corley.it – upcloo.com • Scalable Systems
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
3. AWS - Application Management Solutions
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
4. Why scalability
Source Jeff Barr AWS
slideshare.net/…
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
5. Also daily…
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
6. Provision with fixed hardware
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
7. Thanks to Cloud Computing
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
8. Are you wasting monies?
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
9. Scalability effects on your business
• Scale capacity on demand
• Turn fixed costs into variable costs
• Always available
• Rock-solid reliability
• Cost-effective
• Reduce time to market
• Focus on product and core competencies
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
10. Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
11. Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
12. Scalable PHP environments – Initial Step
Web
89.30.31.32/32 MySQL
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
13. Scalable PHP environments –
autoscaling
MySQL
Web
Elastic Load Balancer
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
14. Scalable PHP environments –
autoscaling
Web
Instance
MySQL
Web
Elastic Load Balancer
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
15. Scalable PHP environments –
autoscaling
Web
Instance
MySQL
Web
Elastic Load Balancer
Instance
Web
Instance MySQL
Read Replica
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
16. AWS (Elastic) Load Balancer
• You can distribute incoming traffic across your web instances
• When it detects unhealthy load-balanced web instances, it no longer
routes traffic to those web instances and spreads the load across the
remaining healthy web instances.
• Elastic?
• automatically scales its request handling capacity in response to incoming
application traffic.
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
17. Autoscaling
• Scale out web instances seamlessly and automatically when demand
increases
• Replace unhealthy or unreachable instances to maintain higher
availability of your applications.
• Scale dynamically based on your Cloud Watch metrics, or predictably
according to a schedule that you define..
• Run on-demand or spot instances
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
18. Metrics and Autoscaling
EC2 Instance CloudWatch
Scaling rules
Elastic Load Balancer
Autoscaling
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
19. Metrics and Autoscaling
EC2 Instance CloudWatch
Scaling rules
Elastic Load Balancer
Autoscaling
EC2 Instance
Alarms
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
20. Metrics and Autoscaling
EC2 Instance CloudWatch
Scaling rules
Elastic Load Balancer
Autoscaling
EC2 Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
21. Metrics and Autoscaling
EC2 Instance CloudWatch
Scaling rules
Elastic Load Balancer
Autoscaling
EC2 Instance
Alarms
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
22. Metrics and Autoscaling
EC2 Instance CloudWatch
Scaling rules
Elastic Load Balancer
Autoscaling
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
23. Scale with metrics, scheduled or both?
• How to scale? It depends by your application
• Scheduled scale operations are useful when you have predictable spikes
• Metrics when you have heavy spike application and you need to adjust your
infrastructure automatically
• Mix previous in mixed scenarios
• Which metric use in order to scale?
• It depends by your application design
• CPU heavy scale on CPU load metric
• Network heavy scale on network load metric
• Etc.
• Remember that applications don’t consume only CPU but also other
resources
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
24. We have to discuss about:
• Session Management
• If we open and close servers runtime we have to maintain PHP sessions in
order to handle user logins and other application features related to the end
user session.
• Database connections
• All MySQL connectors (PDO, MySQLi, [mysql_*]) handle just one connection…
No “x” RDB connection at the same time
• Software maintenance
• How we can ran the same application version on all our infrastructure?
• What about logs? How we can collect VM logs in order to centralize
the log management?
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
25. Session Management
• Fortunately with PHP you can use different strategies to centralize
sessions
• Memcache/Memcached (AWS ElastiCache)
• Redis
• DynamoDB (AWS)
• Etc.
• We can modify the session_handler in order to use a different
storage (php.ini, your application bootstrap, etc.)
session.save_handler = memcache
session.save_path = “tcp://1.cache.group.domain.tld:11211”
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
26. MySQL – Master/Slave?
• Master/Slave is a model of communication where one device or
process has unidirectional control over one or more other devices
• MySQL can scales out all your read (SELECT) operations on different slave
servers.
• AWS RDS (Relational Database Service) helps you to create read
replicas directly in AWS web console with a couple of clicks!
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
27. PHP Application MySQL READ
Replicas
SELECT ONLY
SLAVE 1
INSERT/UPDATE/
DELETE/SELECT
MASTER
Application
SELECT ONLY
SLAVE 2
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
28. Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
29. Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
30. Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
31. MySQL Native Driver
• MySQL native driver?
• Available from PHP >= 5.3
• You have to compile your PHP with “mysqlnd” support
• --with-mysqli=mysqlnd --with-pdo=mysqlnd --with-mysql=mysqlnd
• Delegate to “mysqlnd_ms” the master/slave management
• http://php.net/manual/en/book.mysqlnd.php
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
32. Create the mysqlnd_ms configuration file
{
The simple JSON configuration is divided
"myapp": {
in two main section
"master": {
"master_0": {
• Master
"host": "localhost",
• Slaves
"port": "3306"
}
},
“myapp” is the hostname that we use
"slave": {
instead the real mysql host address.
"slave_0": {
"host": "192.168.2.27", Eg.
"port": "3306"
• mysql_connect(“myapp”, “user”,
“passwd”);
}
• new Mysqli(“myapp”, “user”,
}
“passwd”);
}
• new
} PDO(“mysql:dbname=testdb;host=my
app”);
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
33. Maintain softwares
Web
Elastic Load Balancer
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
34. Maintain softwares
Web
Instance
Web
Elastic Load Balancer
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
35. Maintain softwares
Web
Instance
Web
Elastic Load Balancer
Instance
Web
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
36. Maintain softwares
Web
Instance
Elastic Load Balancer
Web
Instance
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
37. Maintain softwares
Web
Instance
Elastic Load Balancer
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
38. How we can stay fresh?
• If servers starts and stops continuously we have to find solutions to
stay updated also on software
• When a server starts, it has to create a valid environment in order to provides
web pages. Strategies?
• Compile and bundle all softwares in one instance image
• It is very simple but all software becomes old very quickly and when you have to release an
update you have to compile a new image and update all load balancers configurations. It is a
long and complex operation
• Use EC2_USER_DATA feature provided by AWS
• You can run a shell script when your instances bootstraps. It is more flexible because you can
create a skeleton (PHP + libraries) and download all software runtime during the boot
operation
• Typically you will use both in conjunction
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
39. Cool Up/Down – Inhibits alarms
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
40. Scales in action
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
41. Run commands on multiple servers
• If you ran many servers execute commands could be hard. You can
use tools to run commands on a server list
• Capistrano (Ruby)
• https://github.com/capistrano/capistrano
• Fabric (Python)
• https://github.com/fabric/fabric
• Use CLOTH for AWS EC2 instances
• https://github.com/garethr/cloth
• Chef
• Puppet
• Etc…
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
42. Fabric is very simple
#! /usr/bin/env python
from __future__ import with_statement
from fabric.api import *
EC2 instances are dynamic with don’t know
from fabric.contrib.console import confirm addresses, for that reason we can use tagging
system to execute commands on a group of
from cloth.tasks import * instances
env.user = "root" fab nodes:"^production.*" tail
env.directory = '/mnt/wordpress'
env.key_filename = ['/home/walter/Amazon/wp- Execute the “tail” command on all instances
cms.pem'] with a name that starts with “production.”
@task Eg.
def reload(): • production.web-1
"Reload Apache configuration" • production.log
run('/etc/init.d/apache2 reload') • production.mongodb
@task
def tail():
"Tail Apache logs"
run('tail /var/log/syslog') Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
43. Centralize all logs
• We create and destroy instances thanks to alarms but when we
close an instance we lose immediately all instance/application logs
• How we can manage logs?
• The simplest way is to use Rsyslog clusters
• Rsyslog is an opensource software that forwarding log messages in
an IP network
• Rsyslog implement the basic syslog protol
• That means that we can configure apache logs to “syslog” instead using
normal text files.
• In this way we can collect all logs in one group of VM and work on these
files later thanks to other technologies
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
44. Log management
• Collecting logs is not the latest operation because you have to
analyse and reduce information
• Move logs to S3 bucket – Time based
• Analyze logs with Hadoop
• Map Reduce on the cloud with Elastic Map Reduce service (EMR)
• Use script languages on top of Hadoop in order to simply the log analysis
• HIVE – Data Warehouse infrastructure (data summarization)
• Pig – High level platform for creating MapReduce program
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
45. Cloud Conference 2013 – 18 April
• www.cloudconf.it
• @_CloudConf_
• https://www.facebook.com/pages/Cloud-Conf-Italia/140265592804313?ref=hl
• Data analysis
• Hadoop – MapReduce Framework
• Apache Pig – MapReduce Scripting Language for Hadoop
• Apache Hive – Data Warehouse System for Hadoop
PUG User Coupon Code:
pug-user
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
46. Thanks for listening
Any questions?
Walter Dal Mut walter.dalmut@gmail.com @walterdalmut
@corleycloud @upcloo
Editor's Notes
We will cover only infrastructures not communications or other types of scalabilities…