SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
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

Contenu connexe

Plus de Jay Phelps

Plus de 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
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
+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
 

Dernier (20)

A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
+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...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

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