Challenges Debugging Microservices.
Debugging microservices can be challenging. I am in the process of moving DeployHub Pro to microservices for our SaaS offering and I ran into an interesting dilemma. Microservices are great for having small contained pieces of functionality for scalability and reuse. However, the problem is in having an easy-to-use debug environment in Eclipse.
The Reverse Proxy Problem
Running microservices locally on my single machine requires that each one runs in its own Tomcat instance. And, each Tomcat instance can’t run on the same port so you have a unique port per microservice. Problem solved? Not exactly. My UI needs to access the RESTFul APIs on a single Server Name/Port combo (well known name). Every microservice is on a separate port so reverse proxy is needed like NGINX or HAProxy. Reverse Proxy solves the mapping problem of the well known name but the debugging is still tricky. 20 microservices = 20 tomcat instances running inside of Eclipse. Possible but not optimal. Bring Docker containers into the picture and even more complicated, ie. remote debugging needed.
Solution is to keep all of the microservices as one big application like we use to. The main difference from a Tomcat perspective is the web.xml. I am just going to have my one big web.xml that is used with one instance of Tomcat. Back to the good old days of running and debugging. That problem is solved.
Running Microservices Outside of Eclipse
As part of my build process, I split out the microservices into smaller web.xml files and split out associated source code at that point. We use our build product OpenMake Meister to do the split which involves defining XML files (Target Definition Files) that define the relationship between source, the split out web.xml and the target microservice war file. Running the build gives me all of microservices broken out for their Tomcat deploys and I still have my big single war for a standalone install. Best of both worlds.
- Domain Driven Design Catalog to Tame Microservice Sprawl
- Microservice Architecture and Your Logical Application
- Microservice Configuration Management
- Continuous Deployment and DevOps at Scale
- Register for DeployHub Team
- Reverse Proxy Setup for SaaS Deployments
- DeployHub Team User Guide
- The Hipster Store Tutorial
Ortelius Open Source Project
All Blogs on Kubernetes Microservices
- Microservice Configuration Management Blogs
- What is Configuration Management?
- How to Navigate the Deathstar
- Microservice Continuous Integration – Where’s the Build?
- Working with Helm for your Microservices Releases
- On Versioning your Container Content
- Versioning Lambda Functions
- How to Use a Domain Driven Design
- Versioning Applications
- Why we need Application Packages for CD
- Agentless Deployments with DeployHub’s Engine
- Version Jumps and Tracking
- How are Microservices and Applications Related?
- Migrate to Microservices with a Domain Driven Design
- Docker ‘Run’ May Not Work as You Expect