What is a system
? A system fulfils a business need. A system
is made up of:
Users needn’t know about these components, only the system
’s ingress
. Users interact with your system via its ingress
.
Typical ingress
mechanisms are:
Users can be humans via a web browser or other systems
.
What is system architecture? Simply put, architecture consists of everything that is hard to change after the fact. Your system architecture impacts:
Our recommended approach is to define Service Level Objectives (SLOs) for these aspects of your system even if you don’t a Service Level Agreement (SLA) with your user.
Some important parts of system architecture that constrain the above are:
A user interacts with a system
via its ingress
. There are different tradeoffs for ingress
vs communication within a system.
For ingress
typical concerns are:
For externally accessible systems the most common ingress technology is HTTP. There are many benefits to sticking with HTTP:
For internal systems other ingress technologies can be used that are typical for inter process communication with in a system:
The first major decision for interprocess communication is whether it is asynchronous or synchronous. Queues such as Kafka allow asynchronous communication allowing components to be fully shutdown at the expense of two additional complexities:
Synchronous communication means that the downstream component needs to be up at the time of request. It allows easier request/reply communication. Synchronous communication is susceptible to cascading failures, where a downstream failure causes failures in all upstream components.
Database access patterns come in three main categories:
CRUD often degrades into arbitrary database access. Event sourcing opens up possibilities such as rebuilding different views on the data as all historical events are stored but introduces complexity such as:
Each process in a system can use different database access patterns. Some organisations will give full autonomy to development teams to decide on internal data access patterns whereas others will want to standardise.
Nothing affects a system more than the selected persistence technology. It puts upper bounds on:
In addition, it will dictate the costs of a system. Using Google Spanner may provide your system with excellent latency and multi region support but it comes at a huge cost.