Hacker News 中文摘要

RSS订阅

你想要微服务,但真的需要吗? -- You want microservices, but do you need them?

文章摘要

文章指出,亚马逊Prime Video放弃微服务回归单体架构后成本骤降90%,引发业界对微服务必要性的反思。作者认为微服务不应成为默认选择,许多情况下单体架构反而更高效,但当前技术圈仍普遍将微服务视为现代开发的唯一路径。(99字)

文章总结

你真的需要微服务吗?

2023年5月,亚马逊Prime Video团队通过将微服务架构重构为单体架构,成功降低了90%的成本。这一案例引发了技术社区的广泛讨论——如果连微服务的最大推手AWS都在特定场景下回归单体,我们是否过度追捧了微服务?

微服务的代价:复杂性与收益的失衡

微服务的理论优势显而易见:独立部署、弹性扩展、多语言支持。但现实是,每一次服务拆分都会引入新的问题:
- 网络延迟与故障点:原本简单的函数调用变为跨服务通信,需处理序列化、重试、一致性等问题。
- 运维复杂度飙升:需引入服务发现、分布式追踪、日志聚合等工具链,基础设施成本成倍增加。
- 开发效率下降:一个需求可能涉及多个服务仓库,协调成本远高于单体架构。

正如Gartner图表所示,微服务用“多代码库的复杂性”换取“单一代码库的简单性”,而这一交换仅在业务域边界清晰且需独立扩展时才有价值(如支付服务与推荐引擎)。

巨头的反思:微服务的退潮案例

  1. Prime Video的90%成本削减:其视频质量分析服务从Lambda+Step Functions的“无服务器理想架构”回归单体,性能提升的同时运维开销骤减。
  2. Twilio Segment的140服务之痛:微服务数量膨胀导致工程师疲于救火,合并为单体后测试时间从1小时缩短至毫秒级。
  3. Shopify的模块化单体实践:280万行代码的Rails单体通过严格模块化,实现日均30TB流量的高效处理。

行业领袖的警告

  • Ruby on Rails创始人DHH直言:“微服务是徒增复杂性的海妖之歌。”
  • GitHub前CTO Jason Warner认为:“90%的公司只需单体+数据库集群即可满足需求。”
  • GraphQL联合创始人Nick Schrock更激进地评价:“微服务是灾难性的错误。”

更务实的替代方案

  1. 模块化单体:通过内部边界划分(如Spring Modulith/Django模块)保留微服务的代码组织优势,同时避免分布式系统的开销。
  2. 服务导向架构(SOA):以业务域为单位定义服务(如“用户服务”),减少细粒度拆分带来的协调成本。

Docker的架构无关性

无论单体还是微服务,Docker都能提供一致的部署、隔离和扩展能力。微软的实践表明,容器化单体的横向扩展效率甚至高于虚拟机部署。

核心结论

微服务适用于亚马逊、Netflix等超大规模场景,但对多数企业而言,过早采用微服务如同“为切柠檬买了一把剑”。架构选择应回归本质问题:
- 你的团队是否具备管理分布式系统的成熟度?
- 业务规模是否真需要独立扩展的组件?
若答案是否定的,模块化单体或SOA可能是更明智的选择。

(本文基于Docker官方博客2025年11月文章编译,案例与观点均来自原文。)

评论总结

以下是评论内容的总结,平衡呈现不同观点并保留关键引用:


反对微服务的观点

  1. 微服务过度复杂

    • "I don't want microservices! What I want is a lightweight infrastructure for macro-services."(cyberax)
    • "microservices were an effect of the ZIRP era... 3 tier architecture proves time and time again to be robust."(dzonga)
  2. 适合场景有限

    • "Full-on microservices... is a good idea pretty much never."(mjr00)
    • "You almost certainly don't have a scaling problem that necessitates a distributed system."(venturecruelty)
  3. 团队能力不足

    • "very few people actually know how to design a microservice based architecture... it's just a giant distributed monolith."(scuff3d)
    • "orgs have junior staff leading the charge... and end up making critical mistakes."(mjr00)

支持微服务的观点

  1. 特定场景的价值

    • "You need multiple services whenever the scaling requirements of two components are significantly different."(rockemsockem)
    • "Another good use case... if you are going to have to change the compute size for your monolith."(AJRF)
  2. 服务化架构的折中

    • "Most companies should be fine with a service oriented architecture... microservices are a sign of success."(INTPenis)
    • "I like goldilocks services, as big or as small as actually makes sense."(p1necone)

中立/折中观点

  1. 混合架构(Mini-Services)

    • "The answer is somewhere in the middle (miniservices)."(mjr00)
    • "SAAS is finally making the jump to hybrid/mini."(awesome_dude)
  2. 技术选型依赖场景

    • "A monolith would have been an impedance mismatch for our 'assembly line' model."(gnarlouse)
    • "BEAM ecosystem can do distributed microservices within a monolith."(hosh)

关键争议点

  • 数据库设计
    "Large, shared database tables have been a huge issue... labor intensive to fix."(honkycat)
    "multiple services using a shared database... is a critical mistake."(mjr00)
  • Kubernetes争议
    "Kubernetes isn't doing anything your OS can't do... 95% of the time you don't need it."(venturecruelty)

总结:评论普遍认为微服务适用于特定规模或场景(如差异化扩展需求),但多数团队因复杂性和实施门槛更适合折中的服务化架构(如SOA或Mini-Services)。过度拆分和工具滥用(如K8s)是主要批评对象。