61
Anatomy of a PHP Request Herman J. Radtke, III Joel Salas

Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas [email protected]

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Anatomy of a PHP Request

Herman J. Radtke, III

Joel Salas

Page 2: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Who are we?

Page 3: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Herman J. Radtke III

VP Engineering at HauteLook

Twitter: @hermanradtke

GitHub: hjr3

Page 4: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Joel Salas

Lead Platform Engineer at HauteLook

Twitter: @joelesalas

GitHub: joelesalas

[email protected]

Page 5: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Anatomy:The science of the shape and

structure of organisms and their

parts.

Page 6: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 7: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Process Lifecycle

Page 8: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 9: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

PHP Internals

Page 10: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 11: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

HTTP

GET

POST

PUT

DELETE

HEAD

Page 12: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 13: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Apache (mod_php)

vs

nginx + php-fpm

Page 14: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 15: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

mod_php(Apache)

Page 16: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 17: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

FastCGI / FPM(NGINX)

Page 18: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 19: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 20: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 21: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 22: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

GET /index.php HTTP/1.1

Page 23: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 24: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

MINIT

Page 25: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 26: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

MINIT Example

Redis Sentinel

Page 27: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

What is Sentinel?

Page 28: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

1. Create a global variable to track Redis server

Page 29: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

2. If fails, query Sentinel again for a server

Page 30: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

3. Value persists across requests (global in MINIT)

Page 31: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

RINIT

Page 32: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 33: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Microtimers

Page 34: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Execute

Page 35: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 36: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php

// index.php

require __DIR__ . ‘/path/to/App.php’;

require __DIR__ . ‘/path/to/Config.php’;

$config = new Config();

$app = new App($config);

Page 37: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php

require

dirname(__DIR__) .

‘/vendor/autoload.php’;

Page 38: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php

$vendorDir = dirname(__DIR__);

$classMap = array(

‘Legacy_Model’ =>

$vendorDir . ‘/path/to/App/Model.php’;

);

Page 39: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

What about Opcache?

Page 40: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?phpecho “Hello SCALE”;

Page 41: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

ASSIGN !0, 'Hello+SCALE'ECHO !0RETURN null

Page 42: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Opcache is global

Page 43: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Flatten config files

Page 44: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Cache the classmap

Page 45: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Cache file paths

Page 46: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

stat=0

Page 47: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Each request is independent

Page 48: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php

$db = new

PDO('mysql:host=localhost;dbname=test',

'username',

'password'

);

Page 49: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php

$fp = fopen('php://output', 'w');fwrite($fp, 'Hello World!');fclose($fp);

Page 50: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at on line 8)

Page 51: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

<?php ob_start(); ?>

<p>Hello world!</p>

<?php ob_end_flush(); ?>

Page 52: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

RSHUTDOWN

Page 53: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 54: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

MSHUTDOWN

Page 55: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 56: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Review

Page 57: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 58: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com
Page 59: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Questions?

Page 60: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

HauteLook is hiring!http://hautelook.github.io/careers/sr-software-eng-php.html

Page 61: Anatomy of a Joel Salas PHP Request Herman J. Radtke, III · 2016-01-24 · Joel Salas Lead Platform Engineer at HauteLook Twitter: @joelesalas GitHub: joelesalas joelesalas@gmail.com

Links● http://blog.golemon.com/2008/01/understanding-opcodes.html

● http://web.archive.org/web/20101216035343/http://dev-tips.com/featured/output-

buffering-for-web-developers-a-beginners-guide

● http://www.sitepoint.com/sitepoint-smackdown-php-vs-node-js/

● https://www.phusionpassenger.

com/library/walkthroughs/basics/ruby/reloading_code.html

● http://www.amazon.com/Extending-Embedding-PHP-Sara-

Golemon/dp/067232704X