> In case 1), if you are proposing to overwrite the content of the znode,
> then you would need first to make sure that all receivers have already
> received the previous message. This doesn't seem a good solution to me
> because a client that wants to broadcast a message would have to wait until
> all others flag that they have received the previous message. Appending new
> messages to the current content of the znode doesn't seem a great solution
> either because clients would have to make sure that they are overwriting the
> correct version.

It's not good for all situations... we have a daemon state file we're using
and it works well for this use case.

Also the throughput here is very low.

> Solution 2) sounds better to me because it is wait-free: no client willing
> to broadcast a message contends with other clients. Now, as you say, you
> have to use the sequence flag to make sure that all messages are delivered
> in the same order (if you want total order). You may still want to have a
> mechanism for clients to flag which messages they have already delivered so
> that you remove messages that everyone has already delivered. If your
> application generates a large number of messages and you don't remove them,
> you might end up with an unnecessarily large number of znodes. Finally, I'm
> not sure why you want to use ephemeral znodes for messages. I think that
> ephemeral znodes may cause you trouble in this case. Suppose that a client
> broadcasts a message by creating an ephemeral znode and crashes before all
> other clients deliver the message. You may end up with two clients
> delivering different sequences of messages.

But you would need a cleanup mechanism if they weren't ephemeral...

Of course if ephemeral nodes weren't necessarily session based and had a TTL
value that would solve this problem.


Founder/CEO Spinn3r.com
Location: San Francisco, CA
AIM/YIM: sfburtonator
Skype: burtonator
Work: http://spinn3r.com

Reply via email to