SlideShare uma empresa Scribd logo
1 de 159
Crossroads of asynchrony
and graceful degradation
Nitesh Kant,!
Software Engineer, !
Netflix Edge Engineering.!
!
@NiteshKant
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/netflix-asynchronous-apps
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon San Francisco
www.qconsf.com
Nitesh Kant
Who Am I?
❖ Engineer, Edge Engineering, Netflix.!
❖ Core contributor, RxNetty*!
❖ Contributor, Zuul**
* https://github.com/ReactiveX/RxNetty
** https://github.com/Netflix/zuul
@NiteshKant
How do systems fail?
A simple example. Showing a movie on Netflix.
Video Metadata
Video Bookmark
Video Rating
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
Disclaimer: This is an example and not an exact representation of the processing
Synchronicity
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
Disclaimer: This is an example and not an exact representation of the processing
The bigger picture Price of being synchronous?
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
Disclaimer: This is an example and not an exact representation of the processing
In a microservices world
Edge Service
Ratings ServiceVideo Metadata Service
Bookmarks Service
Disclaimer: This is an example and not an exact representation of the processing
In a microservices world
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getMovieMetadata(movieId)
Disclaimer: This is an example and not an exact representation of the processing
In a microservices world
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getMovieMetadata(movieId)
getBookmark(movieId, userId)
Disclaimer: This is an example and not an exact representation of the processing
In a microservices world
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
Disclaimer: This is an example and not an exact representation of the processing
Busy thread time
=
Sum of the time taken to
make all 3 service calls
How do systems fail?
1. Latency Latency is your worst enemy in a
synchronous world.
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
Disclaimer: This is an example and not an exact representation of the processing
Disclaimer: This is an example and not an exact representation of the processing
Ratings Service
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
getRatings(movieId)
Server threadpool
Thread
Thread
Thread
Thread
Thread
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
getRatings(movieId)
Server threadpool
Thread
Thread
Thread
Thread
Thread
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
Disclaimer: This is an example and not an exact representation of the processing
Client Threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
Disclaimer: This is an example and not an exact representation of the processing
Client Threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
Disclaimer: This is an example and not an exact representation of the processing
Client Threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
Managing client thread pools
Disclaimer: This is an example and not an exact representation of the processing
Client Threadpool
Thread
Thread
Thread
Thread
Thread
Managing client thread pools
Managing client thread pools
Managing client thread pools
Managing client thread pools
Clients have become our babies
Clients have become our babies
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
getMovieMetadata(movieId)
Disclaimer: This is an example and not an exact representation of the processing
Client Threadpool
Thread
Thread
Thread
Thread
Thread
Client Threadpool
Thread
Thread
Thread
Thread
Thread
Client Threadpool
Thread
Thread
Thread
Thread
Thread
getBookmark(movieId, userId)
getRatings(movieId)
Clients have become our babies
Untuned/Wrongly tuned
clients cause many outages.
Have we exchanged a bigger problem with a
smaller one?
How do systems fail?
2. Overload Abusive clients, recovery spikes, special
events ….
We did a load test… https://github.com/Netflix-Skunkworks/
WSPerfLab
Hello Netflix!
Detailed analysis available online:
https://github.com/Netflix-Skunkworks/WSPerfLab/blob/master/test-results/RxNetty_vs_Tomcat_April2015.pdf
! Graceful
This isn’t graceful degradation!
This happens at high CPU usage.
This happens at high CPU usage.
So, don’t let the system reach that limit…
This happens at high CPU usage.
So, don’t let the system reach that limit…
a.k.a Throttling.
Fairness?
One abusive request type can penalize other request
paths.
How do systems fail?
3. Thundering herds The failure after recovery….
Retries
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Retries
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Video Metadata Service Cluster
Retries
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Video Metadata Service Cluster
Retries
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Video Metadata Service Cluster
Retries are useful in steady state….
…but…
Retries
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Video Metadata Service Cluster
Our systems are missing empathy.
Because they lack knowledge about the peers.
Knowledge comes from various signals..
Ability to adapt to those signals is important.
This can not adapt…
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
Disclaimer: This is an example and not an exact representation of the processing
Asynchrony It is the key to success.
What should be async?
What should be async?
Edge Service
Video Metadata Service
What should be async?
Edge Service
Video Metadata Service
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
Application logic
What should be async?
Edge Service
Video Metadata Service
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
I/O
I/O
I/O
Application logic
I/O
What should be async?
Edge Service
Video Metadata Service
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
I/O
I/O
I/O
Application logic
I/O
Network protocol
Key aspects of being async.
Key aspects of being async.
1. Lifecycle control
Lifecycle control
Start processing Stop processing
Key aspects of being async.
2. Flow control
Flow control
When How much
Key aspects of being async.
3. Function composition
Function composition
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
Function composition
Composing the processing !
of a method into a single control point.
public Observable<Movie> getMovie(String movieId) {!
return Observable.zip(getMovieMetadata(movieId),!
getBookmark(movieId, userId),!
getRatings(movieId),!
(meta,bmark,rating)->new Movie(meta,bmark,rating));!
}!
Composing the processing !
of a method into a single control point.
Flow & Lifecycle Control
with
What should be async?
Edge Service
Video Metadata Service
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
I/O
I/O
I/O
Application logic
I/O
Network protocol
I/O
Edge Service
Server threadpool
Thread
Thread
Thread
Thread
Thread
Client Threadpool
Thread
Thread
Thread
Thread
Thread
getRatings(movieId)
I/O
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
Eventloops = f (Number of cores)
I/O
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
Connections multiplexed !
on a !
single eventloop.
I/O
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
I/O
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Clients share the eventloops!
with!
the server.
I/O
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
All clients share !
the!
same eventloop
Composing the processing !
of a service into a single control point.
Flow & Lifecycle Control
with
What should be async?
Edge Service
Video Metadata Service
getMovieMetadata(movieId)
getBookmark(movieId, userId)
getRatings(movieId)
I/O
I/O
I/O
Application logic
I/O
Network protocol
Network Protocol
HTTP/1.1?
HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1
GET /movie?id=3 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1
GET /movie?id=3 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1 200 OK!
ID: 1!
…
HTTP/1.1
GET /movie?id=3 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1 200 OK!
ID: 1!
… HTTP/1.1 200 OK!
ID: 2!
…
HTTP/1.1
GET /movie?id=3 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=1 HTTP/1.1
HTTP/1.1 200 OK!
ID: 1!
… HTTP/1.1 200 OK!
ID: 2!
…
HTTP/1.1 200 OK!
ID: 3!
…
HTTP/1.1
GET /movie?id=3
GET /movie?id=2
GET /movie?id=1
HTTP/1.1 200
ID: 1!
… HTTP/1.1 200
ID: 2!
…
HTTP/1.1 200
ID: 3!
…
Head Of Line Blocking => Synchronous
Network Protocol
HTTP/1.1?
Network Protocol
We need a multiplexed bi-directional
protocol
Multiplexed
GET /movie?id=1 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=3 HTTP/1.1
Bi-directional
GET /movie?id=1 HTTP/1.1
GET /movie?id=2 HTTP/1.1
GET /movie?id=3 HTTP/1.1
CANCEL
Composing the processing !
of the entire application into a single control point.
Flow & Lifecycle Control
with
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
Disclaimer: This is an example and not an exact representation of the processing
Observable<Movie>
Observable<Movie>
Composing the processing !
of the entire application into a single control point.
Revisiting the failure modes
Latency
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Latency
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Impact is localized to the
connection.
Latency
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Impact is localized to the
connection.
An outstanding request has
little cost.
An outstanding request has little cost.
GET /movie?id=1 HTTP/1.1
HTTP/1.1 200 OK!
…
} Any stored state between!
request - response!
is costly.
Outstanding requests have low cost
so
Latency is a lesser evil in asynchronous systems.
Overload & Thundering Herds
Edge Service
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Disclaimer: This is an example and not an exact representation of the processing
Reduce work done !
when overloaded
Overload & Thundering Herds
Edge Service
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Disclaimer: This is an example and not an exact representation of the processing
Reduce work done !
when overloaded
Stop accepting!
new requests.
Stop accepting new requests
Non-blocking I/O gives better control
Stop accepting new requests
But … we are still “throttling”
Stop accepting new requests
Are we being empathetic?
Request-leasing
http://reactivesocket.io/
Request-leasing
Peer 1Peer 2
Network connection
Request-leasing
Peer 1Peer 2
“Lease” 5 requests for 1 minute.
Network connection
Request-leasing
Peer 1Peer 2
“Lease” 5 requests for 1 minute.
GET /movie?id=1 HTTP/1.1
GET /movie?id=2 HTTP/1.1
Network connection
Server
Client 1 Client 2 Client 8
ServerCapacity: 100 RPM
Client 1 Client 2 Client 8
“Lease” 10 requests for 1 minute.
ServerCapacity: 100 RPM
Client 1 Client 2 Client 8
“Lease” 10 requests for 1 minute.
“Lease” 10 requests for 1 minute.
“Lease” 10 requests for 1 minute.
ServerCapacity: 100 RPM
Client 1 Client 2 Client 8
“Lease” 10 requests for 1 minute.
“Lease” 10 requests for 1 minute.
“Lease” 10 requests for 1 minute.
Reserve Capacity: !
20 RPM
Time bound lease.
“Lease” 10 requests for 1 minute.
Time bound lease.
No extra work for cancelling leases.
“Lease” 10 requests for 1 minute.
Time bound lease.
No extra work for cancelling leases.
Receiver controls the flow of requests
“Lease” 10 requests for 1 minute.
When things go south
ServerCapacity: 20 RPM
Client 1 Client 2 Client 8
“Lease” 5 requests for 1 minute.
“Lease” 2 requests for 1 minute.
X No more “Lease”
ServerCapacity: 20 RPM
Client 1 Client 2 Client 8
“Lease” 5 requests for 1 minute.
“Lease” 2 requests for 1 minute.
X No more “Lease”
Prioritization
Managing client configs?
Threadpools?
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
I/O!
is!
non-blocking.
Threadpools?
Edge Service
Disclaimer: This is an example and not an exact representation of the processing
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
Application code !
is!
non-blocking.
Threadpools?
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
No blocking/Waiting => Only CPU work
Threadpools?
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Eventloop (Inbound)
Connection
Connection
Connection
Connection
Connection
getMovieMetadata(movieId)
Eventloop (Outbound)
Connection
Connection
Connection
Connection
Connection
No blocking/Waiting => Only CPU work
So,
Eventloops = # of cores
Tuning parameters?
Tuning parameters?
X
Tuning parameters?
X
X
Tuning parameters?
X
X?
?
Case for timeouts?
Case for timeouts?
Read Timeouts Thread Timeouts
✤ Useful in unblocking threads 

on socket reads.
✤ Business level SLA.
✤ Unblock the calling thread.
Case for timeouts?
Read Timeouts Thread Timeouts
✤ Useful in unblocking threads 

on socket reads.
✤ Business level SLA.
✤ Unblock the calling thread.
X X
As there are no blocking calls.X
Case for timeouts?
Read Timeouts Thread Timeouts
✤ Useful in unblocking threads 

on socket reads.
✤ Business level SLA.
✤ Unblock the calling thread.
Business level SLA
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Business level SLA
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Rating service C* store
C* store
Business level SLA
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Rating service C* store
C* store
Business level SLA
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Rating service C* store
C* store
Thread timeouts are pretty invasive at every level
Business level SLA
Edge Service
Video Metadata Service
Disclaimer: This is an example and not an exact representation of the processing
Rating service C* store
C* store
Thread timeouts are pretty invasive at every level
Do we need them at every step?
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
Business timeouts are !
for !
a client request.
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
X
Disclaimer: This is an example and not an exact representation of the processing
Edge Service
Video Metadata Service
Rating service C* store
C* store
/movie?id=123
X
X
X
X
X
Disclaimer: This is an example and not an exact representation of the processing
Tuning parameters?
X
X
X
X
Less tuning
Edge Service
Video Metadata Service
Rating service C* store
C* store
Disclaimer: This is an example and not an exact representation of the processing
Request Leases
Cancellations
Observable<Movie>
Edge Service
Video Metadata Service
Rating service C* store
C* store
Disclaimer: This is an example and not an exact representation of the processing
Request Leases
Cancellations
Observable<Movie>
!
public Movie getMovie(String movieId) {!
Metadata metadata = getMovieMetadata(movieId);!
Bookmark bookmark = getBookmark(movieId, userId);!
Rating rating = getRatings(movieId);!
return new Movie(metadata, bookmark, rating);!
}!
public Observable<Movie> getMovie(String movieId) {!
return Observable.zip(getMovieMetadata(movieId),!
getBookmark(movieId, userId),!
getRatings(movieId),!
(meta,bmark,rating)->new
Movie(meta,bmark,rating));!
}!
Resources
Asynchronous Function composition :
I/O :
Network Protocol :
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxNetty
http://reactivesocket.io/
Nitesh Kant, Engineer, Netflix Edge Gateway @NiteshKant
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/netflix-
asynchronous-apps

Mais conteúdo relacionado

Destaque

praktikum_solidarnost_Ivaylo Radev
praktikum_solidarnost_Ivaylo Radevpraktikum_solidarnost_Ivaylo Radev
praktikum_solidarnost_Ivaylo RadevIvaylo Radev
 
Art nouveau &amp; de st ijl
Art nouveau &amp; de st ijlArt nouveau &amp; de st ijl
Art nouveau &amp; de st ijlPawan Singh
 
Does Current Advertising Cause Future Sales?
Does Current Advertising Cause Future Sales?Does Current Advertising Cause Future Sales?
Does Current Advertising Cause Future Sales?Trieu Nguyen
 
Fast Data processing with RFX
Fast Data processing with RFXFast Data processing with RFX
Fast Data processing with RFXTrieu Nguyen
 
Slide 2 collecting, storing and analyzing big data
Slide 2 collecting, storing and analyzing big dataSlide 2 collecting, storing and analyzing big data
Slide 2 collecting, storing and analyzing big dataTrieu Nguyen
 
Application-oriented ping-pong benchmarking: how to assess the real communica...
Application-oriented ping-pong benchmarking: how to assess the real communica...Application-oriented ping-pong benchmarking: how to assess the real communica...
Application-oriented ping-pong benchmarking: how to assess the real communica...Trieu Nguyen
 
Findability Day 2016 - Augmented intelligence
Findability Day 2016 - Augmented intelligenceFindability Day 2016 - Augmented intelligence
Findability Day 2016 - Augmented intelligenceFindwise
 
Reactive Data System in Practice
Reactive Data System in PracticeReactive Data System in Practice
Reactive Data System in PracticeTrieu Nguyen
 
A Day in the Life of a Hadoop Administrator
A Day in the Life of a Hadoop AdministratorA Day in the Life of a Hadoop Administrator
A Day in the Life of a Hadoop AdministratorEdureka!
 
Where is my next jobs in the age of Big Data and Automation
Where is my next jobs in the age of Big Data and AutomationWhere is my next jobs in the age of Big Data and Automation
Where is my next jobs in the age of Big Data and AutomationTrieu Nguyen
 
Introduction and overview ArangoDB query language AQL
Introduction and overview ArangoDB query language AQLIntroduction and overview ArangoDB query language AQL
Introduction and overview ArangoDB query language AQLArangoDB Database
 
Hbase, Cách thức lưu trữ và tìm kiếm
Hbase, Cách thức lưu trữ và tìm kiếmHbase, Cách thức lưu trữ và tìm kiếm
Hbase, Cách thức lưu trữ và tìm kiếmTuan Bach Van
 
2016 Data Science Salary Survey
2016 Data Science Salary Survey2016 Data Science Salary Survey
2016 Data Science Salary SurveyTrieu Nguyen
 
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...Caserta
 
Slide 3 Fast Data processing with kafka, rfx and redis
Slide 3 Fast Data processing with kafka, rfx and redisSlide 3 Fast Data processing with kafka, rfx and redis
Slide 3 Fast Data processing with kafka, rfx and redisTrieu Nguyen
 
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in Production
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in ProductionUpgrade Without the Headache: Best Practices for Upgrading Hadoop in Production
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in ProductionCloudera, Inc.
 
Luan van hadoop-final
Luan van hadoop-finalLuan van hadoop-final
Luan van hadoop-finalnobjta2015
 
Unlocking Business Value Using Data
Unlocking Business Value Using DataUnlocking Business Value Using Data
Unlocking Business Value Using DataSplunk
 
Experience economy
Experience economyExperience economy
Experience economyTrieu Nguyen
 

Destaque (20)

praktikum_solidarnost_Ivaylo Radev
praktikum_solidarnost_Ivaylo Radevpraktikum_solidarnost_Ivaylo Radev
praktikum_solidarnost_Ivaylo Radev
 
Art nouveau &amp; de st ijl
Art nouveau &amp; de st ijlArt nouveau &amp; de st ijl
Art nouveau &amp; de st ijl
 
Does Current Advertising Cause Future Sales?
Does Current Advertising Cause Future Sales?Does Current Advertising Cause Future Sales?
Does Current Advertising Cause Future Sales?
 
Microservices
Microservices Microservices
Microservices
 
Fast Data processing with RFX
Fast Data processing with RFXFast Data processing with RFX
Fast Data processing with RFX
 
Slide 2 collecting, storing and analyzing big data
Slide 2 collecting, storing and analyzing big dataSlide 2 collecting, storing and analyzing big data
Slide 2 collecting, storing and analyzing big data
 
Application-oriented ping-pong benchmarking: how to assess the real communica...
Application-oriented ping-pong benchmarking: how to assess the real communica...Application-oriented ping-pong benchmarking: how to assess the real communica...
Application-oriented ping-pong benchmarking: how to assess the real communica...
 
Findability Day 2016 - Augmented intelligence
Findability Day 2016 - Augmented intelligenceFindability Day 2016 - Augmented intelligence
Findability Day 2016 - Augmented intelligence
 
Reactive Data System in Practice
Reactive Data System in PracticeReactive Data System in Practice
Reactive Data System in Practice
 
A Day in the Life of a Hadoop Administrator
A Day in the Life of a Hadoop AdministratorA Day in the Life of a Hadoop Administrator
A Day in the Life of a Hadoop Administrator
 
Where is my next jobs in the age of Big Data and Automation
Where is my next jobs in the age of Big Data and AutomationWhere is my next jobs in the age of Big Data and Automation
Where is my next jobs in the age of Big Data and Automation
 
Introduction and overview ArangoDB query language AQL
Introduction and overview ArangoDB query language AQLIntroduction and overview ArangoDB query language AQL
Introduction and overview ArangoDB query language AQL
 
Hbase, Cách thức lưu trữ và tìm kiếm
Hbase, Cách thức lưu trữ và tìm kiếmHbase, Cách thức lưu trữ và tìm kiếm
Hbase, Cách thức lưu trữ và tìm kiếm
 
2016 Data Science Salary Survey
2016 Data Science Salary Survey2016 Data Science Salary Survey
2016 Data Science Salary Survey
 
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...
Big Data Warehousing Meetup: Real-time Trade Data Monitoring with Storm & Cas...
 
Slide 3 Fast Data processing with kafka, rfx and redis
Slide 3 Fast Data processing with kafka, rfx and redisSlide 3 Fast Data processing with kafka, rfx and redis
Slide 3 Fast Data processing with kafka, rfx and redis
 
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in Production
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in ProductionUpgrade Without the Headache: Best Practices for Upgrading Hadoop in Production
Upgrade Without the Headache: Best Practices for Upgrading Hadoop in Production
 
Luan van hadoop-final
Luan van hadoop-finalLuan van hadoop-final
Luan van hadoop-final
 
Unlocking Business Value Using Data
Unlocking Business Value Using DataUnlocking Business Value Using Data
Unlocking Business Value Using Data
 
Experience economy
Experience economyExperience economy
Experience economy
 

Semelhante a Crossroads of Asynchrony and Graceful Degradation

Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .NetRichard Banks
 
Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2abramsm
 
Refacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresRefacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresDoron Rosenstock
 
Stress Test as a Culture
Stress Test as a CultureStress Test as a Culture
Stress Test as a CultureJoão Moura
 
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)Netflix: From Zero to Production-Ready in Minutes (QCon 2017)
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)Tim Bozarth
 
Video Conferencing, The Enterprise and You
Video Conferencing, The Enterprise and YouVideo Conferencing, The Enterprise and You
Video Conferencing, The Enterprise and YouVideoguy
 
Production debugging web applications
Production debugging web applicationsProduction debugging web applications
Production debugging web applicationsIdo Flatow
 
From Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auFrom Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auevanbottcher
 
Microservices, Microfrontends and Feature Teams
Microservices, Microfrontends and Feature TeamsMicroservices, Microfrontends and Feature Teams
Microservices, Microfrontends and Feature TeamsGiulio Roggero
 
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017Introducing Zeebe.io at Camunda Meetup Vienna 10/2017
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017Daniel Meyer
 
Goto meetup Stockholm - Let your microservices flow
Goto meetup Stockholm - Let your microservices flowGoto meetup Stockholm - Let your microservices flow
Goto meetup Stockholm - Let your microservices flowBernd Ruecker
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
Replay Solutions CFD
Replay Solutions CFDReplay Solutions CFD
Replay Solutions CFDkilroy440
 
The Road To Event-Driven Architecture
The Road To Event-Driven ArchitectureThe Road To Event-Driven Architecture
The Road To Event-Driven ArchitectureSheenBrisals
 
the grinder testing certification
the grinder testing certificationthe grinder testing certification
the grinder testing certificationVskills
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 uploadDebnath Sinha
 
Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018Steven Smith
 

Semelhante a Crossroads of Asynchrony and Graceful Degradation (20)

Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 
Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2
 
Refacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresRefacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStores
 
Stress Test as a Culture
Stress Test as a CultureStress Test as a Culture
Stress Test as a Culture
 
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)Netflix: From Zero to Production-Ready in Minutes (QCon 2017)
Netflix: From Zero to Production-Ready in Minutes (QCon 2017)
 
Video Conferencing, The Enterprise and You
Video Conferencing, The Enterprise and YouVideo Conferencing, The Enterprise and You
Video Conferencing, The Enterprise and You
 
Production debugging web applications
Production debugging web applicationsProduction debugging web applications
Production debugging web applications
 
Tec314
Tec314Tec314
Tec314
 
Designing virtual infrastructure
Designing virtual infrastructureDesigning virtual infrastructure
Designing virtual infrastructure
 
From Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.auFrom Monoliths to Microservices at Realestate.com.au
From Monoliths to Microservices at Realestate.com.au
 
Microservices, Microfrontends and Feature Teams
Microservices, Microfrontends and Feature TeamsMicroservices, Microfrontends and Feature Teams
Microservices, Microfrontends and Feature Teams
 
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017Introducing Zeebe.io at Camunda Meetup Vienna 10/2017
Introducing Zeebe.io at Camunda Meetup Vienna 10/2017
 
SOA patterns
SOA patterns SOA patterns
SOA patterns
 
Goto meetup Stockholm - Let your microservices flow
Goto meetup Stockholm - Let your microservices flowGoto meetup Stockholm - Let your microservices flow
Goto meetup Stockholm - Let your microservices flow
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Replay Solutions CFD
Replay Solutions CFDReplay Solutions CFD
Replay Solutions CFD
 
The Road To Event-Driven Architecture
The Road To Event-Driven ArchitectureThe Road To Event-Driven Architecture
The Road To Event-Driven Architecture
 
the grinder testing certification
the grinder testing certificationthe grinder testing certification
the grinder testing certification
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 upload
 
Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018
 

Mais de C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

Mais de C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Último

Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 

Último (20)

Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 

Crossroads of Asynchrony and Graceful Degradation

  • 1. Crossroads of asynchrony and graceful degradation Nitesh Kant,! Software Engineer, ! Netflix Edge Engineering.! ! @NiteshKant
  • 2. InfoQ.com: News & Community Site • 750,000 unique visitors/month • Published in 4 languages (English, Chinese, Japanese and Brazilian Portuguese) • Post content from our QCon conferences • News 15-20 / week • Articles 3-4 / week • Presentations (videos) 12-15 / week • Interviews 2-3 / week • Books 1 / month Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations /netflix-asynchronous-apps
  • 3. Purpose of QCon - to empower software development by facilitating the spread of knowledge and innovation Strategy - practitioner-driven conference designed for YOU: influencers of change and innovation in your teams - speakers and topics driving the evolution and innovation - connecting and catalyzing the influencers and innovators Highlights - attended by more than 12,000 delegates since 2007 - held in 9 cities worldwide Presented at QCon San Francisco www.qconsf.com
  • 4.
  • 5.
  • 6.
  • 7. Nitesh Kant Who Am I? ❖ Engineer, Edge Engineering, Netflix.! ❖ Core contributor, RxNetty*! ❖ Contributor, Zuul** * https://github.com/ReactiveX/RxNetty ** https://github.com/Netflix/zuul @NiteshKant
  • 8.
  • 10. A simple example. Showing a movie on Netflix.
  • 14. ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }! Disclaimer: This is an example and not an exact representation of the processing
  • 15. Synchronicity ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }! Disclaimer: This is an example and not an exact representation of the processing
  • 16. The bigger picture Price of being synchronous? ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }! Disclaimer: This is an example and not an exact representation of the processing
  • 17. In a microservices world Edge Service Ratings ServiceVideo Metadata Service Bookmarks Service Disclaimer: This is an example and not an exact representation of the processing
  • 18. In a microservices world Edge Service Server threadpool Thread Thread Thread Thread Thread getMovieMetadata(movieId) Disclaimer: This is an example and not an exact representation of the processing
  • 19. In a microservices world Edge Service Server threadpool Thread Thread Thread Thread Thread getMovieMetadata(movieId) getBookmark(movieId, userId) Disclaimer: This is an example and not an exact representation of the processing
  • 20. In a microservices world Edge Service Server threadpool Thread Thread Thread Thread Thread getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) Disclaimer: This is an example and not an exact representation of the processing
  • 21. Busy thread time = Sum of the time taken to make all 3 service calls
  • 22. How do systems fail? 1. Latency Latency is your worst enemy in a synchronous world.
  • 23. Edge Service Server threadpool Thread Thread Thread Thread Thread getRatings(movieId) Disclaimer: This is an example and not an exact representation of the processing
  • 24. Disclaimer: This is an example and not an exact representation of the processing Ratings Service Edge Service Server threadpool Thread Thread Thread Thread Thread getRatings(movieId)
  • 25. Disclaimer: This is an example and not an exact representation of the processing Edge Service getRatings(movieId) Server threadpool Thread Thread Thread Thread Thread
  • 26. Edge Service Disclaimer: This is an example and not an exact representation of the processing getRatings(movieId) Server threadpool Thread Thread Thread Thread Thread
  • 27. Edge Service Server threadpool Thread Thread Thread Thread Thread Disclaimer: This is an example and not an exact representation of the processing Client Threadpool Thread Thread Thread Thread Thread getRatings(movieId)
  • 28. Edge Service Server threadpool Thread Thread Thread Thread Thread Disclaimer: This is an example and not an exact representation of the processing Client Threadpool Thread Thread Thread Thread Thread getRatings(movieId)
  • 29. Edge Service Server threadpool Thread Thread Thread Thread Thread Disclaimer: This is an example and not an exact representation of the processing Client Threadpool Thread Thread Thread Thread Thread getRatings(movieId)
  • 30. Managing client thread pools Disclaimer: This is an example and not an exact representation of the processing Client Threadpool Thread Thread Thread Thread Thread
  • 35. Clients have become our babies
  • 36. Clients have become our babies Edge Service Server threadpool Thread Thread Thread Thread Thread getMovieMetadata(movieId) Disclaimer: This is an example and not an exact representation of the processing Client Threadpool Thread Thread Thread Thread Thread Client Threadpool Thread Thread Thread Thread Thread Client Threadpool Thread Thread Thread Thread Thread getBookmark(movieId, userId) getRatings(movieId)
  • 37. Clients have become our babies
  • 39. Have we exchanged a bigger problem with a smaller one?
  • 40. How do systems fail? 2. Overload Abusive clients, recovery spikes, special events ….
  • 41. We did a load test… https://github.com/Netflix-Skunkworks/ WSPerfLab Hello Netflix!
  • 42. Detailed analysis available online: https://github.com/Netflix-Skunkworks/WSPerfLab/blob/master/test-results/RxNetty_vs_Tomcat_April2015.pdf
  • 43.
  • 44. ! Graceful This isn’t graceful degradation!
  • 45. This happens at high CPU usage.
  • 46. This happens at high CPU usage. So, don’t let the system reach that limit…
  • 47. This happens at high CPU usage. So, don’t let the system reach that limit… a.k.a Throttling.
  • 48. Fairness? One abusive request type can penalize other request paths.
  • 49. How do systems fail? 3. Thundering herds The failure after recovery….
  • 50. Retries Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing
  • 51. Retries Edge Service Disclaimer: This is an example and not an exact representation of the processing Video Metadata Service Cluster
  • 52. Retries Edge Service Disclaimer: This is an example and not an exact representation of the processing Video Metadata Service Cluster
  • 53. Retries Edge Service Disclaimer: This is an example and not an exact representation of the processing Video Metadata Service Cluster
  • 54. Retries are useful in steady state…. …but…
  • 55. Retries Edge Service Disclaimer: This is an example and not an exact representation of the processing Video Metadata Service Cluster
  • 56.
  • 57. Our systems are missing empathy.
  • 58. Because they lack knowledge about the peers.
  • 59. Knowledge comes from various signals..
  • 60. Ability to adapt to those signals is important.
  • 61. This can not adapt… ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }! Disclaimer: This is an example and not an exact representation of the processing
  • 62. Asynchrony It is the key to success.
  • 63. What should be async?
  • 64. What should be async? Edge Service Video Metadata Service
  • 65. What should be async? Edge Service Video Metadata Service getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) Application logic
  • 66. What should be async? Edge Service Video Metadata Service getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) I/O I/O I/O Application logic I/O
  • 67. What should be async? Edge Service Video Metadata Service getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) I/O I/O I/O Application logic I/O Network protocol
  • 68. Key aspects of being async.
  • 69. Key aspects of being async. 1. Lifecycle control
  • 71. Key aspects of being async. 2. Flow control
  • 73. Key aspects of being async. 3. Function composition
  • 74. Function composition ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }!
  • 75. Function composition Composing the processing ! of a method into a single control point. public Observable<Movie> getMovie(String movieId) {! return Observable.zip(getMovieMetadata(movieId),! getBookmark(movieId, userId),! getRatings(movieId),! (meta,bmark,rating)->new Movie(meta,bmark,rating));! }!
  • 76. Composing the processing ! of a method into a single control point. Flow & Lifecycle Control with
  • 77. What should be async? Edge Service Video Metadata Service getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) I/O I/O I/O Application logic I/O Network protocol
  • 78. I/O Edge Service Server threadpool Thread Thread Thread Thread Thread Client Threadpool Thread Thread Thread Thread Thread getRatings(movieId)
  • 79. I/O Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection Eventloops = f (Number of cores)
  • 80. I/O Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection Connections multiplexed ! on a ! single eventloop.
  • 81. I/O Disclaimer: This is an example and not an exact representation of the processing Edge Service Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection
  • 82. I/O Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Clients share the eventloops! with! the server.
  • 83. I/O Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection All clients share ! the! same eventloop
  • 84. Composing the processing ! of a service into a single control point. Flow & Lifecycle Control with
  • 85. What should be async? Edge Service Video Metadata Service getMovieMetadata(movieId) getBookmark(movieId, userId) getRatings(movieId) I/O I/O I/O Application logic I/O Network protocol
  • 89. HTTP/1.1 GET /movie?id=3 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=1 HTTP/1.1
  • 90. HTTP/1.1 GET /movie?id=3 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=1 HTTP/1.1 HTTP/1.1 200 OK! ID: 1! …
  • 91. HTTP/1.1 GET /movie?id=3 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=1 HTTP/1.1 HTTP/1.1 200 OK! ID: 1! … HTTP/1.1 200 OK! ID: 2! …
  • 92. HTTP/1.1 GET /movie?id=3 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=1 HTTP/1.1 HTTP/1.1 200 OK! ID: 1! … HTTP/1.1 200 OK! ID: 2! … HTTP/1.1 200 OK! ID: 3! …
  • 93. HTTP/1.1 GET /movie?id=3 GET /movie?id=2 GET /movie?id=1 HTTP/1.1 200 ID: 1! … HTTP/1.1 200 ID: 2! … HTTP/1.1 200 ID: 3! … Head Of Line Blocking => Synchronous
  • 95. Network Protocol We need a multiplexed bi-directional protocol
  • 96. Multiplexed GET /movie?id=1 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=3 HTTP/1.1
  • 97. Bi-directional GET /movie?id=1 HTTP/1.1 GET /movie?id=2 HTTP/1.1 GET /movie?id=3 HTTP/1.1 CANCEL
  • 98. Composing the processing ! of the entire application into a single control point. Flow & Lifecycle Control with
  • 99. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 Disclaimer: This is an example and not an exact representation of the processing
  • 100. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 Disclaimer: This is an example and not an exact representation of the processing Observable<Movie>
  • 101. Observable<Movie> Composing the processing ! of the entire application into a single control point.
  • 103. Latency Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection
  • 104. Latency Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Impact is localized to the connection.
  • 105. Latency Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Impact is localized to the connection. An outstanding request has little cost.
  • 106. An outstanding request has little cost. GET /movie?id=1 HTTP/1.1 HTTP/1.1 200 OK! … } Any stored state between! request - response! is costly.
  • 107. Outstanding requests have low cost so Latency is a lesser evil in asynchronous systems.
  • 108. Overload & Thundering Herds Edge Service Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Disclaimer: This is an example and not an exact representation of the processing Reduce work done ! when overloaded
  • 109. Overload & Thundering Herds Edge Service Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Disclaimer: This is an example and not an exact representation of the processing Reduce work done ! when overloaded Stop accepting! new requests.
  • 110. Stop accepting new requests Non-blocking I/O gives better control
  • 111. Stop accepting new requests But … we are still “throttling”
  • 112. Stop accepting new requests Are we being empathetic?
  • 115. Request-leasing Peer 1Peer 2 “Lease” 5 requests for 1 minute. Network connection
  • 116. Request-leasing Peer 1Peer 2 “Lease” 5 requests for 1 minute. GET /movie?id=1 HTTP/1.1 GET /movie?id=2 HTTP/1.1 Network connection
  • 117. Server Client 1 Client 2 Client 8
  • 118. ServerCapacity: 100 RPM Client 1 Client 2 Client 8 “Lease” 10 requests for 1 minute.
  • 119. ServerCapacity: 100 RPM Client 1 Client 2 Client 8 “Lease” 10 requests for 1 minute. “Lease” 10 requests for 1 minute. “Lease” 10 requests for 1 minute.
  • 120. ServerCapacity: 100 RPM Client 1 Client 2 Client 8 “Lease” 10 requests for 1 minute. “Lease” 10 requests for 1 minute. “Lease” 10 requests for 1 minute. Reserve Capacity: ! 20 RPM
  • 121. Time bound lease. “Lease” 10 requests for 1 minute.
  • 122. Time bound lease. No extra work for cancelling leases. “Lease” 10 requests for 1 minute.
  • 123. Time bound lease. No extra work for cancelling leases. Receiver controls the flow of requests “Lease” 10 requests for 1 minute.
  • 124. When things go south
  • 125. ServerCapacity: 20 RPM Client 1 Client 2 Client 8 “Lease” 5 requests for 1 minute. “Lease” 2 requests for 1 minute. X No more “Lease”
  • 126. ServerCapacity: 20 RPM Client 1 Client 2 Client 8 “Lease” 5 requests for 1 minute. “Lease” 2 requests for 1 minute. X No more “Lease” Prioritization
  • 128. Threadpools? Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection I/O! is! non-blocking.
  • 129. Threadpools? Edge Service Disclaimer: This is an example and not an exact representation of the processing Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection Application code ! is! non-blocking.
  • 130. Threadpools? Disclaimer: This is an example and not an exact representation of the processing Edge Service Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection No blocking/Waiting => Only CPU work
  • 131. Threadpools? Disclaimer: This is an example and not an exact representation of the processing Edge Service Eventloop (Inbound) Connection Connection Connection Connection Connection getMovieMetadata(movieId) Eventloop (Outbound) Connection Connection Connection Connection Connection No blocking/Waiting => Only CPU work So, Eventloops = # of cores
  • 137. Case for timeouts? Read Timeouts Thread Timeouts ✤ Useful in unblocking threads 
 on socket reads. ✤ Business level SLA. ✤ Unblock the calling thread.
  • 138. Case for timeouts? Read Timeouts Thread Timeouts ✤ Useful in unblocking threads 
 on socket reads. ✤ Business level SLA. ✤ Unblock the calling thread. X X As there are no blocking calls.X
  • 139. Case for timeouts? Read Timeouts Thread Timeouts ✤ Useful in unblocking threads 
 on socket reads. ✤ Business level SLA. ✤ Unblock the calling thread.
  • 140. Business level SLA Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing
  • 141. Business level SLA Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing Rating service C* store C* store
  • 142. Business level SLA Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing Rating service C* store C* store
  • 143. Business level SLA Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing Rating service C* store C* store Thread timeouts are pretty invasive at every level
  • 144. Business level SLA Edge Service Video Metadata Service Disclaimer: This is an example and not an exact representation of the processing Rating service C* store C* store Thread timeouts are pretty invasive at every level Do we need them at every step?
  • 145. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 Disclaimer: This is an example and not an exact representation of the processing
  • 146. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 Business timeouts are ! for ! a client request. Disclaimer: This is an example and not an exact representation of the processing
  • 147. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 Disclaimer: This is an example and not an exact representation of the processing
  • 148. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 X Disclaimer: This is an example and not an exact representation of the processing
  • 149. Edge Service Video Metadata Service Rating service C* store C* store /movie?id=123 X X X X X Disclaimer: This is an example and not an exact representation of the processing
  • 152.
  • 153. Edge Service Video Metadata Service Rating service C* store C* store Disclaimer: This is an example and not an exact representation of the processing Request Leases Cancellations Observable<Movie>
  • 154. Edge Service Video Metadata Service Rating service C* store C* store Disclaimer: This is an example and not an exact representation of the processing Request Leases Cancellations Observable<Movie>
  • 155.
  • 156. ! public Movie getMovie(String movieId) {! Metadata metadata = getMovieMetadata(movieId);! Bookmark bookmark = getBookmark(movieId, userId);! Rating rating = getRatings(movieId);! return new Movie(metadata, bookmark, rating);! }! public Observable<Movie> getMovie(String movieId) {! return Observable.zip(getMovieMetadata(movieId),! getBookmark(movieId, userId),! getRatings(movieId),! (meta,bmark,rating)->new Movie(meta,bmark,rating));! }!
  • 157. Resources Asynchronous Function composition : I/O : Network Protocol : https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxNetty http://reactivesocket.io/
  • 158. Nitesh Kant, Engineer, Netflix Edge Gateway @NiteshKant
  • 159. Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations/netflix- asynchronous-apps