Updated the XML syndication thing in response to various comments. If you can't be arsed to read it, proposal summary follows:
There exist a bunch of hosts each knowing the address of all the others such that they make a network. Node A introduces a new piece of data, identified by origin URL and a timestamp. A message is sent out to other hosts announcing this data, spread virally (that is, all hosts that receive this message send it out to hosts they know). Each message (because the message has multiplied now) has a path back to whoever holds the data.
Node B wants the data. It sends a request back along the path to host A which dispatches the data. Every node along the path keeps a copy of the data for some amount of time. Should it be on the path of another request, it doesn't propagate the request further, it just returns the data.
An alternative method would be to broadcast all data over the network, each node sending out new data as it receives it. Whether the node hangs on to the data for the local users is up to it. This would be easier I think.
The explanation above is a hell of a lot clearer than the document I wrote, but that's because it doesn't include all my fumbling and rationale.
Updated the XML syndication thing in response to various comments. If you can't be arsed to read it, proposal summary follows:
There exist a bunch of hosts each knowing the address of all the others such that they make a network. Node A introduces a new piece of data, identified by origin URL and a timestamp. A message is sent out to other hosts announcing this data, spread virally (that is, all hosts that receive this message send it out to hosts they know). Each message (because the message has multiplied now) has a path back to whoever holds the data.
Node B wants the data. It sends a request back along the path to host A which dispatches the data. Every node along the path keeps a copy of the data for some amount of time. Should it be on the path of another request, it doesn't propagate the request further, it just returns the data.
An alternative method would be to broadcast all data over the network, each node sending out new data as it receives it. Whether the node hangs on to the data for the local users is up to it. This would be easier I think.
The explanation above is a hell of a lot clearer than the document I wrote, but that's because it doesn't include all my fumbling and rationale.