On Wed, Jul 28, 2010 at 7:30 AM, Serge Aleynikov <[email protected]>wrote:

> Brian,
>
> > Hope I don't seem too stubborn about this.  I do like the idea of
> > renaming the UPSTREAM/DOWNSTREAM sockets and I hope the momentum for
> > that doesn't get lost.
>
> You're certainly not the only one having trouble with the naming of
> UPSTREAM/DOWNSTREAM sockets.  Every time I think this notion is settled
> in my head, if I stop thinking about it and come back to it in a few
> days I have the same trouble in identifying the roles, which to me
> clearly indicates of a poor naming choice.
>
> 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.
>
>
I do agree with this at some level.  0MQ occupies a very odd position in the
network stack.  In some ways it is very low-level (connectionless, raw bytes
wire protocol) and in other ways it is very high-level (load balancing, qos,
etc.).  At the same time all other solutions I have used are high-level and
low-level in all the wrong place.

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.
>
> I don't mean to criticize the design too much at this point as I am sure
> there's a reason for 0MQ architecture being done the way it's
> implemented, but this lack of role separation in design is likely what's
> causing much of confusion.  Perhaps if the design treated sockets as
> identifiable endpoints more explicitly, and had another layer for
> defining communication patterns with a separate API, there would be less
> trouble with concepts?
>
> E.g., here's the pseudo-code of the separation I am talking about:
>
> Server:
>     ctx      = zmq_init(IoThreads)
>     endpoint = zmq_create_endpoint(ctx, "ser...@host", ZMQ_REQ)
>     // All messages received on socket will be delivered
>     // to the endpoint.  The messages would carry the
>     // identify of the sender's endpoint
>     socket   = zmq_socket(endpoint, options)
>     zmq_bind(socket, "tcp://host:port")
>
>     while (true) {
>         zmq_recv(endpoint, msg, flags)
>         printf("Msg from %s\n", msg->endpoint())
>         ...
>         // Get the socket to be used to send a reply
>         sock = msg->socket()
>         // If endpoint uses a different design pattern that
>         // needs load balancing, the reply socket can be
>         // obtained by calling a function at the endpoint-level
>         // that will take the client endpoint's identity and the
>         // options representing a balancing strategy:
>         sock = zmq_get_socket(endpoint, msg->endpoint(), options)
>
>         zmq_send(sock, reply)
>     }
>
> What's accomplished here is that endpoints have identities and sockets
> are used as communication channels, where the endpoint controls use of
> sockets and has a feature of figuring out which sockets to use to relay
> a message to its origin, whereas it itself controls the high-level
> balancing and other strategies.
>
> I am augmenting the client pseudo-code, but hope the point is clear.
>
> My 2c.
>
> Serge
>
> >
> >      > Any usage of the words client/server/service is horribly
> >     confusing in the
> >      > 0MQ context.
> >
> >     I'm not going to defend the long names if people feel they clumsy and
> >     pointless, but 'client' and 'server' are formally defined in
> >     http://api.zeromq.org/zmq_socket.html and though I'm often pretty
> >     confused about many things, these were always clear.
> >
> >
> > I didn't know this, so I looked on this web page and found the following:
> >
> > "many-to-one (many clients, one server)"
> >
> > This definition implies that server = bind, client = connect.
> >
> > And also:
> >
> > "The request-reply pattern is used for sending requests from a client to
> > one or more instances of a service"
> >
> > This implies that server = REP, client = REQ.
> >
> > Are not these two definitions contradictory?
> >
> >     Sure, you can
> >     have networks where services connect to clients but then you _know_
> >     you're doing weird stuff.
> >
> >
> > Then I think 0MQ is weird :)
> >
> >     Actually, calling them 'client' and 'server' (for reqrep) IMO helps
> by
> >     telling users 'you really should be binding the server socket and
> >     connecting the client socket' (in 95% of cases).  Network
> >     architectures aren't random.  Clients are generally a lot more
> dynamic
> >     than services.
> >
> >
> > I completely agree that most people will want to use the canonical
> > directions, but I do think it is misleading to hide the fact that the
> > choice of bind/connect is completely independent of the socket type.
> >   When people ask me if a socket should bind or connect, I tell them
> > that the decision to bind/connect is independent of the socket type and
> > that if you want a socket to have multiple peers, it should bind, a
> > single peer, it should connect.
> >
> >
> >     -Pieter
> >
> >
> >
> >
> > --
> > Brian E. Granger, Ph.D.
> > Assistant Professor of Physics
> > Cal Poly State University, San Luis Obispo
> > [email protected] <mailto:[email protected]>
> > [email protected] <mailto:[email protected]>
> >
> >
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > [email protected]
> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>



-- 
Brian E. Granger, Ph.D.
Assistant Professor of Physics
Cal Poly State University, San Luis Obispo
[email protected]
[email protected]
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to