This post was originally published here.
You would think the world is falling apart; or rather it seems that way, and I’m only really talking about the world of software. I’ll leave politics out of this. It’s not that the world of software is falling apart; or rather our applications are. What once were gleaming monoliths, monuments to our own achievement are now being hacked and splintered into microservices. Rather this is the natural cycle that our industry seems to follow every few decades. The boom and bust, the macro and the micro. Migrating from one paradigm to another in search of performance, flexibility, and control. Docker is driving home the sharding of the monolith, pushing the composable unit of computation. I see this in my role at Kong as a Customer Success Engineer; working with people who are migrating to, or asking questions about, microservices.
I was a visitor to DockerCon 2018 in San Francisco. Everywhere I turned I was faced with the prospect of the new order, microservice.
Optimize for the micro
The first session I attended was about how to make my Docker images as small as they could be to enable them to be quick across the wire, to make them easy to build on, and flexible to use among different teams. Smaller images allow for quicker deploy times and less complexity during development. It is double important with microservices to be able to quickly spin up new images; to upgrade to a newer versions of a critical app, and migrate traffic between version with zero downtime. Small images help enable microservices in that they allow for faster deployments, and faster development. The message is clear, optimize for size and you optimize for speed.
The new unit of collaboration
In a talk by Gareth Rushgrove he touched on Docker and all the spaces it could still add value, hitting home on the idea of collaboration and sharing. He sees room for Docker to be the unit of composability. Where we used to zip up WordPress and pass it around, we would now share Docker compose files. Configurations for all kinds of applications made up of containers of disparate and smaller apps. One Docker compose file to spin up an application, a database, a caching server, an auth server, a real time logging and monitoring server. A series of blueprints to tie together many smaller services, read to work in unison and deployable with a series of straight forward commands. Docker is enabling the complexity of separation to be distilled into a unit of simplicity.
Docker allows for a buffer layer between small services and complexity. It enables working with separate concerns as a single unit. While still allowing for the single units to change easily when needed. This abstraction, while appearing to add just another layer, allows for separation of concerns letting each service do its job. When they communicate using a common protocol and language it makes it easier to change out parts when needed.
A monolithic transformation
Microservice are not just for greenfield work. There are plenty of old monoliths sitting around, just waiting to refactored into shiny a new collection services, each isolated on their own. In the talk 5 Patterns for Success for Application Transformation I was presented with five strategies to use when splitting a monolith into microservices. How to get get logs out, how to get configuration in, how to check dependencies, how to share services health around the platform, and how to expose metrics for services.
Each topic is important to a smooth running microservices platform. I won’t go into details, but the message was clear; microservices are coming, and doing so in many forms new and old. There is a way forward, where everyone can play. Just remember to ask yourself the five questions you need to know when moving to microservices.
Tie it all together in a mesh
And then there was the talk on service mesh, the information superhighway of any microservice platform. The internal communication conduits that link the services together, that enable quick service discovery and speed to assemble a response to every request. The presenter, Tony Pujals, said routing rules and traffic policies are at the heart of a microservices platform. They enable zero downtime upgrades, logging, distributed tracing, and extensibility. They enable the smooth running of any microservices platform.
The monuments are toppoling, falling into small piles, not of rubble, but services, not of crumbling rock, but of composible resources; the monoliths are being chipped away into microservices, and Docker is driving the boat.