CLOUD CONCEPT

Microservices and component delivery

Microservices and component delivery is an approach to building applications as loosely coupled services that can be developed, tested, deployed, and scaled independently.

Cloud Concepts Hub →

What is Microservices and component delivery

Microservices divide an application into services organized around business capabilities, while component delivery provides the processes and automation needed to release those services safely. This approach supports independent team ownership and targeted scaling, but introduces distributed-system complexity and requires disciplined interface design, observability, and deployment practices.

Microservices and component delivery connects application architecture with release engineering. Instead of packaging an entire application into one deployment unit, teams build services with explicit responsibilities and stable interfaces. A retail application might separate catalog browsing, inventory reservations, ordering, and notifications. The objective is not to make every service as small as possible; it is to create boundaries that allow useful changes without requiring coordinated releases across the whole application.

Service boundaries should usually follow business capabilities rather than technical layers. Splitting an application into a presentation service, a shared business-logic service, and a database-access service can still require all components to change together. A more independent ordering service owns its ordering rules and controls access to its data. Other services interact through APIs or published events rather than directly modifying its tables. Separate physical database servers are not mandatory, but clear data ownership and access boundaries are important.

In the cloud, services can run in containers, virtual machines, or function-based runtimes. An orchestration platform maintains the desired number of instances, replaces unhealthy workloads, and supports deployment updates. API gateways can expose public endpoints and enforce request policies, while queues and event brokers decouple producers from consumers. For example, an ordering service can publish an order-confirmed event so that notification processing does not need to complete before the customer receives an order confirmation.

Component delivery typically gives each service a release path that builds a versioned artifact, runs automated checks, and deploys that artifact through environments. A container image can be stored in a registry and promoted by immutable digest rather than rebuilt separately for production. Pipelines commonly include unit tests, interface compatibility checks, integration tests, dependency scanning, and deployment health checks. Independent delivery does not require a separate source repository for every service; a shared repository can still support selective builds and deployments.

Safe releases require compatibility between versions that may run simultaneously. Adding an optional API field is generally easier to roll out than renaming a required field. Database changes often use an expand-and-contract sequence: introduce a compatible schema, migrate application behavior and data, and remove obsolete structures only after older versions no longer depend on them. Canary or blue-green deployments can limit exposure to a faulty release, but reverting application code does not automatically reverse database changes or external side effects.

Network communication creates failure modes that do not exist within a single process. Services need timeouts, bounded retries with backoff, and appropriate failure isolation. Retried requests and redelivered messages can repeat work, so payment submission or inventory reservation should use idempotency controls. Cross-service workflows may require eventual consistency and compensating actions rather than a single database transaction. These choices must match business requirements; asynchronous communication does not eliminate the need to reason about ordering, failures, and duplicate processing.

The trade-off is greater operational overhead. Teams must manage service identities, authorization, secrets, telemetry, interface evolution, and dependency failures across many deployments. Correlated logs, metrics, and distributed traces help diagnose a checkout request that crosses several services. Containers alone do not create microservices, and independent scaling does not guarantee lower cost. For a small team or a tightly coupled domain, a well-structured modular monolith may be simpler and more reliable. Microservices are most useful when independent ownership, release cadence, or scaling needs justify the additional complexity.

Key aspects of Microservices and component delivery

Effective microservices combine business-aligned boundaries, independent delivery, compatible contracts, resilient communication, targeted scaling, and observable releases.

Business-aligned service boundaries

Organize services around cohesive business capabilities with explicit ownership. A useful boundary lets a team change business behavior without routinely coordinating deployments with several other teams.

Independent, automated delivery

Build, test, and release each service through an automated pipeline using versioned artifacts. Promote the same artifact across environments and avoid pipelines that unnecessarily redeploy unrelated services.

Stable contracts and controlled data access

Expose documented APIs or event schemas and keep changes compatible with existing consumers. Each service controls its data, reducing coupling caused by shared tables and undocumented cross-service queries.

Resilient distributed communication

Use timeouts, bounded retries, idempotency, and failure isolation for remote calls and message processing. Choose synchronous or asynchronous interactions according to latency, consistency, and recovery requirements.

Selective scaling and fault containment

Scale busy services independently and use resource limits and isolation boundaries to reduce the impact of failures. Validate downstream capacity because adding application instances can overload shared dependencies.

Observable and reversible releases

Track service health and user-facing outcomes with metrics, logs, and traces during deployment. Use progressive rollout and rollback where appropriate, while handling schema migrations and irreversible side effects separately.

Cloud services for Microservices and component delivery

A delivery pipeline coordinates checks and deployment actions, while a container registry stores the versioned images that represent each service release. A container orchestration service runs those images and manages service instances independently. An API gateway exposes selected synchronous interfaces, and a managed queue buffers asynchronous work so producers do not depend on immediate consumer availability. Together, these services support separate release cadences and scaling decisions. They still require compatible contracts, least-privilege access, application-level telemetry, and explicit handling of duplicate work and partial failures; platform services do not create sound service boundaries automatically.

AWS CodePipeline image AWS CodePipeline

Orchestrates release stages and integrates with build, test, and deployment tools. Service-specific pipelines or selective execution paths support independent delivery with automated checks and approval gates.

Open AWS CodePipeline →
Amazon API Gateway image Amazon API Gateway

Provides managed API endpoints that route requests to application backends and support controls such as authorization and throttling. It can provide a consistent external interface without requiring clients to know each service's deployment location.

Open Amazon API Gateway →