Transcription: a Twitter thread from Gary Bernhardt.
- You, the one who is reading this! You don’t need Kubernetes!
- Also microservices.
- Also queues that are separate from your primary database (for most apps).
- Google cosplay is not business-critical.
Source: https://twitter.com/garybernhardt/status/1344341213575483399
I’ve been migrating one of my company’s apps from microservices back to monolithic Java. It’s wonderful. I haven’t touched a line of yaml in weeks.
Currently migrating a massive monolithic Java application to microservices… The circle of life continues.
Want to just swap jobs in ~5 years to keep the cycle going? You can migrate this project back to a Java monolith and I’ll migrate your monolith back to micros :D
Honestly this just sounds like periodically refactoring everything to remove cruft can be a good thing. Also, it helps you understand how the existing code works if you change it and not break everything.
Absolutes in programming tend to lead to bad designs. This is more a “I’m gonna stir up some shit on Twitter” post than real wisdom.
- No microservices usually leads to bloated, tightly coupled logic that ignores business domains
- No monoliths usually leads to sprawling microservice deployments with tightly coupled dependencies and flavor-of-the-week new ones
- No Kubernetes usually leads to VPS pets or crazy obstacle courses trying to get SSL termination without a million fucking dependencies in a cloud container orchestration system that isn’t as good as Kubernetes
- All Kubernetes usually leads to huge SRE costs for a tiny app
The same shit happened last summer when AWS came out with their “we dropped microservices for a monolith and look at our speed increase” article which ignored good design principles. Sometimes you should split things over business domains so you can deploy and code independently. Sometimes Kubernetes is the best way to handle your scale needs. The stories we normally read are about people doing it wrong (eg AWS making a bunch of microservices inside a domain sending fucking gigs of data between what should have been functions in a single service). Inexperienced folks don’t always know when to move from their minimum viable solution to something that can scale. That doesn’t mean you remove these things, it means you train on when you need them.
Should we abandon design patterns because singletons or flywheels aren’t the correct solution all of the time?
Saying that some projects, at some point in their lifecycle, don’t need certain things, is not saying that those things have no place. Also, if one can’t design a monolith that isn’t bloated and tightly coupled, one definitely has no business designing microservices. Using microservices is neither necessary, nor sufficient to achieve decoupling.
Monolithic services are the ideal way to begin a project, as using basic good practices, we can build a service that does many things with minimal coordination, and as it grows and requirements change or are discovered, we can easily refactor to keep things simple. As the software matures, we find the natural service boundaries, and find that certain pieces would perform better if they were separated out and could scale independently, or act asynchronously. Since we have followed good practices, this should usually be a simple matter of removing a class or module to a new service, and replacing it with a facade, such that the rest of the monolith doesn’t have to change at all.
Precisely, Gary Bernhardt has given a talk on ideology. I don’t think he’s precisely someone who thinks in absolutes. It’s just preaching that some stuff is (probably) used more than it should. I’ve seen way, way, way worse projects that over engineered things and made things slow and unmanageable, than the opposite. Of course, everyone has seen different things, and our perceptions are amplified and biased by that.
All Kubernetes usually leads to huge SRE costs for a tiny app
Hush, I’m working as an SRE and don’t want anyone to figure this out.
Add Istio and no one will be able to fire you without fucking up mutual TLS
Even if what you say isn’t true I’m giving my vote of confidence so I can just shrug whenever someone disagrees with my architecture.
Don’t like that I chose a single API server? We’re avoiding sprawling microservice deployments with tightly coupled dependencies.
Don’t like all the docker containers? We’re avoiding bloated, tightly coupled logic that ignores business domains.
Monoliths are the answer to bad microservices. Microservices are the answer to bad monoliths. It’s all cyclic and four different architects are going to have fifteen different opinions on how your system should be built. Do the thing that makes sense for your team and try to stay flexible.
Small app developers are all just temporarily embarrassed cloud service providers
FEED SNEED FUCK CLEAN IT UP SEED CITY SLICKER SEED ON LEMMY SUCK CHUCK HOT POCKETS JANNY JANNIES DILATE SEETHE HOT POCKETS COPE CITY SLICKER SNEED PARK AVENUE MANICURE FOR FREE HOT POCKETS FEED FUCK FOR FREE FANCY GERMAN CAR SUCK HOT POCKETS PARK AVENUE MANICURE I CAN’T CHUCK’S I CAN’T DILATE AND CLEAN IT UP JANNIES FANCY GERMAN CAR GUCCI LOAFERS ON LEMMY ON LEMMY CLEAN IT UP SNEED’S SEETHE SNEED’S CLEAN IT UP CHUCK’S CHUCK DILATE SNEED SUCK
ON LEMMY CLEAN IT UP FLOYD DILATE FLOYD SEETHE AND HOT POCKETS DILATE HOT POCKETS COPE AND PARK AVENUE MANICURE FOR FREE FOR FREE JANNIES SUCK CITY SLICKER CHUCK CLEAN IT UP GUCCI LOAFERS CITY SLICKER PARK AVENUE MANICURE JANNY FEED FUCK CLEAN IT UP SUCK SUCK ON LEMMY CHUCK JANNIES SEED I CAN’T CLEAN IT UP JANNIES SEETHE FUCK CHUCK COPE FLOYD SUCK CLEAN IT UP CITY SLICKER CHUCK HOT POCKETS SNEED’S JANNIES I CAN’T CHUCK
SNEED’S ON LEMMY SEETHE PARK AVENUE MANICURE SNEED FANCY GERMAN CAR JANNY SNEED’S FUCK SUCK CLEAN IT UP SEETHE CITY SLICKER SUCK CLEAN IT UP ON LEMMY CHUCK’S AND SUCK HOT POCKETS DILATE CLEAN IT UP HOT POCKETS FEED DILATE CHUCK JANNIES JANNIES AND AND FOR FREE SEETHE GUCCI LOAFERS HOT POCKETS SEETHE FUCK SEETHE JANNIES FEED FEED GUCCI LOAFERS ON LEMMY I CAN’T COPE HOT POCKETS CLEAN IT UP FOR FREE FUCK ON LEMMY I CAN’T
xD just blocked the spammer and all his comments disappeared. Imagine working so hard to spam and it takes 2s to for someone to hide your posts.
Couldn’t a bot just automate that easily? Especially with how open Lemmy’s API probably is
I thought my client was chucking a wobbly with so many removed comments be the same person.
Oop looks like he moved servers. I blocked them on one yesterday and just saw their post again. Oh well, another 2s wasted :p
Lemmy really needs pixelfed’s naive bayes spam detection, it would be able to easily classify the new accounts after classifying one post as spam, then it would be 0 seconds wasted.
I know some of those words and agree that that would be better
What’s even up with that guy? What’s he trying to accomplish? Spammers confuse me.
I feel like they were banned or something and decided to go scorched Earth on Lemmy
Some bored kid, I would assume.
Sneed is light. Jannies are darkness.
The janny is the accursed one, fit only to consume feces.
2 clicks, reload the thread and it’s gone. Easy peasy!
COPE COPE AND SNEED DILATE FEED SUCK HOT POCKETS CHUCK’S PARK AVENUE MANICURE CHUCK’S FUCK SUCK CITY SLICKER SEETHE FEED FLOYD SUCK SEETHE DILATE CHUCK’S CHUCK FOR FREE HOT POCKETS FEED HOT POCKETS FLOYD HOT POCKETS FEED FOR FREE SUCK SNEED SUCK AND SNEED JANNIES CLEAN IT UP SNEED’S SNEED’S GUCCI LOAFERS FLOYD SEETHE SNEED’S SEETHE FUCK HOT POCKETS FOR FREE FANCY GERMAN CAR JANNIES HOT POCKETS
FLOYD DILATE FUCK ON LEMMY AND SNEED CITY SLICKER FANCY GERMAN CAR JANNIES CHUCK’S CHUCK’S GUCCI LOAFERS CLEAN IT UP PARK AVENUE MANICURE DILATE SEETHE SEETHE SNEED CITY SLICKER CHUCK’S FOR FREE I CAN’T DILATE DILATE FLOYD CHUCK’S FEED ON LEMMY COPE FOR FREE CITY SLICKER SNEED’S CHUCK SNEED SEETHE AND AND FANCY GERMAN CAR CHUCK SNEED COPE DILATE CHUCK’S FANCY GERMAN CAR CLEAN IT UP FLOYD CLEAN IT UP FUCK FLOYD HOT POCKETS
COPE JANNIES FLOYD FANCY GERMAN CAR HOT POCKETS PARK AVENUE MANICURE FANCY GERMAN CAR FLOYD DILATE COPE FANCY GERMAN CAR AND JANNIES FOR FREE COPE CITY SLICKER JANNIES CHUCK’S SNEED’S FOR FREE SEED CHUCK COPE SNEED CLEAN IT UP JANNIES COPE FLOYD DILATE COPE FOR FREE HOT POCKETS CHUCK GUCCI LOAFERS I CAN’T FOR FREE SNEED’S FANCY GERMAN CAR PARK AVENUE MANICURE SEETHE AND JANNY AND SNEED COPE HOT POCKETS PARK AVENUE MANICURE SEETHE I CAN’T CHUCK’S
No lies were told
I mean this is kind of bullshit. There’s a lot of things that run in containers these days, and kubernetes is the best way to run containers. If you can do everything with static js or managed services, more power to you, but as soon as you have multiple services talking to each other, you should be using kubernetes, and you should probably consider message queues.
I never got into kubernetes but docker swarm mode services (not to be confused with old docker swarm) are pretty similar and they’re absolutely amazing for small deployments, even for just a home lab. If there’s anything I want to self-host, no matter if it’s homeassistant, jellyfin, nextcloud, a mastodon instance, a lemmy instance, GitLab or whatever, I can usually just get a preconfigured container, adjust some lines in a docker-compose.yml to fit my environment and be done with deployment in under 5 minutes without having to worry about dependencies, isolation or most configuration. Same for the stuff I write myself. Most of my stuff has a very simple GitLab CI config of maybe 20 lines and immediately shows up live when I merge my changes into main.
SNEED ON LEMMY COPE AND CHUCK ON LEMMY FOR FREE FEED ON LEMMY CHUCK SEETHE CITY SLICKER FEED FUCK FOR FREE GUCCI LOAFERS AND SNEED’S HOT POCKETS CITY SLICKER CITY SLICKER FOR FREE CITY SLICKER COPE JANNY SNEED’S CHUCK CHUCK CHUCK’S FANCY GERMAN CAR HOT POCKETS CHUCK’S FOR FREE JANNIES FLOYD GUCCI LOAFERS COPE COPE COPE DILATE CITY SLICKER CLEAN IT UP GUCCI LOAFERS SNEED HOT POCKETS FOR FREE GUCCI LOAFERS AND ON LEMMY ON LEMMY
CHUCK’S GUCCI LOAFERS JANNIES HOT POCKETS CHUCK FANCY GERMAN CAR AND SNEED’S I CAN’T PARK AVENUE MANICURE SNEED’S DILATE JANNY JANNIES CHUCK’S JANNIES CLEAN IT UP SNEED’S FEED COPE FLOYD ON LEMMY HOT POCKETS AND CHUCK’S COPE I CAN’T AND FEED SEED DILATE DILATE PARK AVENUE MANICURE FANCY GERMAN CAR FANCY GERMAN CAR HOT POCKETS FUCK HOT POCKETS SUCK COPE CLEAN IT UP SEETHE SNEED ON LEMMY FUCK FEED COPE FANCY GERMAN CAR I CAN’T SEED
SNEED CLEAN IT UP FUCK FOR FREE SEED CITY SLICKER CHUCK JANNIES CHUCK SNEED’S SUCK JANNIES ON LEMMY SNEED ON LEMMY GUCCI LOAFERS AND CLEAN IT UP AND ON LEMMY JANNY CHUCK SNEED’S COPE PARK AVENUE MANICURE PARK AVENUE MANICURE CHUCK’S SNEED ON LEMMY CHUCK’S SNEED JANNIES DILATE FUCK SNEED SUCK SNEED SNEED FOR FREE SEED HOT POCKETS COPE CHUCK HOT POCKETS GUCCI LOAFERS SNEED FLOYD CLEAN IT UP SEED HOT POCKETS