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

Implement remoting #19

Open
mdbergmann opened this issue Dec 22, 2020 · 7 comments
Open

Implement remoting #19

mdbergmann opened this issue Dec 22, 2020 · 7 comments
Labels
enhancement New feature or request

Comments

@mdbergmann
Copy link
Owner

Remoting in the sense of having actor systems on different hosts where sending messages is location transparent.
Meaning actor A in system A can send and receive message to/from actor B in system B.

The path of the actor thus has to be extended to specify an URI, like: clg://<host>/<actor-system-name>/<actor-path>

@mdbergmann mdbergmann added the enhancement New feature or request label Dec 22, 2020
@mdbergmann
Copy link
Owner Author

Gota think about this. Interesting topic, in particular as I never really worked with networking code in CL.

@rail4you
Copy link

you can choose a data store format to transfer data between networks, such as cl-store.

@wmealing
Copy link

The kind of "simple" way erlang does it might be the easiest, a network facing deserializer that ends up pushing it into the target pid triple. Looking forward to seeing how you attack this.

@mdbergmann
Copy link
Owner Author

I should finally tackle this. Got some ideas and did some experiments with usocket. Wondering though if WebSockets would be a better approach even though they come with more dependencies, like Hunchentoot.

@nyx-land
Copy link

Why were you thinking about using websockets instead of just TCP/UDP? Also, not sure if you've seen it before, but there's already a system for distributed parallel computing using lparallel (https://github.com/lmj/lfarm), although it hasn't been updated in a really long time. Might be able to build off the work already done there.

@mdbergmann
Copy link
Owner Author

Yeah, I've seen lfarm.
It's not so much about parallel computing, but to create remote actor networks seamlessly as if they were local. Location transparent.
WebSocket traffic has some advantages is regards to reverse-proxies, network load-balancers and that sort of thing because it's easier to identify the type of packet. It might also be easier to apply a security on top of it. Zero trust networks and so on.

@nyx-land
Copy link

My two cents as a complete rando, from having had to add a patch to websocket-driver to have the client not crash my entire computer from opening tons of threads and maxing out the CPU, is that the websocket situation for CL isn't great right now on the client side at least. Presumably something like this would need both the client and server parts and I imagine it would be a real pain to try to get something as complicated as a networked actor system working reliably with it. But it could also perhaps be a good stress test for the websocket-driver client implementation (which is I think currently the only one that exists for CL), or just an excuse to implement an entirely new one. I'd looked into trying to do that but reading RFCs makes my eyes glaze over.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants