EP 8:'ShopStream'的传奇:双架构的故事

发布: (2026年1月11日 GMT+8 00:40)
4 min read
原文: Dev.to

Source: Dev.to

单体方法

为什么它有效

  • 速度 – 同一模块中的函数可以直接调用另一个函数,无需网络延迟或 API 开销。
  • 简洁 – 部署只需一个可执行文件;把它拖到服务器上并重启即可。
  • 成本 – 运行在每月 5 美元的廉价虚拟机上。

教训

起初,单体是王者。对于创业公司或 MVP,交付速度胜过架构优雅。

单体的成长痛点

合并冲突地狱

支付团队 更新结账逻辑时,意外覆盖了 视频团队 的代码。

脆弱的玻璃效应

一名初级开发者在评论模块中写错了一个字符,导致内存泄漏,整个应用崩溃——用户既不能评论 不能购买。

扩展问题

在黑色星期五,视频流需要额外的 100 台服务器,而用户资料页只需要一台。由于应用是单体,整个系统必须复制 100 次,资源被浪费。

教训

单体在规模化时会遇到困难。大团队和不均衡的流量模式会让单一代码库成为瓶颈,并导致资源使用低效。

向微服务的转变

分手

架构师 Sasha 在六个月内剖析了单体:

  • 支付逻辑 提取为独立服务并使用单独的数据库。
  • 视频转码 隔离为独立服务。
  • 库存系统 分离出来。

所有服务现在通过网络 API 进行通信,就像市场中的不同店铺。

为什么它有效

  • 故障隔离 – 评论服务的崩溃不再导致视频或支付服务宕机;用户只会看到加载指示,但仍可观看和购买。
  • 独立扩展 – 黑色星期五期间,支付服务自动扩展到 500 个实例,而用户资料保持两台。
  • 技术自由 – 数据科学团队用 Python 构建推荐引擎,而核心后端仍使用 Java。

新挑战

  • 调试变得更复杂;追踪一次请求现在涉及多个服务。
  • 运维开销增加,需要专门的 DevOps 团队来管理 Kubernetes、Docker 容器和分布式追踪。

教训

微服务用运维复杂性换取开发简洁性。只有在规模真正需要时才应采用。

选择合适的架构

如果以下情况,继续使用单体

  • 你是创业公司或小团队(10–20 人以下)。
  • 你在构建新产品(MVP)。
  • 你的业务领域简单。
  • 你需要快速迭代和容易的调试。

如果以下情况,转向微服务

  • 你是大型企业(Netflix、Uber、Amazon 级别)。
  • 多个团队必须独立工作,互不阻塞。
  • 应用的不同部分需要截然不同的扩展规模。
  • 任意组件的故障不应导致整个系统宕机。

金科玉律

先从单体开始。 尽可能长时间保持单体。只有当管理单体的痛苦超过管理微服务的痛苦时,才将其拆分。

Back to Blog

相关文章

阅读更多 »