An Overview of Delivering Microservices Based Applications
|Andrew Phillips in Enterprise Friday, March 20, 2015|
Big apps may still have their place, but the software development landscape is shifting, presenting new opportunities and challenges to overcome. As the Internet of Things gathers pace, a service-orientated architecture (SOA) or microservices approach is starting to make sense for many organizations. Microservices is a software architecture that favors small, decoupled, independent processes communicating through language-agnostic APIs.
Microservices offer a number of potential advantages including scalability, agility, and greater resilience. You can find a great overview of the concept at Martin Fowler's website. The attraction of more flexibility is obviously alluring, but we're not here today to explain how to create a microservices architecture, so much as to explore how you might deal with some of the practical problems their delivery presents.
Changing Deployment Needs
How do you cope with a trend that's moving away from monolithic applications, or a small number of enormous and complicated apps, that require tens or even hundreds of steps to deploy, towards a much larger set of individually simpler components?
Workflow tools are poorly suited to this challenge because they're designed to put together a complicated set of steps for one large deployment. It's not that the microservices environment eliminates complexity, but it shifts your requirements from tools that are optimized to handle big complicated deployments, to tools that can deal with a large number of smaller, interdependent deployments gracefully.
It's no good delivering containerized services individually when you need to coordinate multiple services and have everything running for your app to really work. But equally you'll want to have some flexibility on what will be deployed, so one test failure in one service doesn't immediately bring your delivery process to a halt, preventing you from going live.
You need a tool that can handle multiple related deployments simultaneously. A single overview for deployment planning and configuration, that offers the speed and efficiency benefits we've grown accustomed to with Continuous Delivery pipelines.
Dealing with Dependencies
We have to bear in mind that, in a microservices environment, individual deployments will have numerous dependencies. How do we keep track of the relationships between our services? We have to be sure of environment and version compatibility. We need to consider what running services will be impacted. We have to test the new versions of our components together.
Pipeline co-ordination becomes a much bigger challenge in this scenario. You need to handle a network of pipelines that can share information for a seamless path to production. You need simple insight into the bigger picture, and the ability to modify or remove individual services from a pipeline run, with dependencies taken care of automatically, as required.
There will still be plenty of manual tasks to handle as you approach production, so it's very important that your tooling can support that, but automation where appropriate will always reduce error and increase efficiency.
Staying Technology Agnostic
There's a great deal of buzz around container technologies, particularly Docker, right now. Docker will be a great solution for many situations, but who knows what might be around the corner? You can implement microservices with other sets of technologies too.
It makes sense to ensure that your tooling and your process remains the same regardless of the underlying implementation technologies. Why tie yourself down when the space is still evolving so quickly? Keep your options open until you can settle on a mature solution that works for you. Different divisions or teams within your organization will find value in disparate technologies and it may prove worthwhile catering for them.
Rising to the Challenge
Visualizing, predicting and executing changes to a complex graph of interdependent applications is the major challenge we perceive at the heart of microservices delivery. In order to realize the potential benefits, the practicalities have to be hammered out, and we have to move beyond the workflow approach to application deployment. This will require a new delivery model and a solid release strategy.
In looking at how to deliver microservices-based applications to customers effectively, there is clearly a need for tooling that can handle multiple deployments and their dependencies. Mastering pipeline co-ordination and enabling concise end user management with clarity should be our focus.
Read more: http://xebialabs.com/
This content is made possible by a guest author, or sponsor; it is not written by and does not necessarily reflect the views of App Developer Magazine's editorial staff.