别再弄混“分布式与微服务”
分布式与微服务
目录
分布式是什么
分布式是一种系统运行方式:多个独立的计算节点通过网络协作,共同完成一个任务。
通俗讲就是把同一套系统部署多个服务器上。分布式的核心关注点是机器之间的协作:数据怎么同步、请求怎么分发、节点挂了怎么办、网络断了怎么容错。这些问题和业务逻辑无关,纯粹是基础设施层面的事。

这就是一个典型的分布式部署。应用代码可能是同一份,只是跑在不同机器上,通过负载均衡分发请求。
微服务是什么
微服务是一种架构风格:把一个大应用拆成多个小服务,每个服务负责一个独立的业务功能,可以独立开发、独立部署、独立扩展。
微服务的核心关注点是服务的边界和职责:怎么拆才合理、服务之间怎么通信、数据怎么隔离、一个服务挂了会不会拖垮整个系统。这些问题和业务架构强相关。

每个服务是一个独立的进程,有自己的数据库,通过 HTTP 或 RPC 通信。服务之间是松耦合的,改一个不影响其他。
一张图看清它们的关系
如果你还纠结"分布式和微服务到底什么关系",其实画一张图就清楚了:

分布式是一个大圈,微服务是圈里的一个小圈。 微服务天然就是分布式的(多个独立服务通过网络通信),但分布式的范围比微服务大得多——单体应用部署在多台机器上是分布式,数据库主从复制是分布式,Redis 集群是分布式,但这些都不是微服务。
五个维度拆解区别
| 维度 | 分布式 | 微服务 |
|---|---|---|
| 本质 | 系统运行方式 | 架构设计风格 |
| 关注点 | 机器之间的协作与通信 | 服务的拆分与边界 |
| 拆分依据 | 按基础设施层拆(计算、存储、缓存) | 按业务能力拆(用户、订单、支付) |
| 部署要求 | 必须多机部署 | 可以单机,也可以多机 |
| 解决的问题 | 性能、可用性、扩展性 | 耦合度、独立部署、团队协作 |
二者本质不同
分布式解决的是"一个任务怎么让多台机器一起干"。有一台机器扛不住流量了,加几台机器一起扛,这就是分布式要解决的问题。
微服务解决的是"一个大应用怎么拆成小块"。你的代码库十万行,改一个功能要编译整个项目,发布一次要停服半小时,这就是微服务要解决的问题。
一个是水平扩展问题,一个是模块化拆分问题。
二者关注点不同
做分布式,关注的是:负载均衡策略选轮询还是权重?数据一致性用强一致还是最终一致?节点挂了怎么自动故障转移?这些问题和业务逻辑没关系,分布式基础设施要解决的问题都一样。
做微服务,关注的是:用户服务和订单服务的边界在哪?订单服务能不能直接访问用户服务的数据库?一个服务挂了,调用方应该怎么处理?这些问题和业务强相关,不同的业务拆法完全不同。
二者部署方式不同
分布式必须多机部署,一台机器不叫分布式。微服务可以部署在一台机器上——你把用户服务和订单服务跑在同一台服务器的不同端口,它们依然是微服务,只不过不是分布式的微服务。
当然,生产环境中微服务几乎一定会分布式部署。但从概念上讲,微服务不强制要求多机。
什么场景该用分布式
单机扛不住流量的时候。 分布式解决的是性能和可用性问题,不是架构是否优雅的问题。
几个典型场景:
1. 高并发
应用单机只能扛 2000 QPS,但业务峰值是 1 万。你需要把应用部署到 5 台机器上,前面加一个负载均衡。
2. 海量数据
单个 MySQL 实例存了 5000 万行数据,查询开始变慢。你做分库分表,把数据分散到 4 个数据库实例上。
3. 高可用
你的服务要保证在任何时候不能停止。因此把同一份应用部署到两个机房,一个挂了另一个可以迅速接管。
这三种场景的共同点是:业务逻辑没变,只是需要更多的机器来干活。
什么场景该用微服务
单体应用撑不住了的时候。 微服务解决的是开发效率和系统耦合问题,不是性能问题。
几个典型场景:
1. 代码库膨胀
项目有 50 万行代码,30 个开发者在同一个仓库里写。每天都有合并冲突,改一个模块的接口可能把另一个模块搞挂。发布的时候要整个项目一起编译、一起部署,一次发布要半小时。
这时候把项目拆成 10 个微服务,每个团队负责自己的服务,独立仓库、独立发布。改用户服务的接口就不再需要通知订单服务团队。
2. 不同模块有不同的伸缩需求
你的电商系统里,商品浏览的 QPS 是 10 万,但下单的 QPS 只有 1000。单体架构下,你要么所有模块一起扩容到 10 万台机器的规格,要么接受商品浏览卡顿。
微服务下,商品服务单独扩容到 8 台机器,订单服务 2 台就够。微服务可以各服务按需伸缩,不浪费资源。
3. 技术栈需要多样化
项目的推荐算法用 Python 写最合适,核心交易系统用 Java 更稳,日志收集用 Go 性能更好。单体架构下你只能选一种语言。在微服务下,每个服务可以选自己最适合的技术栈,互不影响。
小结
分布式是关于"多台机器怎么协作",微服务是关于"一个应用怎么拆开"。前者关注基础设施层面的性能和可用性,后者关注业务架构层面的解耦和独立性。微服务天然是分布式的一种形式,但分布式远不止微服务,单体多机部署、数据库集群、缓存集群都是分布式,但它们和微服务没有关系。
后端面试中,如果面试官再问你分布式和微服务的区别,你可以这样回答:分布式是一种运行方式,关注的是机器之间怎么协作;微服务是一种架构风格,关注的是业务怎么拆分。微服务天然就是分布式的,但分布式不一定需要微服务。
更多推荐
所有评论(0)