SlideShare a Scribd company logo
1 of 89
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/
pinterest-resilient-systems
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
Highly Resilient Systems at Pinterest
Yongsheng Wu

Engineering Manager of Storage & Caching, Pinterest

Email: yongsheng@pinterest.com

Pinterest: www.pinterest.com/yswu

Nov 17, 2015
Our mission is to help people
discover and do what they love
50+ billion Pins
categorized by 100+ million Pinners into
> 1 billion Boards
10s of 1,000s of
Instances on AWS
~100 Services
Some Systems
Handles ~1M QPS
Failures Happen All the
Time
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Client Retries
Clients
foo
1
bar
1
bar
2
bar
3
bar 1, 2, 3
Client Retries
Clients
foo
1
bar
1
bar
2
bar
3
bar 1, 2, 3
Client Retries
Clients
foo
1
bar
1
bar
2
bar
3
bar 1, 2, 3
Client Retries
Clients
foo
1
bar
1
bar
2
bar
3
bar 1, 2, 3
bar
4
?
Reactive Manifesto
Zookeeper
• Highly reliable distributed coordination
• Hierarchical namespace: ZNode
• Persistent Node
• Ephemeral Node
• Sequence Node
• Watch
• Node Children Changed
• Node Created
• Node Data Changed
• Node Deleted
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1
Capacity Addition
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1
Capacity Addition
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1, bar2
Capacity Addition
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1, bar 2
Capacity Reduction
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 1, bar 2
Capacity Reduction
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 1
Capacity Reduction
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1, bar 2
Zookeeper Failure
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1, bar 2
Observers
/discovery
bar
prod
bar 1
bar 2
Zookeeper with Observers
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2
bar 1, bar 2
Observers
/discovery
bar
prod
bar 1
bar 2
Zookeeper with Observers Failure
Avoid Complete reliance on any
single system, even if it is a highly
reliable distributed system
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2 bar 1, bar 2
Observers
/discovery
bar
prod
bar 1
bar 2
ZUM bar
bar 1, bar 2
Zookeeper with Observers Protected by Local Persistent ServerSet
Dynamic Service Discovery
bar
1
Zookeeper
/discovery
bar
prod
bar 1
foo
foo apps
bar
2
bar 2 bar 1, bar 2
Observers
/discovery
bar
prod
bar 1
bar 2
ZUM bar
bar 1, bar 2
Zookeeper with Observers Protected by Local Persistent ServerSet
Challenges
• Rapid planned capacity reduction
• Gradual loss of instances
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Typical Service Setup
Config
ServerClient
Cache
DB
Realtime Configuration
• Decider
• Experiment
• Rate limiting
• Failover
• … …
Realtime Configuration
Zookeeper
/config
decider
setting_1: 53
foo
foo apps
{“setting_1”: 53,
… …. }
setting_2: 0
setting_3: 100
setting_4: 78
… …
Config
Admin
Console
Zookeeper Powered Realtime Configuration Management
Realtime Configuration
foo
foo apps
v0: {“setting_1”: 53,
… …. }
Observers
decider
v0: {“setting_1”: 53,
… …. }
Zookeeper
/config
decider: v0
AWS S3
Config
Admin
Console
/config
decider: v0
ZUM
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v0: {“setting_1”: 53,
… …. }
Observers
ZUM decider
v0: {“setting_1”: 53,
… …. }
Zookeeper
/config
decider: v0
AWS S3
Config
Admin
Console
/config
decider: v0
v1: {“setting_1”: 54,
… …. }
v1
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v0: {“setting_1”: 53,
… …. }
Observers
ZUM decider
v0: {“setting_1”: 53,
… …. }
Zookeeper
/config
decider: v1
AWS S3
Config
Admin
Console
/config
decider: v0
v1: {“setting_1”: 54,
… …. }
v1
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v0: {“setting_1”: 53,
… …. }
Observers
decider
v0: {“setting_1”: 53,
… …. }
Zookeeper
/config
decider: v1
AWS S3
Config
Admin
Console
/config
decider: v1
v1: {“setting_1”: 54,
… …. }
v1
ZUM
v1: {“setting_1”: 54,
… …. }
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v1: {“setting_1”: 54,
… …. }
Observers
decider
v0: {“setting_1”: 53,
… …. }
Zookeeper
/config
decider: v1
AWS S3
Config
Admin
Console
/config
decider: v1
v1: {“setting_1”: 54,
… …. }
v1
ZUM
v1: {“setting_1”: 54,
… …. }
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v1: {“setting_1”: 54,
… …. }
Observers
decider
v1: {“setting_1”: 54,
… …. }
Zookeeper
/config
decider: v1
AWS S3
Config
Admin
Console
/config
decider: v1
v1: {“setting_1”: 54,
… …. }
v1
ZUM
v1: {“setting_1”: 54,
… …. }
Zookeeper, Observers, S3 Based Realtime Configuration Management
Realtime Configuration
foo
foo apps
v1: {“setting_1”: 54,
… …. }
Observers
decider
v1: {“setting_1”: 54,
… …. }
Zookeeper
/config
decider: v1
AWS S3
Config
Admin
Console
/config
decider: v1
ZUM
Zookeeper, Observers, S3 Based Realtime Configuration Management
Challenges
• Staggered rollout
• Configuration of huge size
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Typical Service Setup
Config
ServerClient
Cache
DB
Caching
bar
cache
1
bar
cache
m
proc1
… …
prock
consistent hash
ring
Foo 1
… …
Caching
bar
cache
1
bar
cache
m
proc1
… …
prock
Foo 2
… …
proc1
… … prock
Foo 1
… …
proc1
… …
prock
Foo n
Too many
connections!
Twemproxy
bar
cache
1
bar
cache
m
… …
proc1
… …
prock
Foo 1
… …
proc1
… …
prock
Foo 2
proc1
… …
prock
Foo n
NutcrackerNutcracker Nutcracker
Cache Inconsistency
Nutcracker
… …foo: 1
bar cache 1 bar cache 2 bar cache n
set foo 2
foo: 2
Cache Inconsistency
Nutcracker
… …foo: 1
bar cache 1 bar cache 2 bar cache n
foo: 2
McRouter
… …
cache 1 cache 2 cache n
McRouter
McRouter
… …
cache 1 cache 2 cache n
McRouter
No ring reshuffle
McRouter
Pros
• No inconsistency caused by node joining/leaving the pool
• No cascading failures in case of excessive load caused by hot keys
Cons
• Cache misses
Replicated Pools - Reads
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Poolgetfoo
Replicated Pools - Reads
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Poolgetfoo
Replicated Pools - Invalidation
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Pooldeletefoo
Replicated Pools - Invalidation
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Pooldeletefoo
Log
Replicated Pools - Invalidation
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Pooldeletefoo
Log
Replicated Pools - Invalidation
McRouter
cache
1
cache
2
cache
n…
cache
1’
cache
2’
cache
n’…
ac Pool de Pooldeletefoo
LogSinger
kafka
tailer
PinLater
Challenges
• Build the feedback loop from persistent layer to
caching layer
• Move to multiple geographic regions
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Typical Service Setup
Config
ServerClient
Cache
DB
Sharding
Shard Id Type Local Id
64 bits
Clients
DataServices
1
… …
Master
1
Slave
1 … …
Master
m
Slave
m
Clients
Clients
DataServices
2
DataServices
n
Read from Slave
Clients
DataServices
1
… …
Master
1
Slave
1 … …
Master
m
Slave
m
Clients
Clients
Read from Slave
DataServices
2
DataServices
n
Read from slave after
master failing health
check over a certain
period of time.
Master
1
Slave
1 … …
Master
m
Slave
m
Failover
DataServices Proc
ZUM ShardConfig
ShardConfig
Changes
Realtime Configuration Management Powered Failover
Other Persistence Stores
UMetaStore
• Key value store based on HBase
Zen
• Graph store: nodes and edges
• Flexible schema
• Custom index
• Both HBase and MySQL
Future
• Rocksdb
Challenges
• Automated failover with MySQL replica set
• HBase 1.x Upgrade
• Move to multiple geographic regions
Replication and failover are the
key ingredients for building highly
resilient storage and caching
systems
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Async Processing
Use Cases
• Acknowledge success with non-time-sensitive actions taken at
later time
• Schedule and execute large number of jobs
Benefits
• Faster response time
• More resilient to dependent system failures
Pyres Limitations
• No mechanism for success acknowledgement
• No visibility into status of individual job types
• No support for scheduled job execution at a
specific time in the future
• Rate limiting and retries are hard to manage
• Redis as only supported storage backend
PinLater
Asynchronous Processing System
Clients
Pinlater
Servers
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pools
Master Slave
Clients
Clients
Pinlater
Servers
PinLater
Servers
Storage Backend
Enqueue
Dequeue/ACK
PinLater Job State Transition
Pending Running
Succeeded
Failed
Done
Failed (no more retries)
Dequeued
Failed (retries left)/Claim Timeout
PinLater Job Requirements
Idempotency
Commutativity
PinLater Dashboard
Clients
PinLater
Server
1
PinLater
Server
2
PinLater
Server
n
… …
Master
1
Slave
1
… …
Master
m
Slave
m
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
1
… …
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
k
Clients
Clients
Enqueue
PinLater
Asynchronous Processing System
Clients
PinLater
Server
1
PinLater
Server
2
PinLater
Server
n
… …
Master
1
Slave
1
… …
Master
m
Slave
m
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
1
… …
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
k
Clients
Clients
Enqueue
PinLater
Asynchronous Processing System
Clients
PinLater
Server
1
PinLater
Server
2
PinLater
Server
n
… …
Master
1
Slave
1
… …
Master
m
Slave
m
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
1
… …
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
k
Clients
Clients
Enqueue
PinLater
Asynchronous Processing System
Clients
PinLater
Server
1
PinLater
Server
2
PinLater
Server
n
… …
Master
1
Slave
1
… …
Master
m
Slave
m
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
1
… …
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
k
Clients
Clients
Enqueue
PinLater
Asynchronous Processing System
Clients
PinLater
Server
1
PinLater
Server
2
PinLater
Server
n
… …
Master
1
Slave
1
… …
Master
m
Slave
m
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
1
… …
Infra
Worker
Pool
Infra
Worker
Pool
Worker
Pool
k
Clients
Clients
Enqueue
PinLater
Asynchronous Processing System
Challenges
• Multi-tenancy with fair failure isolation
• Fault-tolerant async job enqueuer
Use async processing as much as
possible to deliver faster
response time and make request
handling more robust
Dynamic Service Discovery
Realtime Configuration
Caching
Persistent Storage
Async Processing
Learnings
• Avoid Complete reliance on any single system, even
if it is a highly reliable distributed system
• Replication and failover are the key ingredients for
building highly resilient storage and caching
systems
• Use async processing as much as possible to
deliver faster response time and make request
handling more robust
Failure Testing
• Be explicit with scope
• Failure Modes
• Sandbox testing
• Manual testing
• Automated simulation
• Testing on production
• AWS is doing it for us all the time
• Simian Army
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/pinterest-
resilient-systems

More Related Content

Similar to Building Highly-resilient Systems at Pinterest

Rendering Large Models in the Browser in Real-Time
Rendering Large Models in the Browser in Real-TimeRendering Large Models in the Browser in Real-Time
Rendering Large Models in the Browser in Real-TimeC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUANatan Silnitsky
 
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...LogeekNightUkraine
 
SFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a ProSFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a ProChester Chen
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry confluent
 
Turning OpenStack Swift into a VM storage platform
Turning OpenStack Swift into a VM storage platformTurning OpenStack Swift into a VM storage platform
Turning OpenStack Swift into a VM storage platformwim_provoost
 
10 Lessons Learned from using Kafka with 1000 microservices - java global summit
10 Lessons Learned from using Kafka with 1000 microservices - java global summit10 Lessons Learned from using Kafka with 1000 microservices - java global summit
10 Lessons Learned from using Kafka with 1000 microservices - java global summitNatan Silnitsky
 
Patterns of Streaming Applications
Patterns of Streaming ApplicationsPatterns of Streaming Applications
Patterns of Streaming ApplicationsC4Media
 
Superb Supervision of Short-lived Servers with Sensu
Superb Supervision of Short-lived Servers with SensuSuperb Supervision of Short-lived Servers with Sensu
Superb Supervision of Short-lived Servers with SensuPaul O'Connor
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarTimothy Spann
 
Greyhound - Powerful Functional Kafka Library - Devtalks reimagined
Greyhound - Powerful Functional Kafka Library - Devtalks reimaginedGreyhound - Powerful Functional Kafka Library - Devtalks reimagined
Greyhound - Powerful Functional Kafka Library - Devtalks reimaginedNatan Silnitsky
 
Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Agile India
 
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...HostedbyConfluent
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Springone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and ReactorSpringone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and ReactorStéphane Maldini
 
Icinga @ OSMC 2014
Icinga @ OSMC 2014Icinga @ OSMC 2014
Icinga @ OSMC 2014Icinga
 
OSMC 2014: Current state of Icinga | Icinga Team
OSMC 2014: Current state of Icinga | Icinga TeamOSMC 2014: Current state of Icinga | Icinga Team
OSMC 2014: Current state of Icinga | Icinga TeamNETWAYS
 
Reactive Thinking in Java with RxJava2
Reactive Thinking in Java with RxJava2Reactive Thinking in Java with RxJava2
Reactive Thinking in Java with RxJava2Yakov Fain
 

Similar to Building Highly-resilient Systems at Pinterest (20)

Rendering Large Models in the Browser in Real-Time
Rendering Large Models in the Browser in Real-TimeRendering Large Models in the Browser in Real-Time
Rendering Large Models in the Browser in Real-Time
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA
10 Lessons Learned from using Kafka in 1000 microservices - ScalaUA
 
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...
Gasimov Orkhan "Service Discovery and Coordination by Netflix Eureka and Spri...
 
SFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a ProSFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a Pro
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
 
Turning OpenStack Swift into a VM storage platform
Turning OpenStack Swift into a VM storage platformTurning OpenStack Swift into a VM storage platform
Turning OpenStack Swift into a VM storage platform
 
10 Lessons Learned from using Kafka with 1000 microservices - java global summit
10 Lessons Learned from using Kafka with 1000 microservices - java global summit10 Lessons Learned from using Kafka with 1000 microservices - java global summit
10 Lessons Learned from using Kafka with 1000 microservices - java global summit
 
Subversion howto
Subversion howtoSubversion howto
Subversion howto
 
Patterns of Streaming Applications
Patterns of Streaming ApplicationsPatterns of Streaming Applications
Patterns of Streaming Applications
 
Superb Supervision of Short-lived Servers with Sensu
Superb Supervision of Short-lived Servers with SensuSuperb Supervision of Short-lived Servers with Sensu
Superb Supervision of Short-lived Servers with Sensu
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache Pulsar
 
Greyhound - Powerful Functional Kafka Library - Devtalks reimagined
Greyhound - Powerful Functional Kafka Library - Devtalks reimaginedGreyhound - Powerful Functional Kafka Library - Devtalks reimagined
Greyhound - Powerful Functional Kafka Library - Devtalks reimagined
 
Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019Reactive Systems by Dave Farley at #AgileIndia2019
Reactive Systems by Dave Farley at #AgileIndia2019
 
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...
Look how easy it is to go from events to blazing-fast analytics! | Neha Pawar...
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Springone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and ReactorSpringone2gx 2014 Reactive Streams and Reactor
Springone2gx 2014 Reactive Streams and Reactor
 
Icinga @ OSMC 2014
Icinga @ OSMC 2014Icinga @ OSMC 2014
Icinga @ OSMC 2014
 
OSMC 2014: Current state of Icinga | Icinga Team
OSMC 2014: Current state of Icinga | Icinga TeamOSMC 2014: Current state of Icinga | Icinga Team
OSMC 2014: Current state of Icinga | Icinga Team
 
Reactive Thinking in Java with RxJava2
Reactive Thinking in Java with RxJava2Reactive Thinking in Java with RxJava2
Reactive Thinking in Java with RxJava2
 

More from 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
 
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
 
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
 
Navigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery TeamsNavigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery TeamsC4Media
 
High Performance Cooperative Distributed Systems in Adtech
High Performance Cooperative Distributed Systems in AdtechHigh Performance Cooperative Distributed Systems in Adtech
High Performance Cooperative Distributed Systems in AdtechC4Media
 

More from 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
 
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
 
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
 
Navigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery TeamsNavigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery Teams
 
High Performance Cooperative Distributed Systems in Adtech
High Performance Cooperative Distributed Systems in AdtechHigh Performance Cooperative Distributed Systems in Adtech
High Performance Cooperative Distributed Systems in Adtech
 

Recently uploaded

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

Building Highly-resilient Systems at Pinterest