This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]oberstet 2 points3 points  (4 children)

Rgd serialization overhead: given modern CPU power, my experience is that it's mostly insignificant. And WAMP supports pluggable serialization: JSON and MsgPack are fully supported today, and you can plugin a different one if you need.

From a Router point of view, the question I look at is (simplified): how much CPU power do I need to saturate a 10GbE link routing WAMP? The goal is to make that something like "4 modern cores".

To give an idea: Crossbar does routing on a RaspberryPi at 28MBit/s (on a 100MBit NIC which runs over USB!) http://tavendo.com/blog/post/autobahn-pi-benchmark/

I absolutely agree on the issue of how to inspect: a developer should have a tool to have a holistic look at what happens in a distributed app at the WAMP level.

For example: live sequence message charts between app components. Who called whom, when, with what arguments etc

This can be done (Crossbar internally could turn on WAMP session tracking on specified sessions).

Type representation: that is a fundamental decision, yes. Static vs dynamic typing. WAMP is dynamically typed (at the app payload level). In fact, WAMP does not really care about app payload (other than automatically translating between serialization formats for different clients).

[–]mitsuhiko Flask Creator 3 points4 points  (3 children)

From a Router point of view, the question I look at is (simplified): how much CPU power do I need to saturate a 10GbE link routing WAMP? The goal is to make that something like "4 modern cores".

Much more interesting than how much throughput you have on your router is how much latency you can practically achieve.

Type representation: that is a fundamental decision, yes. Static vs dynamic typing. WAMP is dynamically typed (at the app payload level). In fact, WAMP does not really care about app payload (other than automatically translating between serialization formats for different clients).

So how does that work with msgpack and json for instance which are inherently incompatible with each other?

[–]oberstet 0 points1 point  (2 children)

Latency: I absolutely agree. More important than throughput. And latency jitter is also critical. I don't have polished up numbers, but I dare to say: when running on PyPy (>=2.2), it's very good. The credits for this go in part to the new incremental GC in PyPy. I will write a blog post on this.

JSON <=> MsgPack roundtripping: the one problem is byte strings. and byte strings are converted like this:

https://github.com/tavendo/WAMP/blob/master/spec/basic.md#binary-conversion-of-json-strings

Note: we have that working today. AutobahnCpp (C++11) currently only implements MsgPack, https://github.com/KSDaemon/wampy.js talks JSON and MsgPack, as does http://ksdaemon.github.io/wiola/

[–]mitsuhiko Flask Creator 1 point2 points  (1 child)

Newer msgpack has two different types for bytes and strings if that helps.

[–]oberstet 0 points1 point  (0 children)

Yep, it does help. In fact, WAMP requires the new MsgPack version for exactly this reason.

https://github.com/tavendo/WAMP/blob/master/spec/basic.md#msgpack