Skip to content

Instantly share code, notes, and snippets.

@joram
Last active December 8, 2021 23:40
Show Gist options
  • Save joram/48aaa2f802c4461766e86625c332fcd7 to your computer and use it in GitHub Desktop.
Save joram/48aaa2f802c4461766e86625c332fcd7 to your computer and use it in GitHub Desktop.
An opinionated check list for what makes a good service/system

A good distributed system is...

Scaling

Horizontally

Instead of giving it a bigger machine to make it handle more load (vertically scaling), if we could give it N more machines to make it handle more load, that would scale further.

Dynamically/Automatically

When the system needs scaled, it should dynamically scale, without developer intervention, within bounds, to be performant within the SLAs of the system.

Secure

  • communications with the service are over ssl, with a not-hand-rolled authentication layer

Reentrant (Atomic)

when computers/workers turn on and off, no work should be lost, and new computers/workers should be able to continue where the old instance left off.

Observable

OpenTracing (or something similar) so we can isolate the logs and metrics to single calls/checks that are flowing through the system between services.

Errors (sentry)

Performance (newrelic)

Logging

json structured logging

Distributed

use opentracing jaegertracing?

Alerting

Hardened Boundaries

Strict Communication mechanism (openapi specs, Protobuf files)

Versioned

Strict definition of resources/models within the service's domain

Dedicated resources (not shared with other systems)

Resources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment