asynchronous php: no longer a hack job

20
Asynchronous PHP: No Longer a Hack Job Asynchronous PHP: No Longer a Hack Job Asynchronous PHP Asynchronous PHP No Longer a Hack Job No Longer a Hack Job Ben Dechrai Ben Dechrai @bendechrai @bendechrai #osdc14 https://joind.in/talk/view/12621 #osdc14 https://joind.in/talk/view/12621 Open Source Developers' Conference 2014

Upload: bendechrai

Post on 16-Jul-2015

413 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Asynchronous PHPAsynchronous PHPNo Longer a Hack JobNo Longer a Hack Job

Ben DechraiBen Dechrai@bendechrai@bendechrai

#osdc14 https://joind.in/talk/view/12621#osdc14 https://joind.in/talk/view/12621

Open

Sourc

e Dev

eloper

s' C

onfe

rence

20

14

Page 2: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

What IsAsynchronous?

Page 3: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Synchronous Eggs Benedict

Make Hollandaise Sauce● separate eggs● melt butter● whisk

Poach Eggs

Fry Bacon

Saute Spinach

Preheat Plates

Toast Bread

7 minutes

3 min

3 min

2 min

1

1

Total 17 minutes, and cold Hollandaise sauce :(

Page 4: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Synchronous Eggs Benedict

Make Hollandaise Sauce● separate eggs● melt butter● whisk

Poach Eggs

Fry Bacon

Saute Spinach

Preheat Plates

Toast Bread

Total 17 minutes, and cold Hollandaise sauce :(

Page 5: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Asynchronous Eggs Benedict

Make Hollondaise Sauce● separate eggs● melt butter● whisk

Poach Eggs

Fry Bacon

Saute Spinach

Preheat Plates

Toast Bread

Total 7 minutes, and hot Hollandaise sauce :)

Page 6: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Synchronous PHP

Full HTTP Request

Create Order

Authorize Payment

Send Email

Send order towarehouse API

Show Confirmation

Update Sales Dashboard

A long running process on checkout

Page 7: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Full HTTP Request

Asynchronous PHP

Create Order

Authorize Payment

Send Email

Send order towarehouse API

Show Confirmation

Update Sales Dashboard

Much faster checkout process!

Page 8: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Manual AsynchronicityManual Asynchronicity

Page 9: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

shell_exec

● not available on all systems● allows for custom php.ini● logs everything● two files, harder to debug/maintain

Page 10: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

detach client

● all code in one place● potentially easier to integrate with a framework● not reliable - requires FPM/CGI mode

Page 11: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

cURL

● must be accessiblevia web request

Page 12: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Demo 1Demo 1

React PHPReact PHP

Page 13: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Summary

● React PHP

– still suffers underlying PHP issues● one process to rule them all● memory overflow

– easier to use, especially with composer

Page 14: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Synchronous PHP Chat

Server

Log File

User 1 User 2

Send SendRead Read

Append Read

Read since when?

Log file size / rotation

Page 15: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Asynchronous PHP Chat

Server

Log File

User 1 User 2

Append

Socket Socket

Page 16: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Demo 3Demo 3

Ratchet on ReactRatchet on React

Page 17: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Summary

● Ratchet

– takes the awesomeness of React

– adds Web Sockets● one process to rule them all● memory overflow

Page 18: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Where To From Here?

● libevent

– replaces the event loop to improve performance● Deployment

– apache doesn't handle web sockets at all, so use varnish or haproxy

● route restests to web server or web socket as required

– make sure the Ratchet app doesn't die● use suvervisord or similar

Page 19: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Credits

● Eggs Benedict by Jiewa Vieri

References

● Methods for asynchronous processes in PHP by Dave Newson

● PHP Is Meant to Die by Software Gunslinger

● React PHP

● Ratchet

Page 20: Asynchronous PHP: No Longer a Hack Job

Asynchronous PHP: No Longer a Hack JobAsynchronous PHP: No Longer a Hack Job

Thank You!Thank You!Questions?Questions?

Ben DechraiBen Dechrai@bendechrai@bendechrai

Open

Sourc

e Dev

eloper

s' C

onfe

rence

20

14