Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Event-driven programming for the masses (WebMeetupCgn)

Event-driven programming for the masses (WebMeetupCgn)

What makes nginx faster than Apache's original design? What makes Node.js applications faster than traditional web applications? How can we achieve the same benefits for our own applications? This talk discusses how event-driven programming can help in building high performance, non-blocking, reactive, concurrent, single-threaded applications (bingo). Don't worry, no need to install Node.js and npm install half the internet. Let's build high-performance applications from scratch with whatever language you're most comfortable with!

---

This talk was presented at WebMeetupCgn (https://www.meetup.com/de-DE/Web-Meetup-Cologne/events/255796092/) as one of two talks this day (~30 min each). This implies that this is only supposed to be a 101 introduction. The talk includes a number of live demos and examples which are not included as part of the slides, so you may be missing some context here. See you at the next event perhaps?

Christian Lück
PRO

November 14, 2018
Tweet

More Decks by Christian Lück

Other Decks in Programming

Transcript

  1. event-driven programming
    for the masses
    High performance for fun and profit.

    View Slide

  2. Agenda
    - Hello!
    - 101 of event-driven programming
    - Examples from scratch
    - Putting into practice
    - Conclusions
    2

    View Slide

  3. Hello!
    3

    View Slide

  4. $ whoami
    4

    View Slide

  5. $ whoami
    Christian Lück
    5

    View Slide

  6. $ whoami
    Christian Lück
    6

    View Slide

  7. $ whoami
    Christian Lueck
    7

    View Slide

  8. $ whoami
    Christian Lueck
    8

    View Slide

  9. $ whoami
    Christian Lueck
    @clue
    9

    View Slide

  10. $ whoami
    Christian Lueck
    @another_clue
    10

    View Slide

  11. $ whoami
    Christian Lueck
    @another_clue
    passionate about pushing the limits
    11

    View Slide

  12. $ whoami
    Christian Lueck
    @another_clue
    passionate about pushing the limits
    freelance software engineer 12

    View Slide

  13. Who are you?
    13
    now that you know me…

    View Slide

  14. Who are you?
    14
    now that you know me…
    - programmers / developers?
    - architects / engineers?

    View Slide

  15. What is event-driven programming?
    15

    View Slide

  16. What is an event?
    16

    View Slide

  17. event
    17

    View Slide

  18. event
    18
    past action recognized by environment

    View Slide

  19. event
    19
    past action recognized by environment
    triggered reaction, listening

    View Slide

  20. event
    20
    past action recognized by environment
    triggered reaction, listening
    hardware or software

    View Slide

  21. event-driven
    21

    View Slide

  22. event-driven
    program flow driven by events
    22

    View Slide

  23. event-driven
    program flow driven by events
    react to events (handler)
    23

    View Slide

  24. event-driven
    program flow driven by events
    react to events (handler)
    event-loop (reactor)
    24

    View Slide

  25. event-driven programming
    25

    View Slide

  26. event-driven program?
    26

    View Slide

  27. event-driven web applications
    27

    View Slide

  28. frontend
    28
    backend

    View Slide

  29. frontend
    29

    View Slide

  30. frontend
    mouse clicks, keyboard input (UI)
    30

    View Slide

  31. frontend
    mouse clicks, keyboard input (UI)
    backend communication
    31

    View Slide

  32. frontend
    mouse clicks, keyboard input (UI)
    backend communication
    browser APIs
    32

    View Slide

  33. backend
    33

    View Slide

  34. backend
    network protocols (HTTP)
    34

    View Slide

  35. backend
    network protocols (HTTP)
    database APIs
    35

    View Slide

  36. backend
    network protocols (HTTP)
    database APIs
    filesystem
    36

    View Slide

  37. backend is all about I/O
    37

    View Slide

  38. is your backend all about I/O?
    38

    View Slide

  39. Show me some code!
    39

    View Slide

  40. Show me some code!
    Programming language?
    40

    View Slide

  41. Node.js
    41

    View Slide

  42. Node.js
    42
    good fit, huge ecosystem

    View Slide

  43. Node.js
    43
    good fit, huge ecosystem
    did not invent concept

    View Slide

  44. Node.js
    44
    good fit, huge ecosystem
    did not invent concept
    npm install…

    View Slide

  45. nodejs?
    45

    View Slide

  46. no js!
    46

    View Slide

  47. Everybody’s favorite language…
    47

    View Slide

  48. PHP
    48

    View Slide

  49. PHP
    49
    gets the job done

    View Slide

  50. PHP
    50
    gets the job done
    widespread usage

    View Slide

  51. PHP
    51
    gets the job done
    widespread usage
    if PHP can do it…

    View Slide

  52. Examples and demo time
    52

    View Slide

  53. Putting into practice
    53

    View Slide

  54. Knowing concepts
    is good!
    54
    Building from
    scratch is not!

    View Slide

  55. event-driven programming can get complex
    55

    View Slide

  56. event-driven programming can get complex
    use abstractions!
    56

    View Slide

  57. 57

    View Slide

  58. 58

    View Slide

  59. 59
    related

    View Slide

  60. 60
    related
    event-driven

    View Slide

  61. 61
    related
    event-driven
    asynchronous

    View Slide

  62. 62
    related
    event-driven
    asynchronous
    multi-threaded

    View Slide

  63. core concept
    63

    View Slide

  64. core concept
    often intertwined
    64

    View Slide

  65. event-driven, non-blocking I/O
    for the masses?
    65

    View Slide

  66. timers
    66

    View Slide

  67. sockets
    67

    View Slide

  68. HTTP
    68

    View Slide

  69. nginx vs.
    Apache
    69

    View Slide

  70. Node.js vs.
    PHP-FPM
    70

    View Slide

  71. ? requests/s
    71

    View Slide

  72. 5k requests/s
    72
    this is a local single core benchmark!
    dual core i3 => 10k requests/s
    36M requests/h

    View Slide

  73. instant real-time updates
    73

    View Slide

  74. live updates
    WebSockets
    74

    View Slide

  75. background worker queues
    75

    View Slide

  76. no polling
    76
    jobs instantly picked up
    thousands of jobs per second
    concurrently processing hundreds or more

    View Slide

  77. 700 MiB/s
    77
    dockerd maxed out
    PHP not

    View Slide

  78. databases
    78

    View Slide

  79. 50k OP/s
    pure PHP
    who needs native code anyway?
    79

    View Slide

  80. event-driven, non-blocking I/O is
    massively fast
    80

    View Slide

  81. for the masses?
    81

    View Slide

  82. when?
    82

    View Slide

  83. when?
    83
    app is I/O bound

    View Slide

  84. when?
    84
    app is I/O bound
    high(er) performance is wanted

    View Slide

  85. when?
    85
    app is I/O bound
    high(er) performance is wanted
    blocking and non-blocking can be separated

    View Slide

  86. event-driven, non-blocking I/O is
    massively useful
    86

    View Slide

  87. Conclusions
    87

    View Slide

  88. event-driven
    88

    View Slide

  89. event-driven
    89
    basic paradigm

    View Slide

  90. event-driven
    90
    basic paradigm
    very fast & versatile

    View Slide

  91. event-driven
    91
    basic paradigm
    very fast & versatile
    consider when app is I/O bound

    View Slide

  92. integration
    92

    View Slide

  93. integration
    non-blocking and blocking don’t mix well
    93

    View Slide

  94. integration
    non-blocking and blocking don’t mix well
    decide for either approach
    94

    View Slide

  95. integration
    non-blocking and blocking don’t mix well
    decide for either approach
    isolate & communicate
    95

    View Slide

  96. ReactPHP
    96

    View Slide

  97. ReactPHP
    97
    a real deal and here to stay

    View Slide

  98. ReactPHP
    98
    a real deal and here to stay
    stable & production ready

    View Slide

  99. ReactPHP
    99
    a real deal and here to stay
    stable & production ready
    *awesome*

    View Slide

  100. // thank you!
    $loop->stop();
    100
    @another_clue – https://lueck.tv/

    View Slide