As an alternative to traditional client-server systems, Peer-to-Peer (P2P) systems provide major advantages in terms of scalability, autonomy and dynamic behaviour of peers, and decentralization of control. This book offers an overview of different P2P techniques and architectures, discusses their trade-offs, and illustrates their use for decentralizing large-scale data sharing applications.