[Spread-users] Broadcast UDP messages will flood network and decrease performance
John Schultz
jschultz at spreadconcepts.com
Fri Feb 1 10:20:47 EST 2008
> The fact is that ALL payload messages to private [or public] group send
> to ALL daemons. I traced it via wireshark. Is it true?
> Is anybody repeated my tests?
Yes, as I said before, Spread currently sends all traffic to all daemons.
There *might* be an optimzation already implemented for private messages
within a single daemon.
> If it is true, it means that WHOLE "local" traffic goes to external daemons.
> No any filtering by segment... or by group members....
>
> Parasite traffic
> 1) loads network.
> 2) all daemons have to filter traffic. It leads to decrease performance for daemons [and users].
Correct.
> If it is true, which variants are available?
> 1 variant) it is key of spread concept. Multicast cannot change.
> 2 variant) It seems that we (spread developers) haven't any free resources to implement it. May in future... or is someone wanted to help us?
I wouldn't say it *can't* be changed. On the other hand, I have thought
about it and it is quite difficult to do. The general idea would be to
have the sender send the full message only to those segments that have
participating group members and to send small meta-messages to the other
segments, indicating that they don't need the full message. The most
difficult changes would be in recovering holes for receivers and handling
group membership changes that happen around the time of the send.
On the first issue, when a daemon requests a hole to be filled, a
responding daemon would need to know whether or not the requestor(s) needs
the full message or the meta-message. So, both versions of the message
would need to include, at least, the group names to which the messages
were sent. The responder would then need to differentiate resend requests
based on the requestor, and for example, not respond if the requestor
needs the whole message and the responder only has the meta-message.
(Someone with the whole message can derive the meta-message from it and
respond to either type of request). This differentiation might require
changes in the way resend requests are put onto and taken off the token
(i.e. - the logical byte layout of the token itself).
A trickier problem occurs when the membership of the group changes around
the time of a send. If the sender has a hole(s) when it goes to send,
then the message that hole(s) represents could actually be changing the
group membership(s) for the groups to which it is sending. Imagine the
following scenario: Daemon #1 sends a join message adding a new member to
group X and it is the first member for group X on daemon #1. Daemon #2
doesn't get that message before it is his turn to send. According to #2's
view of the world, Daemon #1 doesn't need the messages A he is sending to
group X and so it should (incorrectly) only get the meta-message. This
problem would require every daemon to check every message to ensure that
it got the correct version, and to request the full version if it got the
meta-message. A similar problem is that daemons trying to recover message
A for daemon #1 may also have the incorrect view of him and will answer
his requests with the wrong version. So, maybe once Daemon #1 incorrectly
gets the meta version he will have to re-request the full version
explicitly somehow.
There might be other considerations / problems that Yair or Jonathan can
point out.
Cheers!
---
John Schultz
Spread Concepts
Phn: 443 838 2200
More information about the Spread-users
mailing list