Slide 1

Slide 1 text

Serverless PHP Sebastian Grodzicki @ SymfonyLive Warszawa 2019 !@sebgrodzicki

Slide 2

Slide 2 text

phpinfo() Sebastian Grodzicki
 • Team Lead at • PHP developer for 15+ years • #serverless !@sebgrodzicki

Slide 3

Slide 3 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 4

Slide 4 text

Serverless replaces the traditional approaches to running applications.

Slide 5

Slide 5 text

Platform options Physical servers Virtual machines Containers Platform Serverless Abstraction Control

Slide 6

Slide 6 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 7

Slide 7 text

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

Slide 8

Slide 8 text

Data center evolution DC

Slide 9

Slide 9 text

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

Slide 10

Slide 10 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 11

Slide 11 text

Data center evolution 
 DNS 
 CDN

Slide 12

Slide 12 text

Data center evolution PaaS IaaS SaaS

Slide 13

Slide 13 text

Function as a Service (FaaS)

Slide 14

Slide 14 text

FaaS AWS Lambda Microsoft Azure Functions Google Cloud Functions

Slide 15

Slide 15 text

Bref

Slide 16

Slide 16 text

$ composer require bref/bref CLI

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Slide 19

Slide 19 text

AWSTemplateFormatVersion: '2010-09-09'
 Transform: AWS::Serverless-2016-10-31
 Description: ''
 
 Resources:
 MyFunction:
 Type: AWS::Serverless::Function
 Properties:
 FunctionName: 'my-function'
 Description: ''
 CodeUri: .
 Handler: index.php
 Timeout: 10
 MemorySize: 1024
 Runtime: provided
 Layers:
 - 'arn:aws:lambda:eu- central-1:209497400698:layer:php-73:6' template.yaml

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

$ composer require bref/bref $ vendor/bin/bref init $ aws s3 mb s3://symfonylive CLI

Slide 22

Slide 22 text

$ composer require bref/bref $ vendor/bin/bref init $ aws s3 mb s3://symfonylive $ sam package \
 --output-template-file .stack.yaml \
 --s3-bucket symfonylive CLI

Slide 23

Slide 23 text

$ composer require bref/bref $ vendor/bin/bref init $ aws s3 mb s3://symfonylive $ sam package \
 --output-template-file .stack.yaml \
 --s3-bucket symfonylive $ sam deploy \
 --template-file .stack.yaml \
 --capabilities CAPABILITY_IAM \
 --stack-name SymfonyLive CLI

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

$ vendor/bin/bref invoke my-function
 
 START RequestId: 745a76df-fddc-4cb4-b826-e169d43c67d3 Version: $LATEST
 
 END RequestId: 745a76df-fddc-4cb4-b826-e169d43c67d3
 
 REPORT RequestId: 745a76df-fddc-4cb4-b826-e169d43c67d3 Duration: 13.65 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 63 MB 
 
 "Hello world" CLI

Slide 27

Slide 27 text

Slide 28

Slide 28 text

$ vendor/bin/bref invoke my-function --event '{"name":"SymfonyLive"}'
 
 START RequestId: e44bd988-16aa-4a36-abf1-3924acfb7d42 Version: $LATEST
 
 END RequestId: e44bd988-16aa-4a36-abf1-3924acfb7d42
 
 REPORT RequestId: e44bd988-16aa-4a36-abf1-3924acfb7d42 Duration: 13.27 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 63 MB 
 
 "Hello SymfonyLive" CLI

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Benchmarks: Cold starts 128 512 1024 2048 PHP function 600 ms 280 ms 225 ms 215 ms HTTP application 500 ms 270 ms 270 ms 215 ms Symfony 5.6 s 1.7 s 850 ms 550 ms

Slide 32

Slide 32 text

Benchmarks: Average (warm) execution time 128 512 1024 2048 PHP function 130 ms 32 ms 20 ms 17 ms HTTP application 13 ms 5 ms 3 ms 2 ms Symfony 56 ms 12 ms 6 ms 5 ms

Slide 33

Slide 33 text

Benchmarks: CPU performance 128 512 1024 2048 bench.php 6 s 1.8 s 0.8 s 0.4 s

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Runtime

Slide 36

Slide 36 text

PrettyCI

Slide 37

Slide 37 text

PrettyCI

Slide 38

Slide 38 text

PrettyCI

Slide 39

Slide 39 text

Questions?

Slide 40

Slide 40 text

Thank you!