Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Sure you can, and then you have a team that introduced a bug in common library that caused 100% CPU consumption on all cores, and tests did not caught it so somehow got into production.

In the monorepo world, your whole system is broken, it is all hands on board to try to fix this, everyone is stressed out.

In the microservice world, you have only one microservice which went down, so most teams don't have to worry.. in the worst case, they'll say: "Sorry, but we depend on service X and they are down.. blame them, nothing we can do". Sure, that team which introduced the bug is stressed, but the average company stress is much lower.

Having a successful monorepo requires organized, cohesive team with good communications -- or at least a team with a highly experienced people with veto power (this is the Linux kernel model). Unfortunately, a lot of real-life businesses do not have it.



> In the microservice world, you have only one microservice which went down, so most teams don't have to worry..

My experience has been that one service going down (or even running slowly) can lead to cascading failures where identifying the root cause is a slow painful process. I know that in a well designed system that doesn't happen, but that's the nature of all bugs, isn't it?


Well yes, you still need monitoring to be able to tell that the failure is external, but the key idea is that each team can do it separately, without having to get everyone's buy-in, or instrumenting every call in the system.

For example, we've had a batch processing system, with pretty relaxed latency requirements, and at some point we were asked to integrate with (internal) service X. The problem is, service X which would go down periodically. The solution was pretty simple: a simple centralized error logging service we already had, some asserts on results, and timeout on all HTTP calls. This works very well, for us at least. The service X still goes down every once in a while, but we can always detect that and explain to our (internal) customers that it is not our fault the system is down. Our customers were the ones who selected service X in the first place, so they are pretty understanding.

Is it a desirable situation to be in? Nope, in the ideal case, someone would go to team behind service X and help them to make service X reliable, with proactive monitoring, good practices, more staffing, etc... But I work are in the big org, and each team has its own budget, management and priorities. So the microservices approach is the best we can do to still get the work done under such conditions.


> In the monorepo world, your whole system is broken, it is all hands on board to try to fix this, everyone is stressed out.

No, not at all. And the kernel is a single repo even.

> In the microservice world, you have only one microservice which went down, so most teams don't have to worry.... blame them, nothing we can do

Well how is that better than just switching the dependency back to last known version and ship instead being dependent on a whole different team just to get dependencies fixed _and_ running.

> Unfortunately, a lot of real-life businesses do not have it.

That may be true, however benefit of those properties are in different kind of development projects, and this is not the question of whether monolith or microservices IMHO. Also not mono repo or non-source binary distribution.


And microservices do NOT require an organized, cohesive team with good communication?

If anything, there is MORE communication.

And how many teams who do distributed systems really know what will happen if a critical service goes down? The system is down - same effect.


The communication is in terms of well defined and documented APIs. Which having micro service boundary strongly enforces.

> The system is down - same effect.

Yes if it's a service many other services depends on, but not so much if it's near the leaves of the service dependency tree. In which case the system may still be up with reduced functionality.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: