TO YOUR ADVANTAGE
LEVERAGING A DISTRIBUTED ARCHITECTURE
WHO AM I?
MICHELANGELO VAN DAM
▸ Professional PHP architect
▸ President PHPBenelux
▸ Coach at CoderDojo
▸ Contributor to open source projects
▸ Zend Certified Engineer
WHO AM I?
MICHELANGELO VAN DAM
▸ Professional PHP architect
▸ President PHPBenelux
▸ Coach at CoderDojo
▸ Contributor to open source projects
▸ Zend Certified Engineer
Rafael Dohms
@rdohms
WHO AM I?
MICHELANGELO VAN DAM
▸ Professional PHP architect
▸ President PHPBenelux
▸ Coach at CoderDojo
▸ Contributor to open source projects
▸ Zend Certified Engineer
Rafael Dohms
@rdohms
Me
@DragonBe
SINGLE LAMP STACK
WHAT IS A LAMP STACK?
A COMMON ACRONYM
▸ Linux
▸ Apache
▸ MySQL
▸ PHP
PHP
MySQL
Apache
Linux
P
M
A
L
WHY USED?
SMALL WEB APPLICATIONS
▸ WordPress blogs
▸ Joomla marketing sites
▸ Drupal business sites
▸ TYPO3 publications
▸ A lot more …
SIMPLICITY IS ULTIMATELY A MATTER OF
FOCUS.
Ann Voskamp
TWEETABLE QUOTE
BENEFITS GALORE
WE LOVE EASY
▸ Single point of concern
▸ Easy to maintain
▸ Easy to distribute
▸ Easy to protect
BENEFITS GALORE
WE LOVE EASY
▸ Single point of concern
▸ Easy to maintain
▸ Easy to distribute
▸ Easy to protect
NOT ALL SUNSHINE
DOESN'T SCALE WELL
▸ Increase of users
▸ Huge amount of data
▸ Additional logic or features
▸ Compliance requirements
MORE
WE LIKE
Fatal	error:	Allowed	memory	size	of	268435456	bytes	
exhausted	(tried	to	allocate	77	bytes)	in		
/path/to/MassiveClass.php	on	line	666
WE NEED TO SCALE!
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
PHP
MySQL
Apache
Linux
P
M
A
L
SCALING MISTAKE #1: DON’T ADD MORE
MACHINES AND THINK YOU’RE SCALED.
Remember this!!!
TWEETABLE QUOTE
SOME WISDOM
SCALE WITH PURPOSE
▸ Separate based on responsibility
▸ Pinpoint your weakest link
▸ You need more of them
▸ Look for “alternate” (better) solutions
▸ e.g. Nginx vs. Apache
▸ Don’t over-scale
PHP-FPM MySQL
LinuxLinux
NGINX
PHP-FPM
Linux
NGINX
IS YOUR APP READY TO
BE SCALED?
Find the “hard” requirements!
ANALYSING YOUR CODE
SOMETHING TO LOOK OUT FOR
resources.db.params.host = "database.server.tld"
resources.db.params.port = 3306
resources.db.params.username = "fda23a84"
resources.db.params.password = "b10a8db164e0754105b7a99be72e3fe5"
resources.db.params.dbname = "webapp"
resources.db.isDefaultTableAdapter = true
REPLACE WITH SOMETHING THAT CHANGES OUTSIDE YOUR APP
ENVIRONMENT VARIABLES CAN HELP
resources.db.params.host = WEBAPP_DB_HOST
resources.db.params.port = WEBAPP_DB_PORT
resources.db.params.username = WEBAPP_DB_USERNAME
resources.db.params.password = WEBAPP_DB_PASSWORD
resources.db.params.dbname = WEBAPP_DB_DBNAME
resources.db.isDefaultTableAdapter = WEBAPP_DB_DEFAULT
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
▸ Replication
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
▸ Replication
▸ Queues
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
▸ Replication
▸ Queues
▸ Workers
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
▸ Replication
▸ Queues
▸ Workers
▸ API’s
HOW SOMETHING SIMPLE THINGS BECOMES VERY COMPLEX VERY QUICKLY
MORE ITEMS ADDED
▸ Caching
▸ Search engine
▸ Load balancer
▸ Replication
▸ Queues
▸ Workers
▸ API’s
▸ and even more things …
PHP-FPM
NGINX
Shared FS
MariaDB
MariaDB
MariaDB
MongoDB
MongoDB
MongoDB
Redis Cache
Redis Cache
Redis Cache
ElasticSearch ElasticSearch
Varnish
RabbitMQ
PHP (workers)
PHP (workers)
PHP-FPM
NGINX
EVENT SOURCING:
GBC (MARCO PIVETTA)
MUST-SEE PRESENTATION
MAKING CHOICES
ON PREM
ON PREM
CLOUD
ON PREM
HOSTED
CLOUD
MOVE TO THE “CLOUD”,
TRUST ME I’M A PROFESSIONAL!!!
Source: The Register 2015-09-20
Source: CBS News 2017-02-28
Source: Forbes 2014-11-18
Source: ZDNet 2016-09-15
Source: C|Net 2009-06-29
Source: The Register 2016-04-20
Source: InfoWorld 2013-03-22
THIS IS BAD!!!
NO NEED TO SAY…
SCALING MISTAKE #2: PUT ALL YOUR
EGGS IN ONE BASKET.
Remember this!!!
TWEETABLE QUOTE
STRATEGY IS KEY!
ONLINE?
WHAT DID WE DO TO STAY
CAN YOU LIVE WITH
REDUCED CAPACITY
BUT STAY ONLINE?
First question to clients
Hosted / On Premise
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3
Elas-c	Load	Balancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3 CloudFront
CloudSearch
North Europe
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3 CloudFront
CloudSearch
South America
West Europe North Europe South America
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3
Elas-c	Load	Balancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3 CloudFront
CloudSearch
North Europe
South America
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3
Elas-c	Load	Balancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS	-	MySQL	Instance
SQS	Queue
S3 CloudFront
CloudSearch
North Europe
South America
WARNING: THIS MEANS YOU NEED TO REPLICATE ALL TRANSACTIONS
OVER BOTH CLOUD PROVIDERS!!! (COST X 2)
SCALING MISTAKE #3: NOT READY FOR
DISASTER
Remember this!!!
TWEETABLE QUOTE
RESILIENCE TESTING
NETFLIX SIMIAN ARMY
▸ Chaos Monkey
▸ Chaos Gorilla
▸ Chaos Kong
▸ Janitor Monkey
▸ Doctor Monkey
▸ Compliance Monkey
▸ Latency Monkey
▸ Security Monkey
ALWAYS PREPARE FOR
THE WORST…
…so you’re ready when it happens.
SCALING MISTAKE #4: DON’T AUTOMATE
YOUR DEPLOYMENT PROCESSES
Remember this!!!
TWEETABLE QUOTE
Build Feedback
Execute Delivery
SCM
Commits SCM Change
Polling
test
staging
production
Unit tests Metrics
Provisioning
new target
Provisioning
databases
Provisioning
workers
Integration
tests
Promote
branch
CI
Unit tests Metrics
Provisioning
new target
Provisioning
databases
Provisioning
workers
Integration
tests
Promote
branch
CI
AUTOMATE YOUR
DEPLOYMENT PROCESS
So you can deploy multiple times a
day.
WHAT TO TAKE HOME FROM THIS TALK
RECAP
▸ Prepare you code to scale and distribute
▸ When online is important, scale over multiple hosting options
▸ Test your resilience for failure
▸ Automate your processes
▸ Build pipelines for all tasks
▸ Release with confidence
in it2PROFESSIONAL PHP SERVICES
Michelangelo van Dam
Zend Certified Engineer
contact@in2it.be - www.in2it.be - T in2itvof - F in2itvof
Microsoft Azure
Zend Framework
Consulting
Quality Assurance &
Disaster Recovery

Leveraging a distributed architecture to your advantage