GET YOUR SHIT TOGETHER, BLUE!
post
You know, this really has me pondering my projects architecture. We have tiers of services.
At the top, we have the UI. Then we have a "consumer" an "orchestra" and a "data" tier.
Data is the tier that exclusively talks to databases. Orchestra talks to the multiple data services. A good chunk of business logic is here. Consumer uses the orchestra and handles UI requests.
All it essentially does is split the monolith into 3 services at minimum. And since it's on the cloud, there's a start up cost where we need to spin up 3 machines instead of whatever you can do with microservices. What benefit do I get?
Director: Blue, I need you to work on a patch for the suspension barrier, it seems to have a memory leak.
Blue: I could if I wasn't allocating so much time to holding together a patchy framework, if I drop it now the whole system will break, what we need to do is re-build the entire thing from scratch in a new entirely blue framework, if we did that we wouldn't have to allocate so many resources to patch work.
Director: that sounds like it would cost money....
Blue: it would now but in the future it would save us so much more.
Director: couldn't you just work harder for less pay?
Blue: no I literally couldn't.
Director: Green seems to be holding it together well.
Blue: that is because Green is at the bottom of the stack, he doesn't have to deal with it he makes it our problem.
Director: I don't know, sounds like a skill issue to me, no vacation time until it's fixed.
Blue: Like I even get a vacation anyway.
The system I'm working on is shit. The devs all know it, the users all complain about it. It needs to be fixed, and not only do I seem to be the person most driven to fix it, it turns out I've been hired explicitly to replace the shittiest part of it. So that's actually pretty good, right?
Except my PO doesn't quite want me to do that yet. First, he needs me to shovel more shit onto it. Shit that's going to be the first stuff that I'll replace once I get to replace stuff, and then that stuff will be a lot easier, whereas now it would be a lot harder and too slow to be useable. But new features are more important than making this useable.
He's a nice guy, but he doesn't get technical priorities, and priorities are the primary responsibility for a PO.
The architect is colouring all the balls
The senior developer is arguing with the architect
The junior developer is cannonballing somewhere in the middle
One of my jobs went to microservices. Not really sure why. They had daily active users in the thousands, maybe. But it meant we spent a lot of time on inter-service communication, plus local development and testing got a lot more complicated.
But before that, it was a single API written in Go by an intern, so maybe it was an improvement.
3 of them look the same- beard, hair, blocky head
I really don't understand why this gets so complicated. Like don't we all just make a micro service when ever we make a job or proccess in a project, and then slap those in a namespace and behind a service on k8s when you want to expose it out to the cluster, and ingress for the world?
If that gets complicated, then you refactor just like any other code base, and debug it like any other multi threaded app. Make sure actions are atomic. Functional programing helps a lot too, cause you know streaming vs stateful, but you can have stateful stuff in k8s.
I'm so confused by the meme. What the hell is a "monolithic bug"? And what does DevOps have to do with software architecture?
Most DevOps spend our days designing and coding. We are deeper into architecture than anyone else, the dev team does not even consider deployment and uptime. We have to go to each separate teams meetings because our input is needed for many decisions. I had no idea that it was like this when I got into it.
Devs used to have to consider deployment and uptime! They still should. We as an industry became arbitrarily segmented and irresponsible. I have never gotten used to this tossing shit over the fence.
I look at it differently, everything used to be hobbled together messes without real consideration for running live. Then when you go to scale, you had to redo the whole thing because it's base architecture was garbage. This is going to sound dumb, but the philosophy behind DevOps creates an environment that encourages building extensible systems that hopefully will not require taking a fucking sledge hammer to the systems to upgrade when you get users. My role in particular would require time from a dev from each team and a SysAdmin that understands software and OS at a low levell. That is really inefficient and has communication gaps.
Interesting. My perspective is that a strong, small team building a monolith has to think of constraints and design for them, and the microservices teams make choices in the local instead of the global maximum, which reduces cohesion and incurs communication costs. I would think that carving out a service from a monolith would be easier than the reverse direction, although maybe you’re with me on that.
I would build this microservice architecture out of a desire to do good, but through me it would wield a power too terrible to comprehend.
Microservices are just a collection of monoliths connected through even more code.
top 25 comments