Slide 1

Slide 1 text

Serverless PHP Sebastian Grodzicki @ PHPCon Poland 2019 @sebgrodzicki

Slide 2

Slide 2 text

2010 2011 2012 2013 2014 2015 2016 2017 2018 2019

Slide 3

Slide 3 text

2010 2011 2012 2013 2014 2015 2016 2017 2018 2019

Slide 4

Slide 4 text

phpinfo(); Sebastian Grodzicki
 • Engineering Manager at • ex-CTO at SHOWROOM & GoldenLine • PHP developer for 15+ years • #serverless @sebgrodzicki

Slide 5

Slide 5 text

Serverless • storage as a service (e.g. Amazon S3), • database as a service (e.g. Amazon Aurora), • message queue as a service (e.g. Amazon SQS), • etc.

Slide 6

Slide 6 text

Serverless replaces the traditional approaches to running applications.

Slide 7

Slide 7 text

Platform options Physical servers

Slide 8

Slide 8 text

Platform options Physical servers Virtual machines

Slide 9

Slide 9 text

Platform options Physical servers Virtual machines Containers

Slide 10

Slide 10 text

Platform options Physical servers Virtual machines Containers Platform

Slide 11

Slide 11 text

Platform options Physical servers Virtual machines Containers Platform Serverless

Slide 12

Slide 12 text

Platform options Physical servers Virtual machines Containers Platform Serverless Abstraction

Slide 13

Slide 13 text

Platform options Physical servers Virtual machines Containers Platform Serverless Abstraction Control

Slide 14

Slide 14 text

Why serverless?

Slide 15

Slide 15 text

Why serverless? • We don't manage, update, configure, provision servers or containers,

Slide 16

Slide 16 text

Why serverless? • We don't manage, update, configure, provision servers or containers, • We don't reserve or scale servers or containers, instead they are scaled automatically and transparently for us,

Slide 17

Slide 17 text

Why serverless? • We don't manage, update, configure, provision servers or containers, • We don't reserve or scale servers or containers, instead they are scaled automatically and transparently for us, • We don't pay for fixed resources, instead we pay for what we actually use (e.g. execution time).

Slide 18

Slide 18 text

Serverless can provide more scalable, affordable and reliable architectures for less effort.

Slide 19

Slide 19 text

Data center evolution DC

Slide 20

Slide 20 text

Data center evolution DC

Slide 21

Slide 21 text

Data center evolution DC

Slide 22

Slide 22 text

Data center evolution DC VM VM VM VM VM VM VM VM VM VM VM VM

Slide 23

Slide 23 text

Data center evolution DC VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C VM C C C C C C

Slide 24

Slide 24 text

Data center evolution 
 DNS 
 CDN

Slide 25

Slide 25 text

Data center evolution PaaS IaaS SaaS

Slide 26

Slide 26 text

Function as a Service (FaaS)

Slide 27

Slide 27 text

FaaS AWS Lambda Microsoft Azure Functions Google Cloud Functions

Slide 28

Slide 28 text

FaaS AWS Lambda

Slide 29

Slide 29 text

Bref

Slide 30

Slide 30 text

$ composer require bref/bref CLI

Slide 31

Slide 31 text

$ composer require bref/bref $ vendor/bin/bref init CLI

Slide 32

Slide 32 text

Slide 33

Slide 33 text

service: app
 
 provider:
 name: aws
 region: us-east-1
 runtime: provided
 
 plugins:
 - ./vendor/bref/bref
 
 functions:
 api:
 handler: index.php
 description: ''
 timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
 layers:
 - ${bref:layer.php-73-fpm}
 events:
 - http: 'ANY /'
 - http: 'ANY /{proxy+}' serverless.yml

Slide 34

Slide 34 text

$ composer require bref/bref $ vendor/bin/bref init
 
 $ serverless deploy CLI

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

$ serverless invoke -f function "Hello world" CLI

Slide 42

Slide 42 text

$ serverless invoke -f function -l
 
 "Hello world"
 
 ------------------------------------------------------
 START RequestId: 71dd0550-46b4-4f13-8438-8f687f385d0c Version: $LATEST
 
 END RequestId: 71dd0550-46b4-4f13-8438-8f687f385d0c
 
 REPORT
 RequestId: 71dd0550-46b4-4f13-8438-8f687f385d0c Duration: 14.20 ms
 Billed Duration: 100 ms
 Memory Size: 1024 MB
 Max Memory Used: 67 MB CLI

Slide 43

Slide 43 text

Slide 44

Slide 44 text

$ serverless invoke \
 > --function function \
 > --data='{"name":"PHPCon Poland"}'
 
 "Hello PHPCon Poland" CLI

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

Benchmarks: Cold starts 128 512 1024 2048 PHP function 500 ms 240 ms 230 ms 220 ms HTTP application 345 ms 250 ms 240 ms 240 ms Symfony 5.4 s 1.4 s 800 ms 500 ms

Slide 47

Slide 47 text

Benchmarks: Average (warm) execution time 128 512 1024 2048 PHP function 175 ms 35 ms 16 ms 13 ms HTTP application 10 ms 1 ms 1 ms 1 ms Symfony 58 ms 4 ms 4 ms 4 ms

Slide 48

Slide 48 text

Benchmarks: CPU performance 128 512 1024 2048 bench.php 5.7 s 1.4 s 0.65 s 0.33 s

Slide 49

Slide 49 text

Maturity matrix Simplicity Performances Reliability Jobs, Cron ⬤ ⬤ ⬤ API ⬤ ⬤ ⬤ API with MySQL / PostgreSQL ⬤ ⬤ ⬤ Website ⬤ ⬤ ⬤ Website with MySQL / PostgreSQL ⬤ ⬤ ⬤ Legacy application ⬤ ⬤ ⬤

Slide 50

Slide 50 text

Runtime

Slide 51

Slide 51 text

Who uses Laravel? ȱȱȱȱȱȱȱȱȱȱ

Slide 52

Slide 52 text

Laravel Vapor

Slide 53

Slide 53 text

Laravel Vapor

Slide 54

Slide 54 text

PrettyCI

Slide 55

Slide 55 text

PrettyCI

Slide 56

Slide 56 text

PrettyCI

Slide 57

Slide 57 text

Questions?

Slide 58

Slide 58 text

Thank you!