How servers relate to each other

There are two ways of thinking about relationships between servers in a distributed versioning environment; understanding these distinctions is important for using server commands correctly:

  1. From the point of view of intended use
  2. In the context of client-server architecture

From the point of view of intended use, the servers are either personal servers or shared servers:

  • A personal server runs on an individual user’s machine; a shared server is the server in which individual users store their changes so that other users have access to these changes.
  • A personal server is intended to be used by a single user, while a shared server is intended to be used by multiple users concurrently.

In the next diagram, Client 1 and Client 2 are using the shared server concurrently; both are interacting with the shared server via their respective personal servers.

personal-shared

Client 1 interacts with Server 1 — a personal server — which in turn interacts with the shared server. Likewise with Client 2.

In the context of client-server architecture, the servers are either local servers or remote servers:

  • A local server is a server running on the same machine as your client.
  • A remote server is a server your local server is talking to in order to do what it needs to do.

In the next diagram, Client 1 and Server 1 are running on the same machine.

From the point of the view of Client 1, Server 1 is a local server and Server 2 is a remote server.

local-remote

Throughout this guide, the name we use to refer to a server depends on which name makes sense in the context of the discussion.