微服务是一种架构风格,应用程序由一组小型、独立可部署的服务构建而成,每个服务拥有一个业务能力,并通过网络(HTTP、gRPC 或消息传递)进行通信。
工作原理
每个服务在自己的进程中运行,拥有自己的数据存储,可以独立开发、部署和扩展。团队端对端拥有自己的服务。
text
┌──────────────┐
Client ─▶ │ API Gateway │
└──────┬───────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌────────┐ ┌─────────┐ ┌──────────┐
│ Orders │ │ Payments│ │ Shipping │ ← each: own code + DB
└───┬────┘ └────┬────┘ └────┬─────┘
▼ ▼ ▼
ordersDB paymentsDB shippingDB
关键特性
- 单一职责 — 每个业务能力对应一个服务。
- 独立部署 — 部署一个服务而无需重新部署整个应用。
- 数据分散 — 每个服务拥有自己的数据库。
- 网络通信 — 服务通过 API 或事件进行交互,而不是进程内调用。
权衡
你获得了独立扩展和团队自主性,但要付出分布式系统复杂性的代价:网络故障、最终一致性,以及更难调试。
为什么这很重要
微服务让大型团队能够并行高速前进,因为每个小组都可以部署自己的服务,无需协调一个巨大的发布。
它们也让你能够扩展和加强需要的部分,而不是扩展一个单一的庞大整体。
但复杂性是真实存在的,所以这种风格只有在组织和问题足够大到需要它时才能带来价值。
