News for hackers. Stuff that matters.
Re:I've been merging microservices back into the monolith by humanrebar on Monday December 21, 2020 @04:51PM (#25500052)
> ...microservices are a technical tool for solving a people and organizational problem

They're also available to solve technical problems. For instance, it's hard to run some python3.5 and some python3.9 in a python monolith. A monolith must choose one python version and cut over en masse at some point. Microservices allow more gradual adoption (in production, not just in test suites!) of low level technology changes.

Re:I've been merging microservices back into the monolith by JamesBarney on Tuesday December 22, 2020 @03:18AM (#25504130)
Solving the problem of needing to run two different technology stacks by running two different technology stacks is decades older than the concept of micro services.

I'm a huge monolith proponent. But that doesn't mean I think every application should be one service. I just believe you shouldn't create a second service until you have a good reason to like "we need to run on two different tech stacks", or "our team is getting hard to manage let's split it into two teams that work on 2 services".

Re:I've been merging microservices back into the monolith by humanrebar on Tuesday December 22, 2020 @08:39AM (#25506101)
Problems are typically older than solutions, yes.

And it's simple to concede that monoliths need to be split sometimes. It's much harder in practice to do so. Most monoliths do not have standards, let alone enforcement mechanisms, to ensure that the design of the monoliths leave open splitting later. The things that can make that process difficult (or impossible) are many and subtle, such as global state, in process locks, interpreter protected consistency guarantees, disregard for ABI implications, etc. Having different processes (in production!) does guarantee that a snarl of those problems will not prevent splitting things up later.

Re:I've been merging microservices back into the monolith by JamesBarney on Saturday December 26, 2020 @01:24PM (#25545285)
> such as global state, in process locks, interpreter protected consistency guarantees,

If you need to share state or you need consistency/locking/transactions across bounded contexts on one service it's trivial to implement. But this can be incredibly difficult to do correctly across multiple servers. No one has implemented a multi-phase commit over multiple services and said "dang that was easy" afterwards.

Re:I've been merging microservices back into the monolith by hinkley on Tuesday December 22, 2020 @01:19AM (#25503509)
They're the cure and the disease.

Without a way to keep the system heterogeneous, people have to accept that they are on the same upgrade treadmill as the rest of the people in the organization, which means they have to constantly invest time and energy into keeping up with things.

Containers or microservices mean that the upgrade happens fifteen times, not once, and each group has their own little passion play about why they should do it later instead of now. And in the time it takes to argue about 15 upgrades, 2 more versions have come out.

Re:I've been merging microservices back into the monolith by still_grokking on Tuesday December 22, 2020 @06:07AM (#25505075)
This is the same issue as with static linking. This debate is quite old and was once "decided" already in favor of dynamic linking...

Using dynamically linked libraries enforces to upgrade all dependencies in lock-step. But you need to fix bugs or security issues only once for your whole software distribution.

Re:I've been merging microservices back into the monolith by danielheath on Monday December 21, 2020 @05:01PM (#25500140)
Right, but you can also eg run both versions of python on different machines and switch between them at the load balancer layer. That also lets you eg quickly roll back the upgrade from a single area.

You can do all these things either way. The question is which way suits your tools and organisational structure.

Re:I've been merging microservices back into the monolith by humanrebar on Monday December 21, 2020 @05:57PM (#25500708)
But if you have a lot of migration to do, you're keeping compatibility across the whole stack that entire time. If you have more atomic processes, the trivial ones get migrated trivially and aren't forced to carry technical debt for extended periods of time.

And there are worse scenarios than python upgrades. What happens if your processor or your OS reaches end of life? Do you keep running the whole stack on Windows XP without security patches until the last bit is ready?

Re:I've been merging microservices back into the monolith by nicoburns on Monday December 21, 2020 @06:05PM (#25500783)
Hopefully you fix compatibility with newer versions of windows years before XP goes end of life. A lot of people seem to have created these problems for themselves by buying into proprietary platforms that then get yanked from underneath them. You can generally choose stacks that don't have this problem (or not to nearly the same degree).
Re:I've been merging microservices back into the monolith by danielheath on Monday December 21, 2020 @06:04PM (#25500775)
If some parts are running xp exposed and unpatched, your organisation needs to fix that before tackling application architecture. The question doesn’t make sense; I might as well ask which galaxy I should colonise.

No technique or tool will fix your organisation.

Re:I've been merging microservices back into the monolith by rualca on Monday December 21, 2020 @05:41PM (#25500549)
> Right, but you can also eg run both versions of python on different machines and switch between them at the load balancer layer.

That sounds to me like you are complementing the downsides of running a monolith with the downsides of operating a distributed system, without any noticeable upside.

Re:I've been merging microservices back into the monolith by danielheath on Monday December 21, 2020 @06:01PM (#25500748)
I should clarify; that technique doesn’t work if there are calls between systems on different versions unless they are tested on both.

I wouldn’t run a system where the two servers call one another.

This is a technique for reducing risk via toggles at the load balancer. The reduction is achieved by making it possible to deploy smaller changes to users, and by reducing the latency of rollback.

These are only useful if you have the ability to introspect the system state in production and confirm whether a new version is working correctly.

Re:I've been merging microservices back into the monolith by rualca on Tuesday December 22, 2020 @03:31AM (#25504214)
I still fail to see the point of your approach.

It sounds like you're referring to blue/green deployments without using it's name, for some reason, and while failing to present any case of why a monolith provides an advantage. You're just showing downsides without any upside as a tradeoff.

I mean, with microservices you can also do blue/green deployments, and they are not all-in like monoliths. Each deployment only covers a subset of features that can gradually be rolled in and out with the only risk of causing partial failures.

Re:I've been merging microservices back into the monolith by mejutoco on Monday December 21, 2020 @05:17PM (#25500280)
It is possible, and easy, to have two virtual environments with a different python version in the same project. I am doing this right now with a long-lived project, where a deploy script uses python 2 and everything else python 3.
Re:I've been merging microservices back into the monolith by humanrebar on Monday December 21, 2020 @05:54PM (#25500677)
Only in different processes.
Re:I've been merging microservices back into the monolith by NicoJuicy on Monday December 21, 2020 @06:33PM (#25501051)
That's not a big problem in a small org/app