[HN Gopher] Crossbar.io - an open source platform for distribute... ___________________________________________________________________ Crossbar.io - an open source platform for distributed and microservice apps Author : gjvc Score : 65 points Date : 2021-05-07 17:57 UTC (5 hours ago) (HTM) web link (crossbar.io) (TXT) w3m dump (crossbar.io) | no_wizard wrote: | Only big downside to this (its WAMP[0] under the hood) from when | I implemented this, and ultimately abandoned was the following: | | - The clients are _huge_. I should preface I 'm a Software | Engineer that focuses on the web, so this matters _a lot_ to me. | They really need to be run in a web worker if used, (they 're 1MB | + of JS, and don't tree shake well. They don't export ES Modules | either, last I checked). We have real time chat infrastructure | for context. Web Socket Support in Workers Can be weird too | | - There's no fall back to a different protocol in a practical | sense (yes, the specification does not state it _has_ to be | websockets, it just _defaults_ to web sockets). Its for all | practical purposes, web sockets or bust. Why this matters to me? | Because Server Side Events would be a more efficient way to push | messages to clients when the total volume of pushes is several | factors greater than pulls, from the _server side_. That is, the | server in aggregate is going to push more data to all the clients | than any _one_ client is going to push to the server. Therefore, | it would have been nice for this to be abstracted around | different models for flexibility of architectural approaches. | | Ultimately we did go with an SSE push (from the server) model, | and just send individual requests via HTTP Requests. It actually | was less load on the server and faster over all (updates were | still extremely fast, but no one client was ever pushing to the | server more than the server was pushing out to them) | | [0]: https://wamp-proto.org/ | holler wrote: | > There's no fall back to a different protocol in a practical | sense (yes, the specification does not state it has to be | websockets, it just defaults to web sockets). Its for all | practical purposes, web sockets or bust. Why this matters to | me? Because Server Side Events would be a more efficient way to | push messages to clients when the total volume of pushes is | several factors greater than pulls, from the server side. That | is, the server in aggregate is going to push more data to all | the clients than any one client is going to push to the server. | Therefore, it would have been nice for this to be abstracted | around different models for flexibility of architectural | approaches. | | That sounds interesting! I've implemented mqtt in a chat | project but have not investigated SSE as a fallback/hybrid | approach. Are you only using SSE or hybrid? I guess I need to | read more about SSE but I am curious to compare it to | websockets/mqtt and learn tradeoffs. | no_wizard wrote: | I'm using SSE to push _from the server_ to the client. I 'm | just sending normal HTTP requests to send from _the client_ | to the server, as they 're much smaller in volume. | | Its really...simple. SSE streams are unidirectional so you're | only listening for incoming messages, never outgoing on the | client, conversely, you just broadcast out to your clients | over SSE. Just have an HTTP/2 connection makes it even more | efficient. | | Its not great if you need users to have multi-tab workflows | (you can only have 6 connections over HTTP 1.1 for a single | user), but that has not been an issue for us. There's some | logic you can do on the backend to close duplicate | connections. | | When Web Transport hits, I'm hoping we can do SSE on the | client as well, and have two separate unidirectional (one for | the server to push to the client, one for the client to push | to the server) and have SSE both ways, this way we can | terminate the streams independently for efficency | frankwiles wrote: | We use Crossbar and WAMP to build Simpl (https://simpl.world/) on | overall it's been a great experience. | | Definitely suffers from some of the challenges mentioned above | (commercial clustering, large-ish frontend libraries, etc) but | it's been pretty straight forward to work with and scales up well | enough for our needs (a few hundred to a few thousand | simultaneous concurrent players). | kitd wrote: | Maybe I'm just getting old, but can someone explain what this is? | Some kind of message broker? "Networking platform" is too vague. | tegeek wrote: | So at high level its Pub/Sub and RPC combined together in a | single framework. | | From a developer perspective, you can create a "channel" and | then start transmitting messages on that channel. Then someone | else can subscribe and can listen to that channel. | | In the same way, someone can "expose" a single method. And you | as a developer can call that method from anywhere. | | The medium of communication is WebSockets. The protocols it | uses is WAMP. | | Which means any programming language can implement this (on top | of WebSockets) and can take advantage of "distributed | application architecture". | kitd wrote: | Thank you! | lostcolony wrote: | That's what I'm getting from it, message broker. It says | pub/sub and 'routed RPC', wherein a client can register a | method and another client can call it...but that's achievable | with pub/sub anyway so not really sure what the benefit is. | deadmutex wrote: | Please do not associate your comment with "just getting old". | This sort of comment unnecessarily perpetuates negative | stereotypes in the industry. | | And to answer your question, crossbar is an implementation of | WAMP (Web Application Messaging Protocol) that is built on top | of web sockets. If you are familiar with 1990s technology, | think TIBCO for the web. | | We used it at a startup in the mid 2010s, and it was great for | real time communication between clients (browsers) and servers. | Never had any issues. | ForHackernews wrote: | > Please do not associate your comment with "just getting | old" | | > If you are familiar with 1990s technology | | Is this extremely-subtle trolling? | nly wrote: | Once upon a time I used WAMP as an IPC and routed RPC | protocol between a bunch of _desktop_ processes. Like dbus | but not awful to use, and naturally cross platform (because | it's over TCP). | gjvc wrote: | > Please do not associate your comment with "just getting | old". This sort of comment unnecessarily perpetuates negative | stereotypes in the industry. | | +10000 | drdaeman wrote: | I'd wish people presenting their frameworks would not just | describe the happiest path, but the outage modes as well. | | I'm looking at that "Powering the Internet-of-Things" animation | on their main page, and immediately asking myself "what if | there's a network outage just as the temperature rises?" "what if | the fan controller has a power hiccup and fails to start?" etc | etc. | | Because those days it takes days (or even weeks) to subscribe to | the idea, build a sketch and start testing failure scenarios. | gumby wrote: | Used in a couple of packages over the last few of years and it | worked pretty well. Pubsub & rpc over web sockets. | polskibus wrote: | what are the delivery guarantees? Is it at-most-once only? | holler wrote: | > Instead of complex QoS for message delivery, a Broker may | provide message history. A Subscriber is responsible to | handle overlaps (duplicates) when it wants "exactly-once" | message processing across restarts. | | The Broker may allow for configuration on a per-topic basis. | | -------- | | Slightly confused, my impression is that it's At Least Once | with the client responsible for dedupe, but it says "if you | want exactly once", so I'm not sure if the client is supposed | to make a second request for confirmation? | | https://wamp- | proto.org/_static/gen/wamp_latest_ietf.html#fea... | omneity wrote: | I used crossbar at multiple occasions in projects of various | complexity. My main take away: | | - Pleasant to use and does almost exactly what it advertises | | - Interesting authentication & permission patterns, unfortunately | we couldn't extend it to the frontend, and that left us with a | strange gap | | - Hard to scale for serious cases, clustering is impossible in | the open source edition and the commercial version costs in the 5 | figures _per cluster node_ | | Ultimately I am quite confused about the target demographic of | Crossbar (factories moving to IoT?) | | I don't know of many pubsub + rpc solutions targeting a similar | tradeoff with a tight packaging and a similar learning curve. | Here are some I found then: | | https://deepstream.io is the closest and has a richer feature set | (including a replicating document store), however it seems to | have a small ecosystem / community / limited support options, and | permissions do not seem as advanced. | | https://nats.io is close but lower level. Has a large community | and rich ecosystem however. | | Then you can also mix and match lower level technologies to | achieve the particular set of tradeoffs you need. MQTT, AMQP, WS | as the protocol, mosquitto / rabbitmq / zeromq, then json-rpc on | top, grpc ... | hhh wrote: | I don't see this fitting into the factory space for large orgs, | if you have one factory you'll probably have many | omneity wrote: | My wording might have been ambiguous. I am sure you can scale | Crossbar if you get the commercial version which supports | clustering (hence IoT factories), however the open source | edition is limited to a single running instance. | sneak wrote: | > _Hard to scale for serious cases, clustering is impossible in | the open source edition and the commercial version costs in the | 5 figures per cluster node_ | | I'm really tired of these fake open source projects. If you | really believe in software freedom, you simply don't build or | distribute proprietary software. | | Open core is bullshit. It's like a free software kernel | distributed with a closed source libc. Nobody would call that | project open source. | f430 wrote: | Unfortunately the Open source industry has been hijacked by | VCs. They are polluting the space by chasing quick dollars | and confusing developers and users. | iAm25626 wrote: | build on top of WAMP: Web Application Messaging Protocol | https://wamp-proto.org/comparison.html Another alternative | that I follow with great interest: | https://github.com/nanomsg/nng pubsub is a powerful pattern | holler wrote: | When I set out to build a new realtime chat app, I explored | various options and landed on wamp/crossbar.io as a potential | choice. This was a few years ago but at the time it seemed | promising, reasonably well-documented, and had both python and js | clients. | | One problem was whether it would support horizontal scaling if | you needed to expand beyond a single node, and at the time they | were "working" on a global/cross router but it wasn't ready. It's | a hard problem to solve and one that may not be required for many | use cases. I'm not sure if they delivered it but I ended up going | with mqtt instead. | | To piggyback on another commenter, their javascript library did | feel a bit bloated/dated, but I also got the impression a few of | the people were juggling a lot of related projects and maybe | there wasn't enough of a community. Haven't checked back | recently. | | In any case, the project is still impressive, has some dedicated | people behind it, and could be a great solution to add websockets | to a project. | larrykubin wrote: | I used to work at a SaaS startup that used this extensively. | Here's a demo of a remote command line tool we made - React on | the frontend communicating with C++ agents on desktops. The | desktop agents could also publish events that the web could | subscribe to and show activity on a real-time feed / dashboard. | | https://www.youtube.com/watch?v=SNjzPS1zmkg ___________________________________________________________________ (page generated 2021-05-07 23:00 UTC)