 Have you ever heard about the Torrents? Oh yeah, peer-to-peer architecture is famous because it allowed effectively share large amounts of data for simple users who don't own powerful servers. And what did you think? So peer-to-peer systems are decentralized systems where computations may be carried out by any node in the network. The overall system is designed to take advantage of the computational power and storage of a large number of networked computers. As I mentioned in the beginning, most peer-to-peer systems have been personal systems, but there is increasing business use of this technology. Look at the list of peer-to-peer systems. Besides the very well-known file sharing systems that are based on the BitTorrent protocol, you probably know Viber, Bitcoin, Jabber. The interesting solution was the SETIP project that was dedicated to searching for extraterrestrial intelligence. Hundreds of thousands of enthusiasts devoted their machine computing resources to analyze signals acquired by the SETIP project in searching for extraterrestrial intelligence. There are two models that describe the logical network architecture. Decentralized peer-to-peer architecture, semi-centralized peer-to-peer architecture. In the decentralized model, peers are equally privileged equipotent participants in the application. They are set to form a peer-to-peer network of nodes. In this figure, you see an unstructured peer-to-peer network where the nodes are connected randomly. Because there is no structure globally imposed upon them, unstructured networks are easy to build and allow for localized optimizations to different regions of overlay. Also, because the role of all peers in the network is the same, unstructured networks are highly robust. However, the primary limitations of unstructured networks also arise from this lack of structure. In particular, when a peer wants to find the desired piece of data in the network, the search query must be flooded through the network to find as many peers as possible that share the data. An alternative peer-to-peer architectural model is semi-centralized architecture. Here within the network, one or more nodes act as superpeers to facilitate communication. This has the effect of reducing traffic between nodes. In a semi-centralized architecture, the role of the superpeer is to help establish contact between peers in the network or to coordinate the results of a computation. In computational peer-to-peer systems, where a processor-intensive computation is distributed across a large number of nodes, it is normal for some nodes to be superpeers. Their role is to distribute work to other nodes and to collocate and check the results of a computation. The fundamental difference between the two approaches I mentioned is that one prioritizes robustness while the other prioritizes efficiency. A decentralized approach tends to be more robust, no single point of failure, but it is usually tricky to make it as efficient as a semi-centralized approach. So when to use this architecture? First, when a system is computational or network-intensive, and it is possible to separate the processing required into a large number of independent computations. It takes advantage of the computational power and storage of a large number of networked computers. Second, when a system primarily involves the exchange of information between individual computers on the network, and there is no need for this information to be centrally stored or managed. It's worth to mention that security concerns are the principal reason why peer-to-peer architectures are not that widely used. The lack of central management means that malicious nodes can be set up to deliver spam and malware to other nodes in the network. Peer communications require careful setup to protect local information, and if not done correctly, when it is exposed to other peers. Use it with care. Thank you for watching.