There's been a lot of buzz in the cloud market recently around microservices, containers and DevOps. While organizations...
can benefit from these three technologies -- especially if they use microservices and containers to reinforce a DevOps environment -- it's important to understand how they work together first, along with their respective drawbacks and strengths.
"For some [people], containers or microservices is DevOps," said Chris Riley, DevOps analyst at Fixate IO, a DevOps-focused content marketing specialist based in Livermore, Calif.
Containers play a key role in a DevOps environment because they support full stack deployments. "[Microservices and containers] introduce a lot of challenges, but I see containers squeezing their way into the core definition of what DevOps is in a few years," Riley said.
Meanwhile, microservices are changing not only how organizations release new applications, but application architectures, as well. Microservices are essentially a design pattern, Riley said. "[They] support DevOps, but also the Agile [development] idea of keeping things very small and iterative," he said.
Using microservices and containers to support a DevOps environment
With faster routes to market and broader distribution channels, applications are offering enterprises a new source of revenue, said Susan Wu, director of technical marketing at Midokura, a San Francisco-based software network virtualization company. This is driving software development approaches such as DevOps, which provide the agility enterprises need to deliver new services faster than their competition.
Susan Wudirector of technical marketing, Midokura
Because DevOps approaches span the entire delivery pipeline, they can increase deployment frequency and lead to faster time-to-market for products. Organizations that use DevOps often see lower failure rates of new releases, shortened lead time between fixes and faster mean time to recovery, Wu said. But while the benefits of DevOps are obvious, the intersection between using microservices and containers to support a DevOps environment is just starting to become clear.
There are two key aspects of microservices. One is packaging and deploying applications so they are portable across cloud providers, Wu said. The other is carving up the application into loosely coupled, single-function components that use REST for communication.
As for containers, organizations use them to package and deploy monolithic and microservices-based applications. One of the reasons developers use Docker, for example, is because it offers a simple way to package the code and push it to the release pipeline, which streamlines the DevOps workflow, Wu said. In general, DevOps represents more of a cultural shift for developers than a technological one, she added. With traditional, monolithic applications, there is a steep learning curve for developers to become familiar with a particular code base. In a DevOps environment, there's more flexibility.
"With DevOps and microservices, developer teams can work on the loosely coupled application and choose the technology stack best suited for their requirements," Wu said. "New team members can ramp up more quickly if they only have to become familiar with the service they are working on."
Another benefit of using containers and microservices in a DevOps environment is that developers can independently deploy each service, which helps with fault isolation. If a component is problematic in a monolithic application, those issues can bring down the entire system. With containerization and microservices, that's not the case.
Missteps to avoid
Despite the benefits, there are potential issues to avoid when using containers and microservices in a DevOps environment. For example, to use containers and microservices, organizations often need to implement multiple new tools, which can lead to increased complexity. Because microservices and containers are both relatively new concepts, organizations need to evaluate how to achieve maximum value with them -- both for developers and the business.
Containers should be automated, and the state of all containers should be clearly visible. With applications now cut into many microservices, organizations need to carefully manage the dependencies between containers.
Just as organizations have previously adopted application lifecycle management, they should also consider adopting container lifecycle management. Lastly, if a set of containers passes the user acceptance test, organizations need to ensure that exact set of containers goes to production. That's why registry isolation is important; by having an approved single registry, which is rapidly and easily populated by the containers coming from the stage below, it becomes possible to release containers extremely fast. And, after all, the rapid release of quality software is what everybody expects from the DevOps revolution.
Understanding the relationship between DevOps and cloud
Master these DevOps interview questions
When to consider a microservices architecture
Three apps that are great candidates for Docker