SlideShare a Scribd company logo
1 of 28
Download to read offline
Aleksey Izmailov
Jan 2019
§ Reactive Programming is a distinct subset of Reactive Systems at the
implementation level.
§ Reactive Programming offers productivity for Developers—through
performance and resource efficiency—at the component level for internal
logic and dataflow management.
§ Reactive Systems offers productivity for Architects and DevOps—through
resilience and elasticity—at the system level, for building “Cloud Native” or
other large-scale distributed systems.
https://www.reactivemanifesto.org
Reactive
Systems
are …
Responsive
Responsive:
The system responds in a timely manner if at
all possible. Responsiveness is the cornerstone
of usability and utility, but more than that,
responsiveness means that problems may be
detected quickly and dealt with effectively.
Responsive systems focus on providing rapid
and consistent response times, establishing
reliable upper bounds so they deliver a
consistent quality of service. This consistent
behaviour in turn simplifies error handling,
builds end user confidence, and encourages
further interaction.
Reactive
Systems
are: …
Resilient
Resilient:
The system stays responsive in the face
of failure. This applies not only to highly-
available, mission-critical systems — any
system that is not resilient will be
unresponsive after a failure. Resilience is
achieved by replication,
containment, isolation and delegation. Failures
are contained within each component, isolating
components from each other and thereby
ensuring that parts of the system can fail and
recover without compromising the system as a
whole. Recovery of each component is
delegated to another (external) component and
high-availability is ensured by replication
where necessary. The client of a component is
not burdened with handling its failures.
Reactive
Systems
are …
Elastic
Elastic:
The system stays responsive under varying
workload. Reactive Systems can react to
changes in the input rate by increasing or
decreasing the resources allocated to service
these inputs. This implies designs that have no
contention points or central bottlenecks,
resulting in the ability to shard or replicate
components and distribute inputs among
them. Reactive Systems support predictive, as
well as Reactive, scaling algorithms by
providing relevant live performance measures.
They achieve elasticity in a cost-effective way
on commodity hardware and software
platforms.
Reactive
Systems
are …
Message
Driven
Message Driven:
Reactive Systems rely on asynchronous message-
passing to establish a boundary between
components that ensures loose coupling,
isolation and location transparency. This
boundary also provides the means to
delegate failures as messages. Employing explicit
message-passing enables load management,
elasticity, and flow control by shaping and
monitoring the message queues in the system
and applying back-pressure when necessary.
Location transparent messaging as a means of
communication makes it possible for the
management of failure to work with the same
constructs and semantics across a cluster or
within a single host. Non-
blocking communication allows recipients to only
consume resources while active, leading to less
system overhead.
Idea?! It is time to apply these design principles
consciously from the start instead of
rediscovering them each time.
Asynchrony, in computer programming, refers to the occurrence of events
independent of the main program flow and ways to deal with such events.
These may be "outside" events such as the arrival of signals, or actions
instigated by a program that take place concurrently with program execution,
without the program blocking to wait for results.
import requests
r = requests.get('https://api.github.com’)
f = open(“workfile”,”r”)
predict(
x,
batch_size=None,
verbose=0,
steps=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
def create_connection(db_file):
try:
conn = sqlite3.connect(db_file)
return conn
except Error as e:
print(e)
return None
def select_all_tasks(conn):
cur = conn.cursor()
cur.execute("SELECT * FROM tasks")
rows = cur.fetchall()
for row in rows:
print(row)
The Application Program Interface (API) for Reactive Programming libraries are
generally either:
§ Callback-based—where anonymous, side-effecting callbacks are attached to
event sources, and are being invoked when events pass through the dataflow
chain.
§ Declarative—through functional composition, usually using well established
combinators like map, filter, fold etc.
§ Futures/Promises—containers of a single value, many-read/single-write
semantics where asynchronous transformations of the value can be added
even if it is not yet available.
§ Streams—as in Reactive Streams: unbounded flows of data processing,
enabling asynchronous, non-blocking, back-pressured transformation
pipelines between a multitude of sources and destinations.
§ Dataflow Variables—single assignment variables (memory-cells) which can
depend on input, procedures and other cells, so that changes are
automatically updated. A practical example is spreadsheets—where the
change of the value in a cell ripples through all dependent functions,
producing new values “downstream.”
Messages have a clear, single, destination;
while Events are facts for others to observe.
Event-driven system focuses on addressable event sources while a message-
driven system concentrates on addressable recipients.
In a Reactive System, especially one which uses Reactive Programming, both
events and messages will be present—as one is a great tool for
communication (messages), and another is a great way of representing
facts (events).
The foundation for a Reactive System is Message-Passing, which creates a
temporal boundary between components which allows them to be decoupled
in:
§ time—this allows for concurrency
§ space—which allows for distribution and mobility.
This decoupling is a requirement for full isolation between components, and
forms the basis for both Resilience and Elasticity.
Reactive Programming is a great technique for managing internal logic and
dataflow transformation, locally within the components, as a way of optimizing
code clarity, performance and resource efficiency.
Reactive Systems, being a set of architectural principles, puts the emphasis on
distributed communication and gives us tools to tackle resilience and elasticity
in distributed systems.
§ Reactive Programming is used within a single Microservice to implement the
service-internal logic and dataflow management.
§ Reactive Systems design is used in between the Microservices, allowing the
creation of systems of Microservices that play by the rules of distributed
systems—Responsiveness through Resilience and Elasticity made possible by
being Message-Driven.
§ Reactive Programming versus Reactive Systems. Landing on a set of simple
Reactive design principles in a sea of constant confusion and overloaded
expectations By Jonas Bonér and Viktor Klang, Lightbend Inc. – Most of the
text and pictures are copied from this resource.
§ Concurrency: The Good, The Bad and The Ugly. By Viktor Klang and Roland
Kuhn (https://www.youtube.com/watch?v=OJfS7K-Vkgk).
§ Wikipedia.
§ Scala and Akka documentation.
§ Some images are taken from public Internet.

More Related Content

What's hot

What's hot (20)

Reactive programming
Reactive programmingReactive programming
Reactive programming
 
Declarative Concurrency with Reactive Programming
Declarative Concurrency with Reactive ProgrammingDeclarative Concurrency with Reactive Programming
Declarative Concurrency with Reactive Programming
 
Reactive programming - Observable
Reactive programming - ObservableReactive programming - Observable
Reactive programming - Observable
 
Reactive java - Reactive Programming + RxJava
Reactive java - Reactive Programming + RxJavaReactive java - Reactive Programming + RxJava
Reactive java - Reactive Programming + RxJava
 
Reactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project ReactorReactive Programming In Java Using: Project Reactor
Reactive Programming In Java Using: Project Reactor
 
Project Reactor By Example
Project Reactor By ExampleProject Reactor By Example
Project Reactor By Example
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive Programming
 
Developer Week - Reacting to an event-driven world
Developer Week - Reacting to an event-driven worldDeveloper Week - Reacting to an event-driven world
Developer Week - Reacting to an event-driven world
 
Software architectural patterns - A Quick Understanding Guide
Software architectural patterns - A Quick Understanding GuideSoftware architectural patterns - A Quick Understanding Guide
Software architectural patterns - A Quick Understanding Guide
 
Actor model in F# and Akka.NET
Actor model in F# and Akka.NETActor model in F# and Akka.NET
Actor model in F# and Akka.NET
 
Real-Time Design Patterns
Real-Time Design PatternsReal-Time Design Patterns
Real-Time Design Patterns
 
Grinding the java monolith
Grinding the java monolithGrinding the java monolith
Grinding the java monolith
 
Uber: Kafka Consumer Proxy
Uber: Kafka Consumer ProxyUber: Kafka Consumer Proxy
Uber: Kafka Consumer Proxy
 
Give your microservices a bus ride with MassTransit
Give your microservices a bus ride with MassTransitGive your microservices a bus ride with MassTransit
Give your microservices a bus ride with MassTransit
 
stigbot_beta
stigbot_betastigbot_beta
stigbot_beta
 
Quick Tour On Zeppelin
Quick Tour On ZeppelinQuick Tour On Zeppelin
Quick Tour On Zeppelin
 
Introduction to Akka Streams
Introduction to Akka StreamsIntroduction to Akka Streams
Introduction to Akka Streams
 
... No it's Apache Kafka!
... No it's Apache Kafka!... No it's Apache Kafka!
... No it's Apache Kafka!
 
Uncoupling
UncouplingUncoupling
Uncoupling
 
Srivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to SuccessSrivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to Success
 

Similar to Reactive: Programming -> Systems -> Architecture

Distributed Computing Report
Distributed Computing ReportDistributed Computing Report
Distributed Computing Report
IIT Kharagpur
 
Reactive Stream Processing for Data-centric Publish/Subscribe
Reactive Stream Processing for Data-centric Publish/SubscribeReactive Stream Processing for Data-centric Publish/Subscribe
Reactive Stream Processing for Data-centric Publish/Subscribe
Sumant Tambe
 
The Concept of Load Balancing Server in Secured and Intelligent Network
The Concept of Load Balancing Server in Secured and Intelligent NetworkThe Concept of Load Balancing Server in Secured and Intelligent Network
The Concept of Load Balancing Server in Secured and Intelligent Network
IJAEMSJORNAL
 

Similar to Reactive: Programming -> Systems -> Architecture (20)

Orleans: Cloud Computing for Everyone - SOCC 2011
Orleans: Cloud Computing for Everyone - SOCC 2011Orleans: Cloud Computing for Everyone - SOCC 2011
Orleans: Cloud Computing for Everyone - SOCC 2011
 
Designing distributed systems
Designing distributed systemsDesigning distributed systems
Designing distributed systems
 
Distributed Computing Report
Distributed Computing ReportDistributed Computing Report
Distributed Computing Report
 
Next generation of frontend architectures
Next generation of frontend architecturesNext generation of frontend architectures
Next generation of frontend architectures
 
Distributed Software Engineering with Client-Server Computing
Distributed Software Engineering with Client-Server ComputingDistributed Software Engineering with Client-Server Computing
Distributed Software Engineering with Client-Server Computing
 
Software Engineering 101
Software Engineering 101Software Engineering 101
Software Engineering 101
 
Building a High-Performance Reactive Microservices Architecture
Building a High-Performance Reactive Microservices ArchitectureBuilding a High-Performance Reactive Microservices Architecture
Building a High-Performance Reactive Microservices Architecture
 
Cs556 section2
Cs556 section2Cs556 section2
Cs556 section2
 
Reactive applications
Reactive applicationsReactive applications
Reactive applications
 
Reactive Stream Processing for Data-centric Publish/Subscribe
Reactive Stream Processing for Data-centric Publish/SubscribeReactive Stream Processing for Data-centric Publish/Subscribe
Reactive Stream Processing for Data-centric Publish/Subscribe
 
Virtualization in Distributed System: A Brief Overview
Virtualization in Distributed System: A Brief OverviewVirtualization in Distributed System: A Brief Overview
Virtualization in Distributed System: A Brief Overview
 
Middleware Technologies
Middleware Technologies Middleware Technologies
Middleware Technologies
 
Event Driven Software Architecture Pattern
Event Driven Software Architecture PatternEvent Driven Software Architecture Pattern
Event Driven Software Architecture Pattern
 
Reactive Architecture
Reactive ArchitectureReactive Architecture
Reactive Architecture
 
Middle ware Technologies
Middle ware TechnologiesMiddle ware Technologies
Middle ware Technologies
 
System Structure for Dependable Software Systems
System Structure for Dependable Software SystemsSystem Structure for Dependable Software Systems
System Structure for Dependable Software Systems
 
Distributed information sys
Distributed information sysDistributed information sys
Distributed information sys
 
The Concept of Load Balancing Server in Secured and Intelligent Network
The Concept of Load Balancing Server in Secured and Intelligent NetworkThe Concept of Load Balancing Server in Secured and Intelligent Network
The Concept of Load Balancing Server in Secured and Intelligent Network
 
Top 5 Software Architecture Pattern Event Driven SOA Microservice Serverless ...
Top 5 Software Architecture Pattern Event Driven SOA Microservice Serverless ...Top 5 Software Architecture Pattern Event Driven SOA Microservice Serverless ...
Top 5 Software Architecture Pattern Event Driven SOA Microservice Serverless ...
 
Cluster computing
Cluster computingCluster computing
Cluster computing
 

Recently uploaded

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 

Reactive: Programming -> Systems -> Architecture

  • 2. § Reactive Programming is a distinct subset of Reactive Systems at the implementation level. § Reactive Programming offers productivity for Developers—through performance and resource efficiency—at the component level for internal logic and dataflow management. § Reactive Systems offers productivity for Architects and DevOps—through resilience and elasticity—at the system level, for building “Cloud Native” or other large-scale distributed systems.
  • 4. Reactive Systems are … Responsive Responsive: The system responds in a timely manner if at all possible. Responsiveness is the cornerstone of usability and utility, but more than that, responsiveness means that problems may be detected quickly and dealt with effectively. Responsive systems focus on providing rapid and consistent response times, establishing reliable upper bounds so they deliver a consistent quality of service. This consistent behaviour in turn simplifies error handling, builds end user confidence, and encourages further interaction.
  • 5. Reactive Systems are: … Resilient Resilient: The system stays responsive in the face of failure. This applies not only to highly- available, mission-critical systems — any system that is not resilient will be unresponsive after a failure. Resilience is achieved by replication, containment, isolation and delegation. Failures are contained within each component, isolating components from each other and thereby ensuring that parts of the system can fail and recover without compromising the system as a whole. Recovery of each component is delegated to another (external) component and high-availability is ensured by replication where necessary. The client of a component is not burdened with handling its failures.
  • 6. Reactive Systems are … Elastic Elastic: The system stays responsive under varying workload. Reactive Systems can react to changes in the input rate by increasing or decreasing the resources allocated to service these inputs. This implies designs that have no contention points or central bottlenecks, resulting in the ability to shard or replicate components and distribute inputs among them. Reactive Systems support predictive, as well as Reactive, scaling algorithms by providing relevant live performance measures. They achieve elasticity in a cost-effective way on commodity hardware and software platforms.
  • 7. Reactive Systems are … Message Driven Message Driven: Reactive Systems rely on asynchronous message- passing to establish a boundary between components that ensures loose coupling, isolation and location transparency. This boundary also provides the means to delegate failures as messages. Employing explicit message-passing enables load management, elasticity, and flow control by shaping and monitoring the message queues in the system and applying back-pressure when necessary. Location transparent messaging as a means of communication makes it possible for the management of failure to work with the same constructs and semantics across a cluster or within a single host. Non- blocking communication allows recipients to only consume resources while active, leading to less system overhead.
  • 8. Idea?! It is time to apply these design principles consciously from the start instead of rediscovering them each time.
  • 9. Asynchrony, in computer programming, refers to the occurrence of events independent of the main program flow and ways to deal with such events. These may be "outside" events such as the arrival of signals, or actions instigated by a program that take place concurrently with program execution, without the program blocking to wait for results.
  • 10.
  • 11. import requests r = requests.get('https://api.github.com’) f = open(“workfile”,”r”) predict( x, batch_size=None, verbose=0, steps=None, max_queue_size=10, workers=1, use_multiprocessing=False ) def create_connection(db_file): try: conn = sqlite3.connect(db_file) return conn except Error as e: print(e) return None def select_all_tasks(conn): cur = conn.cursor() cur.execute("SELECT * FROM tasks") rows = cur.fetchall() for row in rows: print(row)
  • 12. The Application Program Interface (API) for Reactive Programming libraries are generally either: § Callback-based—where anonymous, side-effecting callbacks are attached to event sources, and are being invoked when events pass through the dataflow chain. § Declarative—through functional composition, usually using well established combinators like map, filter, fold etc.
  • 13. § Futures/Promises—containers of a single value, many-read/single-write semantics where asynchronous transformations of the value can be added even if it is not yet available. § Streams—as in Reactive Streams: unbounded flows of data processing, enabling asynchronous, non-blocking, back-pressured transformation pipelines between a multitude of sources and destinations. § Dataflow Variables—single assignment variables (memory-cells) which can depend on input, procedures and other cells, so that changes are automatically updated. A practical example is spreadsheets—where the change of the value in a cell ripples through all dependent functions, producing new values “downstream.”
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23. Messages have a clear, single, destination; while Events are facts for others to observe. Event-driven system focuses on addressable event sources while a message- driven system concentrates on addressable recipients. In a Reactive System, especially one which uses Reactive Programming, both events and messages will be present—as one is a great tool for communication (messages), and another is a great way of representing facts (events).
  • 24. The foundation for a Reactive System is Message-Passing, which creates a temporal boundary between components which allows them to be decoupled in: § time—this allows for concurrency § space—which allows for distribution and mobility. This decoupling is a requirement for full isolation between components, and forms the basis for both Resilience and Elasticity.
  • 25. Reactive Programming is a great technique for managing internal logic and dataflow transformation, locally within the components, as a way of optimizing code clarity, performance and resource efficiency. Reactive Systems, being a set of architectural principles, puts the emphasis on distributed communication and gives us tools to tackle resilience and elasticity in distributed systems.
  • 26. § Reactive Programming is used within a single Microservice to implement the service-internal logic and dataflow management. § Reactive Systems design is used in between the Microservices, allowing the creation of systems of Microservices that play by the rules of distributed systems—Responsiveness through Resilience and Elasticity made possible by being Message-Driven.
  • 27.
  • 28. § Reactive Programming versus Reactive Systems. Landing on a set of simple Reactive design principles in a sea of constant confusion and overloaded expectations By Jonas Bonér and Viktor Klang, Lightbend Inc. – Most of the text and pictures are copied from this resource. § Concurrency: The Good, The Bad and The Ugly. By Viktor Klang and Roland Kuhn (https://www.youtube.com/watch?v=OJfS7K-Vkgk). § Wikipedia. § Scala and Akka documentation. § Some images are taken from public Internet.