本文由 AI 分析生成
建立時間: 2026-03-28 來源: https://changelog.com/posts/monoliths-are-the-future
Summary
Kelsey Hightower’s “unpopular opinion” segment from Go Time #114 (2020): microservices don’t actually solve the discipline problem — teams with bad code practices just produce distributed monoliths with even worse operational overhead. Monoliths remain the right default; extract services only when the problem is real, not hypothetical.
Kelsey Hightower 在 Go Time #114(2020 年)的「不受歡迎的觀點」片段:微服務並不能真正解決紀律問題——有不良代碼實踐的團隊只是生產了具有更糟糕運維開銷的分佈式單體。單體仍然是正確的默認值;只有在問題是真實的而非假設的時候才提取服務。
Key Points
- Root cause diagnosis: teams move to microservices to “find the discipline they never had” — but the discipline doesn’t come from the architecture, it comes from the team
- Distributed monolith anti-pattern: 50 services tightly coupled by shared state = monolith, but with network calls instead of function calls; worse observability, same coupling
- Tool adoption as cargo cult: Kubernetes, Prometheus, OpenTracing adopted because of buzz and spend, not because they solve a real problem
- Valid microservices use case: bank adds mobile banking API that needs different endpoints → new service connecting to existing infrastructure makes sense; extracting a new concern, not fragmenting an existing one
- Kelsey’s test: does the service make a new problem easier, or does it fragment a solved problem?
Insights
Hightower’s diagnosis is the clearest articulation of why microservices often fail: the discipline problem that drives teams to microservices (messy codebase, teams stepping on each other) isn’t solved by distribution — it’s solved by team discipline, code organization, and module boundaries. Distribution adds new failure modes. The “distributed monolith” term captures the failure mode perfectly: you get the complexity of microservices and the coupling of a monolith simultaneously. The “driving new spend” observation is cynical but accurate about the economics of enterprise architecture trends.
Connections
Raw Excerpt
What they end up doing is creating 50 deployables, but it’s really a distributed monolith. It’s the same thing, but instead of function calls and class instantiation, they’re initiating things and throwing it over a network and hoping that it comes back.