We live in the world of Microservices. ‘Monolith to Microservices’ is the phrase that we hear from more than 70% of technology leaders today. The benefits are well documented – increased resilience, improved scalability, faster time to market. Like most transformational trends, implementing microservices poses its own challenges. It is imperative these challenges are well understood or be prepared one of the following – never see the light of day or finish it to only see that many of the foreseen benefits are not achieved.
Here are some of the top challenges that most organizations face in their microservices journey.
As the number of microservices increases, managing them gets more challenging. It is important that the management aspects are planned before or while they are being built. While the modularity helps, things can very quickly get out of hand if not managed well. Many engineering leaders have stated, the mismanagement of these services to be as much a problem as those faced during initial stages of transformation from monolith applications.
Developing microservices management tooling on your own, although a valid option, can be a complex and cumbersome proposition. We recommend looking to acquire a platform whose capabilities include microservices management.
The traditional forms of monitoring and diagnostics will not align well with microservices since you have multiple services making up the same functionality supported with a single application previously. When a problem arises in the application, finding the root cause can be challenging if you do not have a means of monitoring and tracking the path a specific request took — e.g. how many and which microservices were traversed for a specific request coming from a user interface.
We have seen customers who struggle to analyze the chain of communication across these services and where issues were potentially introduced. This video is a good watch on this topic.
Embracing DevOps Culture:
The separate teams need agility, autonomy and continuous delivery to be able to deliver initial releases and subsequent iterative changes. Lack of the devops culture can bottle up releases, impact the overall time to market and the response to business requests and issues. The devops culture and monitoring have appeared in the top 3 reasons of many surveys with CIOs.
Check this out to know more about Continuous Integration.
It is important that individual services do not bring down the overall system. Fault tolerance at the service level and more importantly at the overall solution level is very critical. Given the complexity of the microservices environment and the complex dependency chains, failure is inevitable. Microservices need to be able to withstand both internal and external failures. Robust resiliency testing is key to successful issue preparedness.
Design with Failure in mind:
While this is counter intuitive to many, expecting failure scenarios and build a robust set of microservices is imperative to a successful implementation. The more failure situations are predicted during design, exception handling mechanisms built and seamless resolution of issues handled the better. This is easier said than done.
Testing is much more complex in a microservices environment owing to the different services, their integration and interdependencies. The team members responsible for quality assurance need to be knowledgeable on the order and channels of communications between services to be able to have full coverage on test cases. The asynchronous aspect of microservices also makes it harder to test in lower environments. The indistinct behaviors from the microservices are harder to predict and validate.
Some more details on testing challenges can be found here. The following post is very insightful on microservices testing – https://bit.ly/2meWzaF.
Dependency management across different services and their functionality is very important and cyclic dependencies can be a headache if not identified and resolved promptly. In a microservice architecture you’re even more vulnerable to errors coming in from dependency issues. Decisions made around upgrades on related services with these dependencies are critical. The following post discusses tracking and controlling dependencies in detail – https://queue.acm.org/detail.cfm?id=3277541.
Some useful questions to get answered in addition to the above challenges are,
- How to allocate resources in a scalable and efficient way?
- How to operate tons of microservice components effectively?
- How to keep track of multiple pipelines of code deployments?
- How to monitor overall system health and identify potential hotspots early on?
- How to track and debug interactions across the whole system?
- How to deal with a lack of standards?
- How to deal with versioning?
- How to ensure that services are still in use especially if the usage pattern isn’t consistent?
- How to ensure the proper level of decoupling and communication between services?
Read the original post on the Kaiburr blog