# Design Goals

## Goal 1: Supporting Resource Sharing

* Make it easy for users (and applications) to **access and share remote resources**.
* E.g., groupware, BitTorrent

## Goal 2: Making Distributed transparent

1. **Access Transparency**
   * Hiding differences in **data representation** and **the way that objects can be accessed**.
2. **Location Transparency**
   * Users cannot tell **where an object is physically located** in the system.
   * E.g., URL
3. **Relocation Transparency**
   * The entire site may have been **moved** from one data center to another, yet users should not notice.
   * E.g., cloud computing
4. **Migration Transparency**
   * Supporting the mobility of processes and resources **initiated by users**, without affecting ongoing communication and operations.
   * E.g., mobile phones, online tracking, teleconference
5. **Replication Transparency**
   * Hiding the fact that **several copies of a resource exist**, or that several processes are operating in some form of lockstep mode so that one can take over when another fails.
6. **Concurrency Transparency**
   * Each user does not notice that **the other is making use of the same resource**.
7. **Failure Transparency**
   * A user or application does not notice that some piece of the system **fails** to work properly, and that the system subsequently (and automaticall) **recovers** from that failure.

## Goal 3: Being Open

* An **open distributed system** is essentially a system that offers components that can easily be used by, or integrated into other system.
  * Components should adhere to standard rules that describe the syntax and semantics of what those components have to offer
  * Should be easy to configure the system out of different components (possibly from different developers)
* It is crucial that the system be organized as **a collection of relatively small and easily replaceable or adaptable components**.
  * Monolithic systems tend to be closed instead of open
* **Separating policy from mechanism**
  * E.g., a web browser provides facilities for only storing documents and allows users to decide which documents are stored and for how long

## Goal 4: Being Scalable

1. **Size Scalability**
   * We can easily add more users and resources to the system without any noticeable loss of performance.
2. **Geographical Scalability**
   * The users and resources may lie far apart, but the fact that communication delays may be significant is hardly noticed.
3. **Administrative Scalability**
   * Can still be easily managed even if it spans many independent administrative organizations.
