architect-handbook

Software Architect Handbook

View on GitHub

Microservices Concerns

Configuration Management

Configuration needs to be externalized from the code and be retrievable via a simple service call.

Service Discovery

Maintain a list of servcice instances that are available for work within a microservice domain.

Load Balancing

The key to scaling a distributed system is being able to run more than one instance of a component. Load has to be then distributed across those instances via a load balancer.

API Gateways

The granularity of APIs provided by microservices is often different than what a service client needs. API Gateways implement facades and provide additional services like proxying, and protocol translation, and other management functions.

Security Concerns

Many security concerns are pushed to the API gateway implementation. With distributed microservice applications, it makes sense to not reinvent the security wheel and allow for policy definition and implementation in components that are shared by all services.

Centralized logging

it’s important to have a centralized log gathering and analysis infrastructure to manage a plethora of services.

Centralized Metrics

A centralized area where the health and performance of the individual services and overall system can be monitored is essential.

Distributed Tracing

There’s a need to reconstruct the complex paths that transactions take as they propagate across a distributed system.

Event Streaming

Event streaming is the practice of capturing data in real-time from event sources (i.e, databases, sensors, mobile devices, cloud services etc) in the form of stream of events; storing these event streams durably for later retrieval; manipulating, processing, and reacting to the event streams in real-time as well as retrospectively; and routing the event streams to different destination technologies as needed.

Resilience and Fault Tolerance

Distributed systems must be capable of auto-routing around failures, and be capable of routing requests to the service instance that will provide an optimum response.

Autoscaling and Self-healing

Distributed systems respond to higher load by scaling horizontally: the platform must detect and auto-respond to such conditions. Furthermore, the system needs to detect failures and attempt auto-restarts without operator input.

Packaging, Deployment and Scheduling

Large-scale systems require robust package management, and deployment systems to manage rolling or blue-green deployments, and rollbacks if necessary. A scheduler helps determine which particular execution node a new set of services can be deployed to based on current conditions.

Job Management

How to handle scheduled computations disconnected from any individual user requests.

Singleton Application

Limit a specific service to run as the only instance of that service within the entire system.