SlideShare a Scribd company logo
Ivan Turčinović
ivan.turcinovic@inovatrend.com
Reactive I/0
2
 Toolset for building concurrent
fault-tolerant
scalable
applications
 Core part of Typesafe Platfom
3
Actors
4
Akka I/O
 Akka I/O package follows same principles
 message passing
 reactive
 actor based API
 with immutable data representation
 Built with collaboration with spray.io team
 toolkit for building REST/HTTP-based integration layers
 TCP and UDP implementations available
5
Akka I/O Architecture
6
Basic entities
 ByteString
 actors communicate with immutable objects only
 ByteString - immutable container for bytes
 Rope-like data structure
 TCP messages
 TCP.connect/TCP.connected/TCP.register
 TCP.bind/TCP.bound
 TCP.commandFailed/TCP.connectionClosed/TCP.close
 TCP write - write, writeFile, compoundWrite
 UDP messages
 Unconnected UDP
 Connected UDP
7
TCP Client – creating connection
1.
2.
3.
4.
5.
8
TCP Client – send/receive messages, closing connection
1.
2.
3.
4.
9
TCP Server – accepting connections
1.
2.
3.
4.
10
TCP Server – send/receive messages
1.
2.
3.
11
TCP - Throttling Reads and Writes
 Data congestion needs to be handled at the user level, for both writes
and reads.
 Throttling writes
 ACK-based
 NACK-based
 NACK-based with write suspending
Throttling reads
 Push-reading
 Pull-reading
12
Lessons learned
 Message sending/receiving is NOT one-by-one
 onReceive ByteString can have more then one message sent
 Application is responsible for encoding/decoding messages
 Client – one connection actor per client is more than enough
 Server – each connection has one dedicated actor for receiving/sending
messages
 Gives really nice control of clients on server side
 Authentication, blocking, stats per connection easy to implement
 Broadcasting message from server to client done really easy
 Send message to all ServerActor children
13
Lessons learned cont’d
 DON’T rely only on TCP. ConnectionClosed messages for
„disconnects”
 It works OK in „lab” conditions
 Problems occur in low qualilty network connections + VPN !!
 Solution:
 Rely on own heartbeat protocol
 Simple PingPongMessage
 Sent frequently – in our case each 5 sec. Gives very little or no
overhead
 App keeps track of heartbeat messages
 no response message within specified time – something is
wrong with connection – kill it!
14
Akka – Spring integration
 Not so much related to akka I/O 
 https://github.com/typesafehub/activator-akka-java-spring
 SpringExtension - Akka Extension to provide access to Spring managed
Actor Beans
15
Thank You!

More Related Content

What's hot (20)

PDF
Networking in Java with NIO and Netty
Constantine Slisenka
 
PDF
Building great mobile apps: Somethings you might want to know
shwetank
 
PDF
Netty - a pragmatic introduction
Raphael Stary
 
PDF
Latency tracing in distributed Java applications
Constantine Slisenka
 
PDF
Janus RTP forwarders @ FOSDEM 2020
Lorenzo Miniero
 
PPTX
Webrtc plugins for Desktop Browsers
Alexandre Gouaillard
 
PPTX
Implementation Lessons using WebRTC in Asterisk
Moises Silva
 
PDF
Python for IoT, A return of experience
Alexandre Abadie
 
PPTX
Practical webRTC - from API to Solution - webRTC Summit 2014 @ NYC
Alexandre Gouaillard
 
PDF
Profiling distributed Java applications
Constantine Slisenka
 
PDF
Netty Cookbook - Chapter 2
Trieu Nguyen
 
PDF
WebRTC - On Standards, Identity and Telco Strategy
Jose de Castro
 
PDF
WebRTC + Socket.io: building a skype-like video chat with native javascript
Michele Di Salvatore
 
PDF
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Shing Wai Chan
 
PPTX
Node js meetup
Ansuman Roy
 
PDF
WebRTC: A front-end perspective
shwetank
 
PPTX
WebRTC
Vijay Dhama
 
PPTX
How's relevant JMeter to me - DevConf (Letterkenny)
Giulio Vian
 
PPTX
Nodejs
Vinod Kumar Marupu
 
Networking in Java with NIO and Netty
Constantine Slisenka
 
Building great mobile apps: Somethings you might want to know
shwetank
 
Netty - a pragmatic introduction
Raphael Stary
 
Latency tracing in distributed Java applications
Constantine Slisenka
 
Janus RTP forwarders @ FOSDEM 2020
Lorenzo Miniero
 
Webrtc plugins for Desktop Browsers
Alexandre Gouaillard
 
Implementation Lessons using WebRTC in Asterisk
Moises Silva
 
Python for IoT, A return of experience
Alexandre Abadie
 
Practical webRTC - from API to Solution - webRTC Summit 2014 @ NYC
Alexandre Gouaillard
 
Profiling distributed Java applications
Constantine Slisenka
 
Netty Cookbook - Chapter 2
Trieu Nguyen
 
WebRTC - On Standards, Identity and Telco Strategy
Jose de Castro
 
WebRTC + Socket.io: building a skype-like video chat with native javascript
Michele Di Salvatore
 
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Shing Wai Chan
 
Node js meetup
Ansuman Roy
 
WebRTC: A front-end perspective
shwetank
 
WebRTC
Vijay Dhama
 
How's relevant JMeter to me - DevConf (Letterkenny)
Giulio Vian
 

Viewers also liked (20)

PDF
JavaCro'15 - GWT integration with Vaadin - Peter Lehto
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Java parallelization - Zlatko Sirotić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Is history teaching us that Agile is dead - Roko Roić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Microservice architecture - Nenad Pečanac
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Java application crashed, now what - Matija Tomašković
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - How to start agile transition - Ivan Krnić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Slick database library - Ivan Senji
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - GWT integration with Vaadin - Peter Lehto
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Java parallelization - Zlatko Sirotić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Is history teaching us that Agile is dead - Roko Roić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Java application crashed, now what - Matija Tomašković
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - How to start agile transition - Ivan Krnić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Slick database library - Ivan Senji
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Ad

Similar to JavaCro'15 - Reactive I/O - Ivan Turčinović (20)

PPTX
Akka-demy (a.k.a. How to build stateful distributed systems) I/II
Peter Csala
 
PDF
Actor-based concurrency in a modern Java Enterprise
Alexander Lukyanchikov
 
PDF
Microservices in Scala: Play Framework
Łukasz Sowa
 
PPTX
Real world Scala hAkking NLJUG JFall 2011
Raymond Roestenburg
 
PPTX
Reactive Streams - László van den Hoek
RubiX BV
 
PDF
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Konrad Malawski
 
PPTX
Scala + Akka + ning/async-http-client - Vancouver Scala meetup February 2015
Yanik Berube
 
PDF
K is the_new_j
Gonzalo Ortiz Jaureguizar
 
PDF
MINA2 (Apache Netty)
ducquoc_vn
 
PDF
Functional Programming and Composing Actors
legendofklang
 
PDF
Akka in Action 1st Edition Raymond Roestenburg download pdf
himlalnunys
 
PDF
Building Stateful Microservices With Akka
Yaroslav Tkachenko
 
PDF
Akka in Production - ScalaDays 2015
Evan Chan
 
PDF
[PDF Download] Akka in Action 1st Edition Raymond Roestenburg fulll chapter
labliinagai
 
ODP
Reactive programming with scala and akka
Knoldus Inc.
 
PDF
Recipes to develop a reactive and cloud-ready application using Scala and Akka
Codemotion
 
PPTX
Introduction to Akka - Atlanta Java Users Group
Roy Russo
 
PPTX
Scale up your thinking
Yardena Meymann
 
PDF
Online game server on Akka.NET (NDC2016)
Esun Kim
 
PDF
Building Reactive Applications with Akka & Java 8 - Bonèr
Codemotion
 
Akka-demy (a.k.a. How to build stateful distributed systems) I/II
Peter Csala
 
Actor-based concurrency in a modern Java Enterprise
Alexander Lukyanchikov
 
Microservices in Scala: Play Framework
Łukasz Sowa
 
Real world Scala hAkking NLJUG JFall 2011
Raymond Roestenburg
 
Reactive Streams - László van den Hoek
RubiX BV
 
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Konrad Malawski
 
Scala + Akka + ning/async-http-client - Vancouver Scala meetup February 2015
Yanik Berube
 
MINA2 (Apache Netty)
ducquoc_vn
 
Functional Programming and Composing Actors
legendofklang
 
Akka in Action 1st Edition Raymond Roestenburg download pdf
himlalnunys
 
Building Stateful Microservices With Akka
Yaroslav Tkachenko
 
Akka in Production - ScalaDays 2015
Evan Chan
 
[PDF Download] Akka in Action 1st Edition Raymond Roestenburg fulll chapter
labliinagai
 
Reactive programming with scala and akka
Knoldus Inc.
 
Recipes to develop a reactive and cloud-ready application using Scala and Akka
Codemotion
 
Introduction to Akka - Atlanta Java Users Group
Roy Russo
 
Scale up your thinking
Yardena Meymann
 
Online game server on Akka.NET (NDC2016)
Esun Kim
 
Building Reactive Applications with Akka & Java 8 - Bonèr
Codemotion
 
Ad

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

PDF
Java cro'21 the best tools for java developers in 2021 - hujak
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - When remote work really works - the secrets behind successful ...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - How can you improve the quality of your application - Ioannis ...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Java cro'21 the best tools for java developers in 2021 - hujak
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - When remote work really works - the secrets behind successful ...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 

Recently uploaded (20)

PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
PDF
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
July Patch Tuesday
Ivanti
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
July Patch Tuesday
Ivanti
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 

JavaCro'15 - Reactive I/O - Ivan Turčinović

  • 2. 2  Toolset for building concurrent fault-tolerant scalable applications  Core part of Typesafe Platfom
  • 4. 4 Akka I/O  Akka I/O package follows same principles  message passing  reactive  actor based API  with immutable data representation  Built with collaboration with spray.io team  toolkit for building REST/HTTP-based integration layers  TCP and UDP implementations available
  • 6. 6 Basic entities  ByteString  actors communicate with immutable objects only  ByteString - immutable container for bytes  Rope-like data structure  TCP messages  TCP.connect/TCP.connected/TCP.register  TCP.bind/TCP.bound  TCP.commandFailed/TCP.connectionClosed/TCP.close  TCP write - write, writeFile, compoundWrite  UDP messages  Unconnected UDP  Connected UDP
  • 7. 7 TCP Client – creating connection 1. 2. 3. 4. 5.
  • 8. 8 TCP Client – send/receive messages, closing connection 1. 2. 3. 4.
  • 9. 9 TCP Server – accepting connections 1. 2. 3. 4.
  • 10. 10 TCP Server – send/receive messages 1. 2. 3.
  • 11. 11 TCP - Throttling Reads and Writes  Data congestion needs to be handled at the user level, for both writes and reads.  Throttling writes  ACK-based  NACK-based  NACK-based with write suspending Throttling reads  Push-reading  Pull-reading
  • 12. 12 Lessons learned  Message sending/receiving is NOT one-by-one  onReceive ByteString can have more then one message sent  Application is responsible for encoding/decoding messages  Client – one connection actor per client is more than enough  Server – each connection has one dedicated actor for receiving/sending messages  Gives really nice control of clients on server side  Authentication, blocking, stats per connection easy to implement  Broadcasting message from server to client done really easy  Send message to all ServerActor children
  • 13. 13 Lessons learned cont’d  DON’T rely only on TCP. ConnectionClosed messages for „disconnects”  It works OK in „lab” conditions  Problems occur in low qualilty network connections + VPN !!  Solution:  Rely on own heartbeat protocol  Simple PingPongMessage  Sent frequently – in our case each 5 sec. Gives very little or no overhead  App keeps track of heartbeat messages  no response message within specified time – something is wrong with connection – kill it!
  • 14. 14 Akka – Spring integration  Not so much related to akka I/O   https://github.com/typesafehub/activator-akka-java-spring  SpringExtension - Akka Extension to provide access to Spring managed Actor Beans