Switching to microservices requires a management platform
Many companies have begun moving off third-party monolithic products to new microservices architectures based on open source and cloud-native technologies. These architectures provide higher scalability and greater customization than the monolithic platforms. Continuous delivery, quicker updates, and easier testing are also among the improvements gained by moving to microservices.
However, building a new architecture brings new levels of complexity, requiring the orchestration of hundreds of small services and components. To reap the benefits of microservices without suffering from over-complexity, microservices architecture should be supported by a platform. Without one, there will be a loss of efficiency and stability, leading to high maintenance and development costs. The platform supports microservices development and management through all stages of the process, from build to production.
A long history working with microservices
We have built blueprints for continuous delivery, deployment and run-time service management since 2008. Initially, we focused on building traditional deployment automation, and working with configuration management tools. While we became experts in these tools and techniques, we saw problems with sub-optimal application-to-infrastructure interfaces, as well as difficulties with achieving efficient configuration management. When public cloud became mature, we switched to immutable infrastructure and modern configuration management techniques that rely on the self-sufficiency of deployed systems, and which require little to no manual intervention.
We have helped clients of all sizes in a variety of different industries replatform to microservices and the cloud, and currently have hundreds of architects and engineers working on developing, deploying, managing and supporting container or VM-based microservices platforms for them. We have published a book based on our experiences that describes how to build continuous delivery and microservices platforms in the modern ecosystem with cloud, open source and automation tools.
Building a microservices platform
Designing a high level architecture
Choosing a technology stack
A technology stack is determined by an application packaging mechanism, which has two options that allow it to achieve an immutable infrastructure:
- Containers, in which Kubernetes is the standard management technology choice. Kubernetes comes in different offerings, including native cloud-managed, in-house deployed or with add-ons such as OpenShift. Less standard choices may include Docker Swarm, Mesos Marathon or proprietary cloud offerings.
- VM images, in which the Hashicorp stack is the best technology option.
In both cases, additional technologies are required to implement a service mesh (Istio, Envoy, Linkerd), feature flags management and the continuous delivery process.
Developing with continuous integration
Since the microservices platform design starts with application packaging options, it naturally integrates with a continuous delivery platform and pipeline.
Technologies like Spinnaker may further improve environment management and simplify the process.
Key features

Code packaging

Artifact repository

Automatic deployment

Service registry and discovery

Service mesh

Feature flag management

Run-time lifecycle management

Logging and monitoring
High level architecture

Technology stack
Engagement model
When working with a new client who is beginning their journey towards building a microservices architecture that runs on the cloud, we start by performing a hands-on analysis of the application portfolio and the client's transformation plan. Such analysis and architecture consulting work typically takes anywhere from two to six weeks, and leads to the creation of our recommended architecture, design and implementation plan. After that, we get to the implementation phase, typically starting the migration with several applications which we qualify as the best candidates for transformation based on our expertise and the evaluation criteria.
When working with clients who have already begun development, we may jump into the implementation or consulting stage depending on the needs of the client. In this case, our architects and engineers will start assisting the development, operations or release engineering teams to build and improve the platform according to their needs. Some of the common improvement tasks include stability improvement, migration to containers and Kubernetes, implementation of service mesh, or introduction of chaos engineering.