SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Backpressure?
Resistance is not futile.
Jay Phelps | @_jayphelps
Jay Phelps | @_jayphelps
Jay Phelps
@_jayphelps
Senior Software Engineer
Citadel
Jay Phelps | @_jayphelps
Backpressure
Jay Phelps | @_jayphelps
A term borrowed from fluid dynamics,
like in automotive exhaust and house
plumbing.
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of fluid through pipes.”
^ data through software.
Jay Phelps | @_jayphelps
“Resistance or force opposing the
desired flow of data through software.”
Jay Phelps | @_jayphelps
i.e. “input is coming in faster
than we can output”
Jay Phelps | @_jayphelps
Cool
Jay Phelps | @_jayphelps
…but…what is Backpressure?
Jay Phelps | @_jayphelps
Let’s start with an analogy!
Jay Phelps | @_jayphelps
I Love Lucy: Chocolate Factory
"I Love Lucy" Job Switching - 1952 - CBS
"I Love Lucy" Job Switching - 1952 - CBS
video: https://bit.ly/1eUkJgG
Jay Phelps | @_jayphelps
Lucy has Backpressure!
Jay Phelps | @_jayphelps
She tries to set them to the side
(buffering)
Jay Phelps | @_jayphelps
Then she tries eating and hiding them
(dropping)
Jay Phelps | @_jayphelps
She needs to slow down the conveyor belt
(producer control)
Jay Phelps | @_jayphelps
Let’s talk software
Jay Phelps | @_jayphelps
Reading and writing files
File Systems
Jay Phelps | @_jayphelps
Writing is slower than reading
Jay Phelps | @_jayphelps
Read: 150 MB/s
Write: 100 MB/s
Example hard drive
Jay Phelps | @_jayphelps
Example hard drive
150 MB/s - 100 MB/s = 50 MB/sdeficit
Jay Phelps | @_jayphelps
Imagine needing to read/write a 6 GB file
Example hard drive
Jay Phelps | @_jayphelps
Example hard drive
6 GB / 150 MB read = 40 seconds
Jay Phelps | @_jayphelps
Example hard drive
50 MB deficit x 40 sec = 2 GB memory!
Jay Phelps | @_jayphelps
That’s a lot of wasted memory
Jay Phelps | @_jayphelps
Solution: only read as fast as you can write
(control the producer)
Jay Phelps | @_jayphelps
Most I/O libraries do this for you, automatically
Node.js Streams is a great example
Jay Phelps | @_jayphelps
const zlib = require('zlib');
const fs = require('fs');
const gzip = zlib.createGzip();
const input = fs.createReadStream('input.txt');
const output = fs.createWriteStream('input.txt.gz');
// handles backpressure for you
input.pipe(gzip).pipe(output);
Jay Phelps | @_jayphelps
Server-to-Server Communication
A
Server
B
Server
C
Server
Jay Phelps | @_jayphelps
A
Server
B
Server
C
Server
100 rps 75 rps
Jay Phelps | @_jayphelps
A B C
Server Server Server
60 sec * 25 rps = 1,500 rpm!
100 rps 75 rps
Jay Phelps | @_jayphelps
A B C
Server Server Server
100 rps 75 rps
60 sec * 60 min * 25 rps = 90,000 rph!
Jay Phelps | @_jayphelps
Jay Phelps | @_jayphelps
Solution: control the producer (or scale up)
Jay Phelps | @_jayphelps
…unfortunately, that isn’t easy
Jay Phelps | @_jayphelps
RSocket, gRPC, etc
Jay Phelps | @_jayphelps
UI Rendering
Jay Phelps | @_jayphelps
Throttling/debouncing keyboard input
Jay Phelps | @_jayphelps
High volume WebSockets
Jay Phelps | @_jayphelps
Events are coming in faster
than we can render them
Jay Phelps | @_jayphelps
Solution: control the producer?
Jay Phelps | @_jayphelps
Is this even a good User Experience?
Jay Phelps | @_jayphelps
Performance problems are often UX problems!
Jay Phelps | @_jayphelps
Buffer or Drop/Sample?
Jay Phelps | @_jayphelps
Maybe table virtualization too?
VirtualizedNOT Virtualized vs.
Jay Phelps | @_jayphelps
Backpressure Strategies
Jay Phelps | @_jayphelps
If you can, scale up your resources
Jay Phelps | @_jayphelps
Three fundamental strategies
Jay Phelps | @_jayphelps
Control the producer
Buffer
Drop
Jay Phelps | @_jayphelps
Control the producer
slow down/speed up is decided by consumer
Jay Phelps | @_jayphelps
const source = connectToSource();
source.pull(response1 => {
console.log(response1);
// later…
source.pull(response2 => {
console.log(response2);
});
});
Jay Phelps | @_jayphelps
Controlling is usually the ideal option
but not always viable
Jay Phelps | @_jayphelps
Buffer
accumulate incoming data spikes temporarily
Jay Phelps | @_jayphelps
Be careful with unbounded buffers!
Jay Phelps | @_jayphelps
Drop
sample a percentage of the incoming data
Jay Phelps | @_jayphelps
Throttle, debounce, etc
Jay Phelps | @_jayphelps
Not always acceptable to lose data
Jay Phelps | @_jayphelps
Libraries for handling Backpressure
Jay Phelps | @_jayphelps
Probably streams, but maybe not!
Jay Phelps | @_jayphelps
Push-based streams
RxJS, Bacon.js, xstream
Jay Phelps | @_jayphelps
Push: producer is in control
Jay Phelps | @_jayphelps
Pull-based streams
Node.js Streams, Web Streams, Async Iterators, IxJS
Jay Phelps | @_jayphelps
Pull: consumer is in control
Jay Phelps | @_jayphelps
It’s not unusual to use both push
and pull streams in the same app
Jay Phelps | @_jayphelps
“Resistance opposing the
desired flow of data through software.”
Jay Phelps | @_jayphelps
i.e. “input is coming in faster
than we can output”
Jay Phelps | @_jayphelps
Control the producer
Buffer
Drop
Jay Phelps | @_jayphelps
Thanks!
@_jayphelps

Weitere ähnliche Inhalte

Mehr von Jay Phelps

Mehr von Jay Phelps (6)

Why I Love JSX!
Why I Love JSX!Why I Love JSX!
Why I Love JSX!
 
ES2015 and Beyond
ES2015 and BeyondES2015 and Beyond
ES2015 and Beyond
 
Intro to Ember CLI
Intro to Ember CLIIntro to Ember CLI
Intro to Ember CLI
 
Ember Overview in 5 Minutes
Ember Overview in 5 MinutesEmber Overview in 5 Minutes
Ember Overview in 5 Minutes
 
Profit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform DistributionProfit From Your Media Library Using Multi-Platform Distribution
Profit From Your Media Library Using Multi-Platform Distribution
 
Intro to Ember.js
Intro to Ember.jsIntro to Ember.js
Intro to Ember.js
 

Kürzlich hochgeladen

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Kürzlich hochgeladen (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 

Backpressure? Resistance is not futile. (Uphill Conf 2019)

  • 1. Backpressure? Resistance is not futile. Jay Phelps | @_jayphelps
  • 2. Jay Phelps | @_jayphelps Jay Phelps @_jayphelps Senior Software Engineer Citadel
  • 3. Jay Phelps | @_jayphelps Backpressure
  • 4. Jay Phelps | @_jayphelps A term borrowed from fluid dynamics, like in automotive exhaust and house plumbing.
  • 5. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.”
  • 6. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.”
  • 7. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of fluid through pipes.” ^ data through software.
  • 8. Jay Phelps | @_jayphelps “Resistance or force opposing the desired flow of data through software.”
  • 9. Jay Phelps | @_jayphelps i.e. “input is coming in faster than we can output”
  • 10. Jay Phelps | @_jayphelps Cool
  • 11. Jay Phelps | @_jayphelps …but…what is Backpressure?
  • 12. Jay Phelps | @_jayphelps Let’s start with an analogy!
  • 13. Jay Phelps | @_jayphelps I Love Lucy: Chocolate Factory
  • 14. "I Love Lucy" Job Switching - 1952 - CBS "I Love Lucy" Job Switching - 1952 - CBS video: https://bit.ly/1eUkJgG
  • 15. Jay Phelps | @_jayphelps Lucy has Backpressure!
  • 16. Jay Phelps | @_jayphelps She tries to set them to the side (buffering)
  • 17. Jay Phelps | @_jayphelps Then she tries eating and hiding them (dropping)
  • 18. Jay Phelps | @_jayphelps She needs to slow down the conveyor belt (producer control)
  • 19. Jay Phelps | @_jayphelps Let’s talk software
  • 20. Jay Phelps | @_jayphelps Reading and writing files File Systems
  • 21. Jay Phelps | @_jayphelps Writing is slower than reading
  • 22. Jay Phelps | @_jayphelps Read: 150 MB/s Write: 100 MB/s Example hard drive
  • 23. Jay Phelps | @_jayphelps Example hard drive 150 MB/s - 100 MB/s = 50 MB/sdeficit
  • 24. Jay Phelps | @_jayphelps Imagine needing to read/write a 6 GB file Example hard drive
  • 25. Jay Phelps | @_jayphelps Example hard drive 6 GB / 150 MB read = 40 seconds
  • 26. Jay Phelps | @_jayphelps Example hard drive 50 MB deficit x 40 sec = 2 GB memory!
  • 27. Jay Phelps | @_jayphelps That’s a lot of wasted memory
  • 28. Jay Phelps | @_jayphelps Solution: only read as fast as you can write (control the producer)
  • 29. Jay Phelps | @_jayphelps Most I/O libraries do this for you, automatically Node.js Streams is a great example
  • 30. Jay Phelps | @_jayphelps const zlib = require('zlib'); const fs = require('fs'); const gzip = zlib.createGzip(); const input = fs.createReadStream('input.txt'); const output = fs.createWriteStream('input.txt.gz'); // handles backpressure for you input.pipe(gzip).pipe(output);
  • 31. Jay Phelps | @_jayphelps Server-to-Server Communication
  • 33. A Server B Server C Server 100 rps 75 rps Jay Phelps | @_jayphelps
  • 34. A B C Server Server Server 60 sec * 25 rps = 1,500 rpm! 100 rps 75 rps Jay Phelps | @_jayphelps
  • 35. A B C Server Server Server 100 rps 75 rps 60 sec * 60 min * 25 rps = 90,000 rph! Jay Phelps | @_jayphelps
  • 36. Jay Phelps | @_jayphelps Solution: control the producer (or scale up)
  • 37. Jay Phelps | @_jayphelps …unfortunately, that isn’t easy
  • 38. Jay Phelps | @_jayphelps RSocket, gRPC, etc
  • 39. Jay Phelps | @_jayphelps UI Rendering
  • 40. Jay Phelps | @_jayphelps Throttling/debouncing keyboard input
  • 41. Jay Phelps | @_jayphelps High volume WebSockets
  • 42.
  • 43.
  • 44. Jay Phelps | @_jayphelps Events are coming in faster than we can render them
  • 45. Jay Phelps | @_jayphelps Solution: control the producer?
  • 46. Jay Phelps | @_jayphelps Is this even a good User Experience?
  • 47. Jay Phelps | @_jayphelps Performance problems are often UX problems!
  • 48. Jay Phelps | @_jayphelps Buffer or Drop/Sample?
  • 49. Jay Phelps | @_jayphelps Maybe table virtualization too?
  • 51. Jay Phelps | @_jayphelps Backpressure Strategies
  • 52. Jay Phelps | @_jayphelps If you can, scale up your resources
  • 53. Jay Phelps | @_jayphelps Three fundamental strategies
  • 54. Jay Phelps | @_jayphelps Control the producer Buffer Drop
  • 55. Jay Phelps | @_jayphelps Control the producer slow down/speed up is decided by consumer
  • 56. Jay Phelps | @_jayphelps const source = connectToSource(); source.pull(response1 => { console.log(response1); // later… source.pull(response2 => { console.log(response2); }); });
  • 57. Jay Phelps | @_jayphelps Controlling is usually the ideal option but not always viable
  • 58. Jay Phelps | @_jayphelps Buffer accumulate incoming data spikes temporarily
  • 59. Jay Phelps | @_jayphelps Be careful with unbounded buffers!
  • 60. Jay Phelps | @_jayphelps Drop sample a percentage of the incoming data
  • 61. Jay Phelps | @_jayphelps Throttle, debounce, etc
  • 62. Jay Phelps | @_jayphelps Not always acceptable to lose data
  • 63. Jay Phelps | @_jayphelps Libraries for handling Backpressure
  • 64. Jay Phelps | @_jayphelps Probably streams, but maybe not!
  • 65. Jay Phelps | @_jayphelps Push-based streams RxJS, Bacon.js, xstream
  • 66. Jay Phelps | @_jayphelps Push: producer is in control
  • 67. Jay Phelps | @_jayphelps Pull-based streams Node.js Streams, Web Streams, Async Iterators, IxJS
  • 68. Jay Phelps | @_jayphelps Pull: consumer is in control
  • 69. Jay Phelps | @_jayphelps It’s not unusual to use both push and pull streams in the same app
  • 70. Jay Phelps | @_jayphelps “Resistance opposing the desired flow of data through software.”
  • 71. Jay Phelps | @_jayphelps i.e. “input is coming in faster than we can output”
  • 72. Jay Phelps | @_jayphelps Control the producer Buffer Drop
  • 73. Jay Phelps | @_jayphelps Thanks! @_jayphelps