[zeromq-dev] zmq-socket name aliases

Martin Sustrik sustrik at 250bpm.com
Sun Aug 1 22:44:49 CEST 2010


> However, maybe the problem is not just with names but with the fact that 
> the 0MQ project tries to be too ambitious in squeezing many concepts 
> into a single layer of the stack?  There is a reason OSI is made up of 7 
> layers where each has its own role and API.
> The 0MQ sockets have session, presentation and possibly some of the 
> application layers intrinsically mixed together.  As a result they are 
> not really "sockets" but endpoints (?), mailboxes (?), nodes (?), and 
> communication channels combined.  While the API is modeled after BSD 
> sockets, the implementation beefs them up with rich features of upper 
> layers, and as a result the notion of a socket as communication channel 
> is somewhat lost together with the ability to identify communicating 
> entities.

Yep. I've spent years thinking about this.

The problem of layering is not specific to 0MQ rather it is common to 
all messaging middleware.

I'll try to explain my current view, however, I am not 100% sure about 
every aspect of it so take it with a grain of salt:

First of all, TCP doesn't work well as an underlying layer for messaging 
middleware. While TCP is perfect for the work it is designed for, being 
an underlying layer for highly available systems is obviously out of its 

These problems have been solved in SCTP (as an alternative to TCP), 
however, people still think of SCTP as an oddball protocol and prefer to 
layer (i.e. mislayer) SCTP-like functionality that clearly belongs to 
L4/L5 on top of TCP (L6 and higher).

The above reasoning applies to what you call session-related behaviour.

I would say there's no L6 functionality in 0MQ (correct me if I am 
wrong) and thus everything that remains has no other place to go but L7 
(application layer).

But it somehow doesn't seem right. What 0MQ does (aside of basic 
session-related functionality) is obviously not an application logic. 
That's why I use to refer to it as a "new layer in the networking 
stack", namely a "scalability layer" (L8?).

The goal of this layer is to spread the load of the distributed system 
in such a manner that arbitrarily large applications can be sustained on 
top of it. The specific feature of this layer is that it defines overall 
topology of the distributed system rather then simple point-to-point 

Commercial: Look out for my "Scalability Layer Hits the Internet Stack" 
talk on Linux Congress 2010!


More information about the zeromq-dev mailing list