Live data from Hacker News

Why our team cancelled our move to microservices

steven-lemon182.medium.com

71–80 of 243 posts

Re: Why our team cancelled our move to microservices

#71

There is a big misconception that a monolith has to be fully deployed every time. A well designed monolith can be partially deployed.

Can you say more about that ? I'm a DotNet developer and I don't see how this could be possible without having several applications

Feature flagging comes to mind, just don't expose the pieces that don't work or are in-progress? or .exclude or something.

Re: Why our team cancelled our move to microservices

#72

Microservices shift complexity from code to operations - microservices don't remove complexity - they spread it wider, making the whole more complex.

I agree that microservices shift complexity, but I'm not sure that this inherently results in an overall increase in complexity. For example, using highly automated ops tools like autoscaling and load balancing can enable smooth handling of problems that can be challenging to handle in code.

Re: Why our team cancelled our move to microservices

#73
post #63
post #41

Earlier quoted context omitted.

Doesn't this just mean you picked a bad service boundary? You shouldn't have to join across services, ever. Seems like a straw man.

It will eventually happen even if you manage to create the perfect boundaries, e.g for report & statistics.

You shouldn’t be doing report and statistics on live data, but in a data warehouse.

Re: Why our team cancelled our move to microservices

#74
post #40
post #20

Earlier quoted context omitted.

> Microservices are relatively new and unproven. They are so old, buddy, actually. Splitting monolith into services(not always been micro) is a natural evolution for any software.

It was SOA (Service Oriented Architecture) where you would split them up, that predates Microservices by quite a bit. I remember doing that in the early 2000s. What I think he is saying is that Microservices people pitch their service against monolith as better, but monolith hasn't been in vogue for 20 years. I saw the same tactic with scrum people pitching against waterfall which hadn't been in vogue for quite a whi…

Well, SOA is such a broad term. If you include CORBA, you could say it's terrible. On the other hand, gRPC is a pleasure to work with if you need to deal with different environments.

Re: Why our team cancelled our move to microservices

#75
post #42

Why would you consider microservices if you are only 12 developers?

It can sometimes make sense even that small, like if team has different geographical locations and/or time zones.

And that I think how you should approach micro services, to solve an organizational problem, not use it for solving a technical problem.

Re: Why our team cancelled our move to microservices

#76
Just last week I found an interesting and unexpected (for me) advantage of microservices. We have two monoliths written in different stacks/frameworks, and developed by different departments. Monolith #1 is being split into microservices, we already have around 20 microservices. Monolith #2 kind of lags behind, and there are certain problems that they encountered, which are already solved in one of the microservices split from monolith #1. The solution I came up with is to simply reuse the microservice from monolith #1 in monolith #2 (the service is isolated and self-contained so it doesn't care who uses it). I found it to be a rather elegant and simple solution for cases when you want to reuse an implementation but can't package it into a library because clients have different stacks.

Re: Why our team cancelled our move to microservices

#78
post #58
post #46

Earlier quoted context omitted.

>The golden rule is to never break API backwards compatibility. If you must, create a new version of the API and leave the old version functional It also helps with zero-downtime deployments: 1) spawn a new instance of the service with the new API, side by side with the old one 2) now incoming traffic (which still expects the old API) is routed to the new instance with the new API, and it's OK, because it's backward-…

How can accumulation of versions be prevented? Now the same team has to maintain two products, and the underlying mechanism is still limited by the older version. Anecdotally, a robust backward-compatibility has been seen as a hinderance to e.g. Java's progress (so much that a newer language, Kotlin, was created to break free from that burden).

There isn't really a solution to version bloat aside from good processes and general diligence. There's no easy way to handle that sort of thing, unfortunately.

However, I do think it can be easier to deal with for internal services then for something like Java. When the number of users is in the dozens rather then the millions, it's a lot easier to make sure everyone gets moved over to the new version.

Re: Why our team cancelled our move to microservices

#79

Earlier quoted context omitted.

Examining behavior in the limit (a la physics) is interesting. Imagine a system where every function call goes out to a separate process. Suddenly you have a lot of processes waiting around to be called. Debugging requires special tools. Profiling becomes a nightmare. Even determining if the system is fully running becomes difficult. What have you gained?

> What have you gained? Separation of responsibilities? Easier to analyze because you only have so many inputs and outputs to a simpler system? Debugging something that touches a lot of paths in a monolith can be quite nightmarish as well.

Most comments about this assumes a poorly designed monolith and a well designed set of microservices. A microservices architecture can be a rats nest too.

I guess what it means is that even if you can build a well modularized system, it will only stay well modularized if you use a network call to enforce it. Well, at least for most companies.

Conceptually, there's nothing keeping you from designing your codebase to work as both microservices or direct calls. I've certainly done it before - each service defined a Java interface, and codegen could hook that up as either a direct call or to route over some kind of layer.

Re: Why our team cancelled our move to microservices

#80

The term "Monolith" was devised by people who wanted to brand microservices as newer and superior. It's almost as if in order to succeed these days you need to discredit and disparage your competition rather than simply having a better product, and that's why I don't buy into buzz words at all. If it's not broken, don't fix it... Microservices are relatively new and unproven. The way the world has rushed to dive into…

I don’t even know what anyone means by monolith or micro services.

I’m somewhat sure everyone is somewhere in between depending on who you ask.

Post reply on HN