Denser, cooler, faster, stronger: PHP on ARM microservers

71
Jez Halford

Transcript of Denser, cooler, faster, stronger: PHP on ARM microservers

Page 1: Denser, cooler, faster, stronger: PHP on ARM microservers

Jez Halford

Page 2: Denser, cooler, faster, stronger: PHP on ARM microservers

Jez Halford

Freelance web development consultant

jezhalford.com

@jezhalford

Page 3: Denser, cooler, faster, stronger: PHP on ARM microservers

● World’s largest designer of semiconductors

● Over 60 billion ARM chips shipped to date

● Began moving into server CPUs a few years ago

Page 4: Denser, cooler, faster, stronger: PHP on ARM microservers

Shoot for the moonHewlett Packard EnterpriseMoonshot

● Very high server density

● More efficient cooling

● Built in fault-tolerance

Page 5: Denser, cooler, faster, stronger: PHP on ARM microservers

Moonshot

● 45 cartridges, supporting up to4 servers per cartridge

● 4 redundant power supplies

● 2 ethernet switches

● 5 cooling fans

● iLo Management interface

Page 6: Denser, cooler, faster, stronger: PHP on ARM microservers

Shoot for the moon

CPU Eight 64 bit cores @ 2.4GHz

Memory 64GB

Storage 120GB / 240GB / 480GB SSD

Network 2x 10 Gigabit NICs

ProLiant m400

Page 7: Denser, cooler, faster, stronger: PHP on ARM microservers

“Drinking our own Champagne”

Page 8: Denser, cooler, faster, stronger: PHP on ARM microservers
Page 9: Denser, cooler, faster, stronger: PHP on ARM microservers

Goals

● Robust, highly available website

● Scalable to handle very high load

● Use standard, generally available technologies where possible

Page 10: Denser, cooler, faster, stronger: PHP on ARM microservers

Milestones

● Modify the PHP app from Windows-specific to platform agnostic

● Design and prove the server architecture

● Go live

Page 11: Denser, cooler, faster, stronger: PHP on ARM microservers

Windows to anything

● Remove hard-coded paths

● Improve autoloading

Page 12: Denser, cooler, faster, stronger: PHP on ARM microservers

Windows to anything

● Config injection over environment detection

if (gethostname() == ‘qa-box’) {

// set environment for QA

}

if (getenv(‘APP_ENV’) == ‘qa’) {

// set environment for QA

}

Page 13: Denser, cooler, faster, stronger: PHP on ARM microservers

Server Architecture

Page 14: Denser, cooler, faster, stronger: PHP on ARM microservers

PHP on ARM

sudo apt-get install php7

Page 15: Denser, cooler, faster, stronger: PHP on ARM microservers

High Availability

● Two NICs per cartridge

● Bonded to work as one

● Allows one chassis switch OR one NIC to fail and operation to continue

http://www.unixmen.com/linux-basics-create-network-bonding-on-ubuntu-14-10/

Page 16: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing● Filesystem● Application cache● Session storage● Log aggregation● Data persistence

Page 17: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing● Filesystem● Application cache● Session storage● Log aggregation● Data persistence

Page 18: Denser, cooler, faster, stronger: PHP on ARM microservers

Load Balancing

● Paid-for version of nginx● Support & extra features

http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; }

server { listen 80;

location / { proxy_pass http://myapp1; } }}

Page 19: Denser, cooler, faster, stronger: PHP on ARM microservers

Load Balancing

ARM Nginx Node

ARM Web Node

ARM Web Node

ARM Web Node

Web

Page 20: Denser, cooler, faster, stronger: PHP on ARM microservers

Bonded IP address

Load Balancing

F5

ARM Nginx

Node A

ARM Nginx

Node B

ARM Web Node A1

ARM Web Node A2

ARM Web Node A3

Web

ARM Web Node B1

ARM Web Node B2

ARM Web Node B3

Moonshot Chassis A

Moonshot Chassis B

Page 21: Denser, cooler, faster, stronger: PHP on ARM microservers
Page 22: Denser, cooler, faster, stronger: PHP on ARM microservers

Caching statics at the load balancer● Nginx respects Cache-Control headers● In our setup these come from Apachehttp {

upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; }

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;

server {listen 80;

location / { proxy_pass http://myapp1; proxy_set_header Host $host; proxy_cache STATIC; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; }

}

Page 23: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem● Application cache● Session storage● Log aggregation● Data persistence

Page 24: Denser, cooler, faster, stronger: PHP on ARM microservers

Filesystem

● Both are free, open source distributedfilesystem solutions

● Multiple nodes work together to form a single mountable filesystem

● Generally slow at writing, but great forstoring PHP source and static assets

Page 25: Denser, cooler, faster, stronger: PHP on ARM microservers

Filesystem

● Copy files to each node at regularintervals

● Nominated “master” node is the source

● Has a replication lag

Page 26: Denser, cooler, faster, stronger: PHP on ARM microservers

Filesystem

We used existing, external and mountable storage ARM already had

Page 27: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem ✔● Application cache● Session storage● Log aggregation● Data persistence

Page 28: Denser, cooler, faster, stronger: PHP on ARM microservers

Application Cache

● 64GB on each node!

● Potentially 2.8 Terabytes per 45 node moonshot chassis

Page 29: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem ✔● Application cache ✔● Session storage● Log aggregation● Data persistence

Page 30: Denser, cooler, faster, stronger: PHP on ARM microservers

Session Storage

Options!

Page 31: Denser, cooler, faster, stronger: PHP on ARM microservers

Session Storage

● Zero configuration

● Slow access

● Persistent

● Needs either a shared filesystem or sticky sessions

Page 32: Denser, cooler, faster, stronger: PHP on ARM microservers

Session Storage

● Simple

● Very easy configuration

● Non-persistent

● It’s for caching, not sessions

Page 33: Denser, cooler, faster, stronger: PHP on ARM microservers

Session Storage

● Fast

● Persistent

● Generally fault-tolerant with Redis Cluster

● Cannot always guarantee consistency

Page 34: Denser, cooler, faster, stronger: PHP on ARM microservers

Session Storage

Page 35: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem ✔● Application cache ✔● Session storage ✔● Log aggregation● Data persistence

Page 36: Denser, cooler, faster, stronger: PHP on ARM microservers

Log Aggregation

● Lots of apps on lots of servers

● Lots of logs generated

● Debugging is hardif we have to look inlots of places

Page 37: Denser, cooler, faster, stronger: PHP on ARM microservers

Log Aggregation

rsyslog● Aggregate logs from MySQL, Apache, Nginx across

several servers...

● ...into one file per app on a “management” server

Page 38: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem ✔● Application cache ✔● Session storage ✔● Log aggregation ✔● Data persistence

Page 39: Denser, cooler, faster, stronger: PHP on ARM microservers

Data Persistence

Page 40: Denser, cooler, faster, stronger: PHP on ARM microservers

Data Persistence

● Active / Active, not Master / Slave

● True horizontal scalability

● High availability

Page 41: Denser, cooler, faster, stronger: PHP on ARM microservers

A PXC Cluster

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 42: Denser, cooler, faster, stronger: PHP on ARM microservers

A PXC Cluster

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

ARM Web Node

Page 43: Denser, cooler, faster, stronger: PHP on ARM microservers

Split Brain

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

ARM DB Node 6

Page 44: Denser, cooler, faster, stronger: PHP on ARM microservers

Split Brain

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

ARM DB Node 6

Page 45: Denser, cooler, faster, stronger: PHP on ARM microservers

Split Brain

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

ARM DB Node 6

Page 46: Denser, cooler, faster, stronger: PHP on ARM microservers

Consistency over availability

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 47: Denser, cooler, faster, stronger: PHP on ARM microservers

Networking failure

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 48: Denser, cooler, faster, stronger: PHP on ARM microservers

Networking failure

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 49: Denser, cooler, faster, stronger: PHP on ARM microservers

More than half the nodes fail

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 50: Denser, cooler, faster, stronger: PHP on ARM microservers

More than half the nodes fail

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 51: Denser, cooler, faster, stronger: PHP on ARM microservers

Single node failures

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 52: Denser, cooler, faster, stronger: PHP on ARM microservers

Rejoining

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 53: Denser, cooler, faster, stronger: PHP on ARM microservers

Mixed failures

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 54: Denser, cooler, faster, stronger: PHP on ARM microservers

Multiple node failures

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

Page 55: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC Startup

ARM DB Node 1

sudo service mysql bootstrap-pxc

Cluster size: 1

Page 56: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC Startup

ARM DB Node 1

ARM DB Node 2

sudo service mysql start

Cluster size: 2

Page 57: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC Startup

ARM DB Node 1

ARM DB Node 2

ARM DB Node 3

sudo service mysql start

Cluster size: 3

Page 58: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC Startup

ARM DB Node 1

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

sudo service mysql start

Cluster size: 4

Page 59: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC Startup

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

sudo service mysql start

Cluster size: 5

Page 60: Denser, cooler, faster, stronger: PHP on ARM microservers

PXC

● Very good horizontal scaling

● An absolute nightmare in cascading failures

● Those failures are very rare

Page 61: Denser, cooler, faster, stronger: PHP on ARM microservers

Load balancing the database

● How does the application know which DB node to talk to?

● HAProxy! A TCP Load Balancer

Page 62: Denser, cooler, faster, stronger: PHP on ARM microservers

Load balancing the database

ARM Web Node A1

PHP

HAProxy

127.0.0.1:3306Individualdatabasenodes...

An individual web node:

Page 63: Denser, cooler, faster, stronger: PHP on ARM microservers

ARM Web Node A1

Load balancing the database

ARM Web Node A2

ARM Web Node A3

HAProxy

HAProxy

HAProxy

ARM DB Node 3

ARM DB Node 5

ARM DB Node 1

ARM DB Node 2

ARM DB Node 4

Page 64: Denser, cooler, faster, stronger: PHP on ARM microservers

Load balancing the database

● Each HAProxy instance carries out regular health checks on each node

● When a node fails a check it is removed from the pool until it passes again

● The health checks need to verify PXC cluster state, as well as responsiveness to incoming connections

https://github.com/olafz/percona-clustercheck

Page 65: Denser, cooler, faster, stronger: PHP on ARM microservers

Runningon multiple servers● Load balancing ✔● Filesystem ✔● Application cache ✔● Session storage ✔● Log aggregation ✔● Data persistence ✔

Page 66: Denser, cooler, faster, stronger: PHP on ARM microservers

#

F5

Bonded IP address

ARM Nginx

Node A

ARM Nginx

Node B

ARM Web Node A1

ARM Web Node A2

ARM Web Node A3

Web

ARM Web Node B1

ARM Web Node B2

ARM Web Node B3

ARM DB Node 1

ARM DB Node 5

ARM DB Node 2

ARM DB Node 3

ARM DB Node 4

PXC ClusterMoonshot Chassis A

Moonshot Chassis BMoonshot Chassis C

Page 67: Denser, cooler, faster, stronger: PHP on ARM microservers

F5 ARM Web

Node A1

Web

#

ARM Web

Node A2ARM Web

Node A3

ARM Web

Node B1

ARM Web

Node B2

ARM Web

Node B3

ARM DB

Node 1

ARM DB

Node 5

ARM DB

Node 2

ARM DB

Node 3

ARM DB

Node 4

PXC Cluster

Bonded IP address

ARM Nginx

Node A

ARM Nginx

Node B

ARM Web

Node A1

#

ARM Web

Node A2ARM Web

Node A3

ARM Web

Node B1

ARM Web

Node B2

ARM Web

Node B3

ARM DB

Node 1

ARM DB

Node 5

ARM DB

Node 2

ARM DB

Node 3

ARM DB

Node 4

PXC Cluster

Bonded IP address

ARM Nginx

Node A

ARM Nginx

Node B

Moonshot Chassis A

Moonshot Chassis B

Moonshot Chassis C

Moonshot Chassis D

Page 68: Denser, cooler, faster, stronger: PHP on ARM microservers

● Lower total cost of ownership

● Highly fault tolerant

● Uses standard technologies

Page 69: Denser, cooler, faster, stronger: PHP on ARM microservers

What next?

● Several providers of hosted ARM servers

AaaS{ ARM-as-a-Service }

scaleway.com

armasaservice.com

mininodes.com

unixy.net

nx-box.net

Page 70: Denser, cooler, faster, stronger: PHP on ARM microservers

Hewlett Packard Enterprise Moonshot

https://www.hpe.com/uk/en/servers/moonshot.html

Page 71: Denser, cooler, faster, stronger: PHP on ARM microservers

Thanks for listening

joind.in/talk/01006

@jezhalford jezhalford.com