I'll try to keep this FAQ updated on the general questions asked on the p2p infrastructure:
1. How scalable is the p2p framework?
* PNRP is the serverless name resolution protocol, and is scalable to the size of the internet.
* Graphing/Grouping: These are protocols intended for peer to peer group activities, and are scalable to the thousands.
* Peer Channel (a part of the Windows Communication Foundation): These protocols intended for multiparty messaging are scalable to the tens of thousands and likely more (still testing)
2. How much bandwidth do these protocols consume?
The protocols in general are intended to consume far less traffic than any application using the framework will consume. We are in the process of testing bandwidth consumption, and will be happy to share numbers in a little time.
3. How much time is spent before a node connects to a network?
* PNRP - should be less than 10 seconds
* Graphing/Grouping/Peer Channel - this really depends on the mechanism used to find a node in the mesh to connect to. If PNRP is used as the mechanism of finding such a node, then it will take a couple of seconds more. The actual connection establishment mechanism is fairly quick.
4. Where is Teredo server currently setup?
Microsoft hosts a public Teredo server that is available for all applications to automatically use. To learn more on Teredo, take a look at http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/teredo.mspx5. What are the typical topologies formed for say when 30 nodes gets connected in a multiparty activity?
Take a look at the white paper http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/p2pintro.mspx, which shows what a graph looks like.
6. Reliability. When a message sent by a node does not receive a response, does it really means node isn't? Numbers of hops may be pretty large and hence chance of message loss is pretty high. Is it true?
* PNRP - if a response is not received, then almost certainly, the node is either not accessible because it is behind a corporate firewall for instance, or it is just not online
* Graphing/Grouping/Peer Channel - if a message is not received, then there are some possibilities (all of which should be very rare) - the mesh is partitioned and a message consequently could not get through, some neighbor was just not able to forward the message on, or the local stack itself did not deliver the message to the application. All of these should be very rare, however, if your application requires reliability guarantees (100% of the time), then you may have to implement a simple protocol on top of the peer channel for this purpose.7. Replicated data store. Is it built on SQL Server, XML or something else? How dynamics are orchastrated? What happens when A syncs with B and C, B syncs with D and then C syncs with D? Would there be any ADO.Net provider to access this data store? Are there any events raised as data changes? Is there any built in features to maintain versions of data?
* The data store is a very simple store. It does allow for use of XML attributes in records that you can use for searching for relevant data. The synchronization protocol is based both on timestamp and version number, and is based on the last writer wins principle. However, you can enforce security in the group so as to ensure that no one else can clobber your records. There are no ADO.Net providers for this data store. There are record events raised any time data is added/deleted/modified.8. Real time streaming capabilities. Can a node, for example, transmit the video content to thousands of other nodes without reaching bandwidth bottlenecks.
* A group and a graph cannot be used directly for streaming. You would use the group/graph as a mechanism to get the topology, and then construct a streaming overlay on top. You can always use the underlying graph for sending less real-time sensitve data such as chat, collateral for meetings etc.
* The peer channel (which is showing incredibly high throughput numbers) could be usable in streaming scenarios. We are currently evaluating that. If you are interested, let me know and we can discuss.9. Distributed computing. Is there any built-in features to let node execure code on other nodes remotely (P2P version of RPC)?
* The data you send in messages to the mesh could contain anything. Your application which installed on all machines can quite easily send some data (which is code) to execute on other machines. However, our infrastructure natively does not enable these scenarios yet.
10. How does WCF/Indigo compare with Bonjour/Rendezvous?
* WCF enables messaging peer to peer, client server, amongst servers etc. It implements a large set of WS-* protocols for interop with other web services protocols/infrastructures as well. Bonjour is just a small piece of messaging from Apple that focuses on finding devices on the same subnet. It is likely similar to one protocol, WS-Discovery which enables discovery of services on the network. It is designed to be a scalable architecture that can be bridged across subnets using proxies. It is shipping as part of Windows Vista. Another piece built on WS-Discovery that Bonjour may be close to is People Near Me, which enables discovery of people located on the same subnet. Bonjour does not use PNRP! Neither does WS Discovery. The two are not compatible with each other.