TO YOUR ADVANTAGE LEVERAGING A DISTRIBUTED ARCHITECTURE
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
@rdohmsMe
@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
Fatalerror:Allowedmemorysizeof268435456bytesexhausted(triedtoallocate77bytes)in/path/to/MassiveClass.phponline666
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
NGINXShared 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-MySQLInstance
SQSQueueS3
Elas-cLoadBalancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3 CloudFront
CloudSearch
North Europe
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3 CloudFront
CloudSearch
South America
West Europe North Europe South America
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3
Elas-cLoadBalancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3 CloudFront
CloudSearch
North Europe South America
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3
Elas-cLoadBalancing
CloudFront
CloudSearch
West Europe
DynamoDB
EC2 EC2
Elas-csearchRDS-MySQLInstance
SQSQueueS3 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
SCMCommits SCM Change
Pollingtest
staging
production
Unit tests Metrics
Provisioningnew target
Provisioningdatabases
Provisioningworkers
Integrationtests
Promotebranch
CI
Unit tests Metrics
Provisioningnew target
Provisioningdatabases
Provisioningworkers
Integrationtests
Promotebranch
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 DamZend Certified Engineer
[email protected] - www.in2it.be - T in2itvof - F in2itvof
Microsoft Azure Zend Framework Consulting
Quality Assurance & Disaster Recovery