Search code examples
akkaprotocolscompatibilityakka-remote-actor

How binary compatible is distributed akka


While akka has documentation regarding binary compatibility for drop in jar replacement, I can't find anything regarding protocol binary compatibility.

At the basic level, the actor API is a mailbox of messages. Therefore as long as the messages stay binary compatible there's every possible that messages can be sent to other systems running different (jar-incompatible) versions of akka.

So given:

  • 2 applications with a fixed message set
  • No Typed actors (only using actor ! message and actor ? message)
  • "Application 1" using akka 2.3.9

What's the earliest version of akka "Application 2" could use?

Other items I'd like confirmed:

  • Akka clustering protocol is irrelevant here - each application can have their own cluster and communicate between the clusters using TCP remoting
  • Scala binary compatibility is irrellevant as well - the systems are communicating via a TCP protocol with a pre-compiled set of messages (quite possibly specified in Java for assurance/paranoia)

As a start, the 2.0 series has the same remoting configuration, but is there any reason that 1.3 couldn't be made to work?


Solution

  • Up to this point we have not put measures in place that would ensure protocol compatibility between Akka versions—this also means minor version updates. We have not, however, introduced gratuitous changes and on the Akka protocol level with pure Remoting chances should be good that it works across versions since 2.2.0. Before that there were changes to the remoting protocol handshake that will likely break compatibility, and Akka 1.x was a completely different matter entirely.

    We know that this answer is not satisfying and we will work on this by fully specifying the remote protocol and implementing cross-version tests, but we have not yet had the resources to tackle this large task.