New Router Implementation coming and WAMP Spec / IETF Status

121 views
Skip to first unread message

Alejandro Ramallo

unread,
Feb 11, 2018, 11:03:56 AM2/11/18
to WAMP
Dear All,

At Leapsight (my company) we have been silently working on a new WAMP Router implementation written is Erlang and designed for scalability and resilience. It supports the Basic Profile features and most of the well defined Advanced Profile features too.  It works as a cluster and uses data replication through an eventually consistent model and gossip to support network partitions. In addition to being a WAMP router it is also a REST API Gateway which is configured by a JSON DSL similar to Swagger and allows to either act as a standard HTTP Gateway (forwarding requests to an upstream HTTP server) or to route the request through the WAMP Router (the key feature) with basic transformation capabilities. In addition we are building support for OAUTH2 / JWT.

Bondy (as we call it) has been running for 6 months now in pre-production at one of our clients powering a large IoT Platform  - with around 20 micro services all using WAMP for inter-RPC and PubSub - and going live soon. 

We are planning to release v1.0 as OSS (Apache 2) around April and I wanted to have a sense of the status of the WAMP Specification and the idea or not to advance it into a into a proper IETF RFC.

We would love to start contributing on the WAMP Spec and make WAMP a success.

Cheers,

Alejandro Ramallo
Leapsight (CEO|CTO)


 

Tobias Oberstein

unread,
Feb 12, 2018, 3:18:05 AM2/12/18
to wam...@googlegroups.com
Hi Alejandro,

Sounds cool! Welcome to WAMP;)

Can I look at the code, is it OSS on GitHub? Any other links?

Long time since I used Erlang/OTP, but I should be able to recover some
skills;)

Rgd work on the spec, and advancing it into a proper RFC: yes, highly
welcome!

pls check the discussion here

https://github.com/wamp-proto/wamp-proto/pull/288

for recent activity (the thread is misplaced on the PR .. but it
unfolded there).

Cheers,
/Tobias

Alejandro Ramallo

unread,
Feb 12, 2018, 9:55:05 AM2/12/18
to WAMP
Hi Tobias,

Thanks!  Also, I would like to thank you and your colleagues at Tavendo for all the work you've done on WAMP and open it up. We really think it deserves more recognition and we would like to hale with that.
I will be back here around April with more news.

Bondy's code is no public yet, we are working hard on v1.0 and we will open source it in April. There is not going back on our decision to make it OS, it is just a matter of making sure we start with a solid base and have good enough documentation.

Thanks for the link on the RFC discussion, I will check it and see what we can do to help.


Cheers

Ale

Alexander Gödde

unread,
Feb 12, 2018, 10:37:10 AM2/12/18
to WAMP
Hi Alejandro!

Welcome from my side. Great to have more implementers. Help on the RFC is greatly welcome. This is a community effort, and an IETF standard would be a whole other level for WAMP.

Regards,

Alex

Tobias Oberstein

unread,
Feb 12, 2018, 12:39:23 PM2/12/18
to wam...@googlegroups.com
Hi Alejandro,

Am 12.02.2018 um 15:55 schrieb 'Alejandro Ramallo' via WAMP:
> Hi Tobias,
>
> Thanks! Also, I would like to thank you and your colleagues at Tavendo for
> all the work you've done on WAMP and open it up. We really think it
> deserves more recognition and we would like to hale with that.
> I will be back here around April with more news.
>
> Bondy's code is no public yet, we are working hard on v1.0 and we will open
> source it in April. There is not going back on our decision to make it OS,
> it is just a matter of making sure we start with a solid base and have good
> enough documentation.

food for thought:

you might think about an OSS mantra many follow: release early, release
often.

this is exactly to get early community feedback, community involvement
from the very beginning.

Cheers,
/Tobias

Ramallo Alejandro María

unread,
Feb 13, 2018, 4:58:51 AM2/13/18
to wam...@googlegroups.com
Off course. The thing is that we are in the middle of a major change in the clustering replication mechanism and we want that to be the base before anybody gets involved :-)

Cheers,
Ale

-- 
You received this message because you are subscribed to a topic in the Google Groups "WAMP" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/wampws/fUVmAeSmpIo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to wampws+un...@googlegroups.com.
To post to this group, send email to wam...@googlegroups.com.
Visit this group at https://groups.google.com/group/wampws.
To view this discussion on the web visit https://groups.google.com/d/msgid/wampws/6b656687-5f71-347d-b1b8-acafe38bbc5f%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Ramallo Alejandro María

unread,
Feb 13, 2018, 5:02:17 AM2/13/18
to wam...@googlegroups.com
Thanks Alex! I agree. BTW, does the community have a tool to validate a Router implementation e.g. a set of tests one can use to validate the router complies with the current Specification?

Kind Regards

Ale

--
You received this message because you are subscribed to a topic in the Google Groups "WAMP" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/wampws/fUVmAeSmpIo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to wampws+un...@googlegroups.com.
To post to this group, send email to wam...@googlegroups.com.
Visit this group at https://groups.google.com/group/wampws.

Alexander Gödde

unread,
Feb 21, 2018, 6:08:26 AM2/21/18
to WAMP
HI Alejandro!

There is no tool for router validation. Our more immediate concern would be to create a test suite for client libraries, since this would allow us to recommend client libraries to users/customers. 

Regards,

Alex
Ale

To unsubscribe from this group and all its topics, send an email to wampws+unsubscribe@googlegroups.com.

Alejandro Ramallo

unread,
Jun 14, 2018, 6:43:35 AM6/14/18
to WAMP
Dear All,

Yesterday we finally released Bondy as OSS (https://gitlab.com/leapsight/bondy)

There is so much to do, specially in terms of documentation, guides and testing. We are actively developing it and Bondy has been in production for 6 months. 
Much of the test tooling we use it is outside Bondy, treating it as a black box. We will start investing in unit and regression testing (eunit and common_test in Erlang) and hopefully property-based testing using Quickcheck.

The current version passes all Authobahn.js test but the following: 
- testRpcProgress we do not support this feature yet, but coming
- testCBORSerialization the CBOR lib for erlang in not complete and we are not using CBOR at the moment
- testPubsubPrefixSub and testPubsubMultipleMatchingSubs: we have a partial/broken support for prefix and wildcard matching but an implementation of a Radix Trie is almost finished and tested, and should be replacing the existing solution in the coming weeks.

Here are some interesting features in Bondy:
- Distributed router - Bondy is deployed as a cluster where all nodes share all state through gossip replication. It has Active Anti-entropy mechanisms which gets a new node (or node disconnected) in sync with the cluster.
- Distributed RPC & PubSub : because a node has visibility of all Peers connected to the mesh/bus any node can route an INVOCATION or EVENT to a Peer connected to another node
- API Gateway, every node acts as an API gateway which allows to host multiple APIs which are generated using a simple JSON specification (similar to swagger) (a snippet below)
- Partial implementation of OAUTH2 flows
- RBAC subsystem and DB
- BERT and Erlang (external format) serialisation supported (at the moment harcoded to RAW socket slots numbers 4 and 15 respectively)


We will document all of this. There's going to be a video of a presentation I gave yesterday in youtube soon and slides too, so I will include all of that in the repo's REAME.

Looking forward to contributing to WAMP!

Cheers,

Ale


API Spec snippet


"paths" : {
"/add" : {
"is_collection" : false,
"post" : {
"action" : {
"type" : "wamp_call",
"procedure" : "com.example.add2",
"options" : {},
"arguments" : "{{request.body}}"
},
"response" : {
"on_error" : {
"body" : "{{action.error.arguments_kw}}"
},
"on_result" : {
"body" :
"{{action.result.arguments |> head}}"
}
}
},
"options": {
"action": {},
"response": {
"on_error": {"body": ""},
"on_result": {"body": ""}
}
}
}
}
Reply all
Reply to author
Forward
0 new messages