System Design

From NovaOrdis Knowledge Base
Revision as of 00:19, 7 November 2021 by Ovidiu (talk | contribs) (→‎Aims)
Jump to navigation Jump to search

External

Internal

Overview

The goals of system design is to build software systems that first and foremost are correct, in that the system correctly implements the functions it was built to implement. Additionally, they should aim to maximize reliability, scalability and maintainability.

A Typical System

Many web and mobile applications in use today are conceptually similar to the generic system described below. The functionality differs, as well as reliability, scalability and maintainability requirements, but most systems share at least several of the elements described here. They have mobile and browser clients, communicate with the backend via HTTP or WebSocket protocols, include a business logic layer deployed as monoliths or microservices, in most cases in containers managed by a container orchestration system like Kubernetes, persist their data in databases, either relational or NoSQL, use caches to speed up reads, and rely on message brokers or streaming systems for asynchronous processing and better decoupling. Depending on the actual functionality of the system, these bits and pieces can be implemented as different products and connected in all kind of ways.

ATypicalSystem.png

Aims

Correctness. Ensured via testing.

Reliability. Discuss difference between reliability and high availability.

Scalability

Maintainability

Operations

Logs

Monitoring

Deployment

TODO

Subjects

Organizatorium

  • Capacity estimation