Services and other components of a software solution are packaged together in a monolithic deployment bundle. Deploying a new version of a service that is part of the solution can require redeploying the entire solution. Also, there is less flexibility to configure service-specific scalability, availability, persistence, monitoring, and security logic.
Each service is treated as an independent product and is deployed is an isolated package that contributes to service autonomy.
Services are packaged and deployed in a highly autonomous environment that may utilize containerization technology. Packaging and deployment of services are typically highly automated. Services are commonly designed for use with HTTP/REST and to support asynchronous inter-service communication.
The microservice and a redundant implementation of the utility service it is composing are grouped in the same deployment bundle and located on a dedicated virtual server.
A single pod deployed on a virtual machine allows the hosted services to share the same IP address. The pod can also be deployed directly on a physical server.
This pattern is applied using a container engine, as explained in the complete pattern description.