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

1 point

None of those things are required but they sure do help.

permalink
report
reply
91 points

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?

permalink
report
reply
13 points

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.

permalink
report
parent
reply
15 points

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.

permalink
report
parent
reply
22 points

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.

permalink
report
parent
reply
9 points

Add Istio and no one will be able to fire you without fucking up mutual TLS

permalink
report
parent
reply
1 point

This is more a “I’m gonna stir up some shit on Twitter” post than real wisdom.

Ah, the irony.

permalink
report
parent
reply
10 points

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.

permalink
report
parent
reply
3 points
*

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.

permalink
report
parent
reply
6 points

No lies were told

permalink
report
reply
12 points

There’s someone at my work who really needs to see this…

permalink
report
reply
34 points

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.

permalink
report
reply
14 points

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.

permalink
report
parent
reply

Programmer Humor

!programmer_humor@programming.dev

Create post

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

  • Keep content in english
  • No advertisements
  • Posts must be related to programming or programmer topics

Community stats

  • 3.3K

    Monthly active users

  • 1K

    Posts

  • 37K

    Comments