Peer Computing

Definition:

Peer Computing: an architectural pattern for distributed computing in which there are two classes of nodes:

This is illustrated in the following diagram:

Peer Computing Diagram

In this architecture, if a Client A3 wishes to communicate with another Client C4 that is associated with a different Peer, it communicates with its own Peer A, which then communicates with the other Clients’ Peer C, which then communicates with the destination Client C4.

This communication path is shown in red in the following diagram:

Communication in Peer Computing

Contrast with:

Client-Server Computing

The client-server computing architecture is centered around one single special node (the Server node). All other nodes are Client nodes that depend on that single Server node and communicate with that server node with asymmetrical protocols.

Client-server Computing

This is today’s prevalent computing architecture across the industry.

P2P Computing

In P2P Computing, there is only one class of node. All nodes are equal peers to each other, communicating directly with each other through symmetric protocols.

P2P Computing

Flavors

There are two major flavors of Peer Computing:

Examples

E-mail:
The E-mail network largely implements a homogenous Peer Computing model. It uses the SMTP protocol in a symmetrical fashion so that any Peer may communicate with any other Peer in either direction. Most users interact with those Peers via client-server protocols such as IMAP, POP or REST.
Fediverse:
The decentralized social media network known as the Fediverse is a largely heterogeneous Peer Computing network, connected through the Fediverse network stack centered around the ActivityPub server-to-server specification. Users interact with the network by going through their Peers from Clients, such as mobile phone Clients or web Clients, using client-server protocols such as the ActivityPub client-to-server spec, the Mastodon API or REST APIs.
Matrix:
The decentralized communication network formed around the Matrix protocol follows the Peer Computing architecture in a similar way the Fediverse does.

There are many other examples, including XMPP/Jabber and the IndieWeb build on the WebMention and related protocols.

Why do we need the term “Peer Computing”?

Today’s prevalent internet application architecture is a client-server architecture in which ever-larger servers, controlled by a small number of ever-larger and typically – to their users – unaccountable corporations, provide “walled-garden applications” to an ever-larger number of users. Examples include all large websites, from Facebook to Amazon.

This architecture, when deployed at scale, is known to have many undesirable properties, including:

As a consequence, many developers and innovators are working, again, on alternate computing architectures that do not have these built-in downsides; or at the minimum, have different tradeoffs.

The Peer Computing model outlined here is one such architecture that is used widely, such as in the dozens of apps constituting the Fediverse. It needs a name, so an architectural-level discussion of pros and cons can be had, irrespective of particular protocols such as ActivityPub, Matrix or SMTP. We propose Peer Computing.

Notes

Who wrote this?

Johannes Ernst, for use with Dazzle, UBOS, in the Fediverse Developer Network and for software such as Nextcloud, Mastodon and ever-more apps that use the same computing pattern.

Feedback? Ping me on the Fediverse at @j12t@social.coop.

Supporters

Ideas for improvement? Want to add yourself as supporter?

File an issue or merge request at gitlab.com/j12t/peercomputing.org.