Service deployment platform

Context

You have applied the [[Microservice architecture]] pattern and architected your system as a set of services. Each service is deployed as a set of service instances for throughput and availability.

Problem

How are services packaged and deployed?

Forces

  • Services are written using a variety of languages, frameworks, and framework versions

  • Each service consists of multiple service instances for throughput and availability

  • Service must be independently deployable and scalable

  • Service instances need to be isolated from one another

  • You need to be able to quickly build and deploy a service

  • You need to be able to constrain the resources (CPU and memory) consumed by a service

  • You need to monitor the behavior of each service instance

  • You want deployment to reliable

  • You must deploy the application as cost-effectively as possible

Solution

Use a deployment platform, which is automated infrastructure for application deployment. It provides a service abstraction, which is a named, set of highly available (e.g. load balanced) service instances.

Examples

  • [[Docker orchestration]] frameworks including [[Docker swarm]] mode and [[Kubernetes]]

  • [[Serverless]] platforms such as [[AWS Lambda]]

  • [[PaaS]] including [[Cloud Foundry]] and [[AWS Elastic Beanstalk]]

  • Some deployment platforms provide a [[Service Registry]] and [[Server-Side discovery]]

  • Internally, a deployment platform might use use containers or virtual machines to deploy a service. Docker orchestration frameworks are, of course, explicitly container-based

Last updated