System Design

1. Abstract

This node cluster references all the technicalities that go into designing a system - this should as a good rounded tour of the practical aspects of computer science.

An important aspect of system design is to be able to handle all the users that interact with the system. This usually calls for Distributed Systems

System design is a problem oriented and not just limited to generical theoretical design patterns.

2. Major Aspects

2.1. Scalability

  • the ability of a system to continue to behave as expected in the face of significant upward or downward changes in demand.

2.1.1. Types

  1. Vertical Scaling
    • altering the hardware resources already allocated to a server.
    • straightforward but limited extensibility
  2. Horizontal Scaling
    • altering the number of servers serving the application
    • more complex but greater flexibility

2.1.2. Enablement

  • have services with their state management decoupled from the act of serving.
  • see Distributed Compute i.e. distributing state between service replicas.

2.2. Loose Coupling

  • the system property and design strategy in which a system's components have minimal knowledge of any other components.
  • internal changes to one don't demand changes in the other
  • web servers and web browsers for instance are loosely coupled given both have certain guarantees.

2.2.1. Enablement

  • Having a Protocol allows standardizing the input expectations and output assurances of a component.
  • These may be addressed as Interfaces as well.

2.3. Resilience

  • see fault tolerence
  • the measure of how well a system withstands and recovers from errors and faults

2.4. Manageability

  • the ease with which a system's behaviour can be modified to keep it secure, running smoothly, and compliant with changing requirements.

2.5. Observability

  • the measure of how well a system's internal states can be inferred from knowledge of its external outputs.

3. Quick Links

Tags::cs: