1. Systems

The book starts out simple, laying out the categories of issues that can arise with large systems and coping mechanisms.

Categories of issues in systems

Emergent Properties

A

While every node in the system behaves correctly, the assembled system does something nobody specified.

  • Phantom traffic jams
  • Runaway feedback

Propagation of effects

alt text

The disturbance travels along whatever connections exist, reaching things that the original change had no business affecting.

The only node that is spared is the node that is not connected in any way to the source. Fewer connections means fewer paths for the effects to ride along.

Incommensurate scaling

alt text

Different parts of the system grow at different rates.

  • At a small scale, the curves are nearly the same, so the design works.
  • By the time the gap is obvious, already locked in to the design.

Trade-offs (waterbed effect)

alt text

  • Make it faster and it usually gets more complex. Make it more general, and it usually gets slower.
  • Make it more secure and it becomes less user-friendly.

Coping mechanisms

Modularity

alt text

Instead of connecting the nodes, group nodes into modules and connect the modules. Most connections live within a single module, with only a few crossing boundaries.

Abstraction

alt text

Modularity asks where to draw the lines; abstraction asks what to expose across them.

The sqrt() function promises to the caller that it takes $x$ and returns $\sqrt{x}$. This is independent of how the answer actually gets computed.

This makes it easy to change the implementation within affecting any logic for the caller.

Layering

alt text

Each layer only talks to its neighbors. This prevents changes from any layer from rippling everywhere.

Hierarchy

alt text

The module designer can focus just on interactions with the interfaces of other members of its immediate subsystem, instead of having to think about interactions with all other modules.

Challenges with computer systems

These techniques are not sufficient for computer systems for two key fundamental reasons.

  • Computer systems have no bounds on composition. Unlike physical systems that are bound by the laws of physics, computer systems are only limited by the designer’s ability to understand the system.
  • Technology changes at an exponential rate. Complex systems can take many years to build and the requirements can change drastically over this period (scaling or users). This means that the assumptions made when designing the original system may not hold.

References

  • Saltzer, Jerome H., and M. Frans Kaashoek. Principles of Computer System Design: An Introduction. Morgan Kaufmann (Elsevier), 2009



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • MongoDB Deep Dive
  • Skip Lists
  • HTTP
  • 5. Replication
  • 4. Encoding and Evolution