Live data from Hacker News

Some thoughts on microservices

filipnikolovski.com

111–120 of 139 posts

Re: Some thoughts on microservices

#111
post #109

Earlier quoted context omitted.

> There's nothing about writing software in different languages that necessitates separating functionality with HTTP calls I mean it's only computers and the only limit to what we can make them do is our imagination. In this case though for the sake of argument what options would I have if I, say, needed to let a remote team add some functionality to my, say, Spring backend but they really prefer to write C# and have…

> I'm not sure how I would accomplish this in a monolith. With a library. Depending on what you’re doing (process ran a few times a day?), maybe even spawning a process is enough. > what options would I have if I, say, needed to let a remote team add some functionality to my, say, Spring backend but they really prefer to write C# and have their own CI/CD system. That sounds like you need at most two different service…

> With a library.

I don't know what that library is right now. Meanwhile I could set up the separate repos/microservices by the end of the day.

> That sounds like you need at most two different services, not microservices

It is unfortunate that the "micro" in "microservice" is often misunderstood to expect that these are very small and granular components. In practice by and large it ends up being separate services with separate repo, code review, ownership, deploy or CI/CD etc. pipelines. It doesn't have to mean they are actually very small. I know people like to joke about npm components and the leftpad thing but in my experience microservices have not turned out like that.

Re: Some thoughts on microservices

#112
post #88

Earlier quoted context omitted.

I didn’t read any of that. I read it as more tools in the toolbox.

Without single instance, an in process queue doesn't provide the same kind of functionality that a shared queue does and would probably introduce split brain kind of problems, no?

Right, you’re taking it as a suggestion, as in a positive nudge to single instance monolithism. However, I read it as merely making GP aware of other options that are on the table.

Re: Some thoughts on microservices

#113
Start with a monolith and only break it up if you are actually forced to by the computer (i.e. the process won't fit in ram anymore or eats all the CPU/IO). The second you break up your monolith, you lose its most powerful feature - The direct method invocation. The amount of time I see developers spending on JSON wire protocols, CORS problems, API endpoint designs, et. al. really is starting to concern me. I sometimes wonder if anyone wants to do any actual work or if this is just a big game to some people.

I did the full trip on this microservices rollercoaster. Monolith => uServices => Monolith.

I used to vehemently advocate for using microservices because of how easy it would be to segment all the concerns into happy little buckets individuals could own. We used to sell our product to our customers as having a "microservices oriented architecture" as if that was magically going to solve all of our problems or was otherwise some inherent feature that our customers would be expected to care about. All this stuff really did for us is cause all of our current customers to walk away and force a re-evaluation of our desire to do business in this market. All the fun/shiny technology conversations and ideas instantly evaporated into a cloud of reality.

We are back on the right track. Hardcore monorepo/monolith design zealotry has recovered our ship. We are focused on the business and customers again. The sense of relief as we deprecated our final service-to-service JSON API/controllers was immense. No more checking 10 different piles of logs or pulling out wireshark to figure out what the fuck is happening in-between 2 different code piles at arbitrary versions.

Re: Some thoughts on microservices

#114
post #15

Earlier quoted context omitted.

The whole problem starts with calling them microservices. Just call it a service oriented architecture please. The whole micro thing is already an indication of the kind of trouble you are getting yourself into. More respect to the monolith please.

I'm going to build a lucrative personal brand / consulting business by hyping mesoservices, neither micro nor macro, just right.

Reality and Fiction mingle together...

"Mesoservices: Architecture for optimal trade-off between engineering and operations efficiency"

https://www.codemotion.com/talks/mesoservices-architecture-f...

Re: Some thoughts on microservices

#115

Microservices are not a solution, they're a capability. It's powerful for a team to be able to deploy a tiny service with the absolute minimum amount of explicit plumbing to meet operational requirements. Whether they should break their system up this way is a case by case judgment. Every place I've been, the costs of microservices get overlooked in favor of the illusion of decoupling. Microservices will absolutely m…

> Microservices, as a philosophy, is encoding your org design at the networking layer.

Not always. One of the things where I desperately wish people would adopt the "microservices philosophy" is in applications which provide a scripting language.

For example, if I want to "script" OpenOffice, I am stuck with the exact incarnation of Python shipped with OpenOffice. Nothing newer; nothing older; exactly binary compatible. This is a really irritating limitation.

If, however, they simply provided a "microservice interface" that anyone could talk to rather than just the anointed Python, then you could run your own Python or script using a completely different language.

I'm picking on OpenOffice here, but this is not specific to them. Nobody who has a "scripting extension language" as part of their application has demonstrated anything better.

Re: Some thoughts on microservices

#116

Start with a monolith and only break it up if you are actually forced to by the computer (i.e. the process won't fit in ram anymore or eats all the CPU/IO). The second you break up your monolith, you lose its most powerful feature - The direct method invocation. The amount of time I see developers spending on JSON wire protocols, CORS problems, API endpoint designs, et. al. really is starting to concern me. I sometim…

Here! here!

I'm within spitting distance of the end of a project of collapsing a service-oriented system back into a Majestic Monolith. Every step of the way has reduced the lines of code, fixed bugs, saved money, saved time. It's been such a joy that I'm considering doing only this as a side hustle. "Saving" companies who were sold an over-complicated dream.

Re: Some thoughts on microservices

#117
post #96
post #87

Earlier quoted context omitted.

I'd be more worried with, "do you just have shared infrastructure for all data?" Hearing some places just have one giant database where all teams can add and remove columns is... Kind of scary to me.

> Hearing some places just have one giant database where all teams can add and remove columns is... Kind of scary to me. Are you talking about Bank of America? My impression from the interview was that it is not a free for all but rather all teams are equal but some teams are more "equal" than others (compliance). I still don't get why they need write/execute access. I would be OK with other teams having read access…

Facebook is the one I've heard of.

Re: Some thoughts on microservices

#118
post #86

Earlier quoted context omitted.

It is worth thinking about them before you need them because by the time you gain the skill and infra needed to support them, you’ll have scaled so large that your ability to coordinate and communicate will be overwhelmed.

How many startups out there have run into the problem of "oh no, we got too big too fast"?

A fraction of the ones that are successful.

I suppose what I really mean is: If your leadership subordinates (especially new joiners) are starting to struggle to coordinate, consider the possibility that you might already be at that point yet emotionally attached to the notion of staying small as you double or quadruple in population.

Re: Some thoughts on microservices

#119
post #109

Earlier quoted context omitted.

> I'm not sure how I would accomplish this in a monolith. With a library. Depending on what you’re doing (process ran a few times a day?), maybe even spawning a process is enough. > what options would I have if I, say, needed to let a remote team add some functionality to my, say, Spring backend but they really prefer to write C# and have their own CI/CD system. That sounds like you need at most two different service…

> With a library. I don't know what that library is right now. Meanwhile I could set up the separate repos/microservices by the end of the day. > That sounds like you need at most two different services, not microservices It is unfortunate that the "micro" in "microservice" is often misunderstood to expect that these are very small and granular components. In practice by and large it ends up being separate services w…

> I don't know what that library is right now

Are you serious? In which language do you program that you don't have to use multiple libraries daily? You just talked about NPM.

In your example, the C# could output DLLs that have functions that can be called by the Java code. This can give the same encapsulation you get with your multiple services example, including separate deployments, different repo, different language, etc.

You could also use different processes. Please tell me you know what an executable is...

> Meanwhile I could set up the separate repos/microservices by the end of the day

That's because someone set it up for you, not because it's faster.

In your hypothetical scenario of "I needed to let a remote team add some functionality to my, say, Spring backend but they really prefer to write C# and have their own CI/CD system" you didn't mention that "…but we already have a fast way of setting up micro services".

> It is unfortunate that the "micro" in "microservice" is often misunderstood*

It's not, you're using the term loosely. "Two services" do not make a micro service architecture.

Sorry to be blunt, but I'm getting the feeling you're not talking out of experience, but rather repeating popular talking points.

Re: Some thoughts on microservices

#120
post #116

Start with a monolith and only break it up if you are actually forced to by the computer (i.e. the process won't fit in ram anymore or eats all the CPU/IO). The second you break up your monolith, you lose its most powerful feature - The direct method invocation. The amount of time I see developers spending on JSON wire protocols, CORS problems, API endpoint designs, et. al. really is starting to concern me. I sometim…

Here! here! I'm within spitting distance of the end of a project of collapsing a service-oriented system back into a Majestic Monolith. Every step of the way has reduced the lines of code, fixed bugs, saved money, saved time. It's been such a joy that I'm considering doing only this as a side hustle. "Saving" companies who were sold an over-complicated dream.

> It's been such a joy that I'm considering doing only this as a side hustle. "Saving" companies who were sold an over-complicated dream.

This has crossed my mind a lot lately. I think we are looking directly at one of the largest emerging markets in technology. What do we think the TAM is going to be for undoing webscale monstrosities by 2025? Not every business will fail due to their poor technology choices and will be able to pay some serious consulting fees...

I've practically got a system for doing this now. It mostly starts with domain modeling in excel and all the business stakeholders being in the loop at the same time until everyone agrees. I find if you get this part right it doesn't really matter if you use C# vs python, or AWS vs on-prem to build the actual product. Hard to get opinionated and locked in when your deploy to prod involves a 100 meg zip file and 3 lines of powershell ran against a single box.

Post reply on HN