Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alternative transports for Akka.Remote #1017

Closed
rogeralsing opened this issue May 30, 2015 · 18 comments
Closed

Alternative transports for Akka.Remote #1017

rogeralsing opened this issue May 30, 2015 · 18 comments

Comments

@rogeralsing
Copy link
Contributor

I would love to see some alternative transport layers for Akka.Remote.
Lately there have been a lot of questions regarding different network aspects, security, throughput etc.
And I do think it would be beneficial the more integrations we have.

For example,

  • X-Sockets.NET
  • Libuv (NodeJS socket layer)

Libuv is known for its high performance, it would be very interesting to see how that would work with our stack even if the lib itself is native.

X-Sockets.NET is pure .NET but comes with a lot of options and integrations.

Even if such effort turns out to not be used by anyone, it still shows the community what can be done with Akka.NET, and there are always some users that have firm opinions on what to use.

The more options the better imo, just to grow the ecosystem around us.

(And I dont mean that the core team should bother with this, but it could be a nice exercise for the community)

@kekekeks
Copy link
Contributor

Not sure if it should be alternative transports rather than network layers. At least in case of libuv we should keep the wire protocol intact.

@rogeralsing
Copy link
Contributor Author

Its the transports that are pluggable.

 ### Transports and adapters

    # List of the transport drivers that will be loaded by the remoting.
    # A list of fully qualified config paths must be provided where
    # the given configuration path contains a transport-class key
    # pointing to an implementation class of the Transport interface.
    # If multiple transports are provided, the address of the first
    # one will be used as a default address.
    enabled-transports = ["akka.remote.helios.tcp"]

I see no real reason why you would go Libuv node talking to a Helios node. you could just use the same transport on both sides as any transport specific features would be useless in that case.

@beatsm
Copy link

beatsm commented May 30, 2015

This may be a good as part of an alternative

http://mechanical-sympathy.blogspot.co.uk/2014/05/simple-binary-encoding.html?m=1#comment-form

Regards


From: Roger Johanssonmailto:[email protected]
Sent: ‎30/‎05/‎2015 15:02
To: akkadotnet/akka.netmailto:[email protected]
Subject: Re: [akka.net] Alternative transports for Akka.Remote (#1017)

Its the transports that are pluggable.

 ### Transports and adapters

    # List of the transport drivers that will be loaded by the remoting.
    # A list of fully qualified config paths must be provided where
    # the given configuration path contains a transport-class key
    # pointing to an implementation class of the Transport interface.
    # If multiple transports are provided, the address of the first
    # one will be used as a default address.
    enabled-transports = ["akka.remote.helios.tcp"]

I see no real reason why you would go Libuv node talking to a Helios node. you could just use the same transport on both sides as any transport specific features would be useless in that case.


Reply to this email directly or view it on GitHub:
#1017 (comment)

@Aaronontheweb
Copy link
Member

Edit: actually, X-Sockets would be a good idea

I'd like to see something way out there

  • Google Quic protocol
  • RGP / reliable multicast protocols
  • Shared / named pipes (not sure if this is possible since it doesn't use the IP protocol)

@kekekeks
Copy link
Contributor

I see no real reason why you would go Libuv node talking to a Helios node.

Helios for node running on Windows, libuv for node running on *nix.

@rogeralsing
Copy link
Contributor Author

@kekekeks that's more like a special version of helios, it could still make sense to have different transports if the backing implementation supports features that are missing from Helios

@kekekeks
Copy link
Contributor

kekekeks commented Jun 4, 2015

I don't see anything that libuv can support and Helios can't. libuv is just an abstracted I/O event queue after all.

May be it would be better to add libuv support directly to Helios.

@rogeralsing
Copy link
Contributor Author

Without testing, I would guess that Libuv is a lot faster than Helios. that alone is a reason to have a transport based on that.

@kekekeks
Copy link
Contributor

kekekeks commented Jun 4, 2015

Argh. livuv isn't some magic, its replacement for System.Net.Sockets and is more efficient for *nix systems, but not for windows (because System.Net.Sockets are designed to perform well on top of I/O Completion Ports with dedicated I/O thread pool and libuv uses the concept of main I/O event loop which works well with epoll/kqueue).

  1. You will still need to implemented all that logic already implemented in Helios
  2. I don't see why we should have incompatible transports one of whose being good for *nix and another one being good for Windows

@rogeralsing
Copy link
Contributor Author

  1. I don't see why we should have incompatible transports one of whose being good for *nix and another one being good for Windows

I dont know where this comes from?
I'm not talking about replacing the default transport.
I'm talking about having more options. nothing that goes into the core project.

@kekekeks
Copy link
Contributor

kekekeks commented Jun 4, 2015

If one create a libuv-based transport with incompatible protocol we'll have exactly the described situation.

@rogeralsing
Copy link
Contributor Author

OK, so we don't build that specific one then.

X-Sockets has a huge community and I see no reason why we should not try to bring our and their user base together.

@uffebjorklund
Copy link

I am one of the core devs at XSockets.NET and I love the idea presented here.
I will have to do some homework, but I will be happy to contribute in any way I can.

First of all I will get familiar with Akka, then I will get back to you guys

@rogeralsing
Copy link
Contributor Author

Related to #788 - Akka.IO Transport

@jordansjones
Copy link
Contributor

I'd be curious to see if NetMQ's Request / Response Socket was a feasible transport option.

There is also an FSharp port

@philiplaureano
Copy link

How do you write a custom transport for Akka.Remote?

@Horusiath
Copy link
Contributor

Horusiath commented Aug 23, 2016

@philiplaureano here you have an alternative transport (using Akka.IO instead of Helios).

Regarding transports - it looks like Lightbend guys are going to merge Artery into master. It's something worth thinking of. Ofc we need to first stabilize and optimize akka streams (which is already fast, but not enough) including performance optimiziations that came on the JVM in v2.4.9.

@sean-gilliam
Copy link
Member

Moved issue to AkkaNetContrib/Home#26

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants