Leveraging a distributed architecture to your advantage

Post on 21-Apr-2017

201 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

Transcript

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

contact@in2it.be - www.in2it.be - T in2itvof - F in2itvof

Microsoft Azure Zend Framework Consulting

Quality Assurance & Disaster Recovery

top related