一、微服务架构的核心特征
-
服务解耦(必须满足)
- 多个独立的服务,每个服务有明确的业务边界
- 服务间通过API通信(而非直接调用代码)
-
独立自治(必须满足)
- 每个服务可以:
- 独立开发
- 独立测试
- 独立部署
- 独立扩展
- 每个服务可以:
-
技术异构性
- 不同服务可以使用不同的技术栈(如Java/Python/Go等)
-
去中心化数据管理
- 每个服务拥有自己的数据库(避免共享数据库)
- 每个服务拥有自己的数据库(避免共享数据库)
二、"一个系统一个微服务"的问题
-
没有解耦优势
- 所有功能仍耦合在一起,无法独立变更
- 修改任何功能都需要重新部署整个"微服务"
-
无法独立扩展
- 即使某个功能需要更多资源,也无法单独扩展
-
违背微服务初衷
- 微服务的目的是解决单体架构的痛点(如难以扩展、难以维护)
- 一个"微服务"实际上仍是单体架构
三、CRM系统的正确微服务划分(对比说明)
特征 | 单体架构(一个"微服务") | 正确微服务架构 |
---|---|---|
客户管理 | 所有功能写在一个代码里 | 独立customer-service |
销售管理 | 所有功能写在一个代码里 | 独立sales-service |
部署 | 改任何功能都要重新部署 | 可以单独部署某个服务 |
扩展 | 无法单独扩展某个功能 | 可以单独扩展高负载服务 |
四、为什么有人会这样做?
-
误解微服务概念
- 认为"微"就是"小",把整个系统当作一个"小服务"
-
技术栈限制
- 团队缺乏微服务开发经验
- 缺乏服务治理能力(如服务注册、监控等)
-
渐进式改造
- 从单体逐步拆分时,可能暂时保持一个"微服务"
- 但这只是过渡阶段,最终仍需拆分

五、正确的做法
-
先识别业务边界
- 按照业务领域划分(如客户、销售、营销等)
-
逐步拆分
- 从单体中提取高价值的服务先独立
- 例如:先拆出
customer-service
,再拆sales-service
-
配套措施
- 建立服务注册中心(如Eureka/Nacos)
- 实现API网关(如Spring Cloud Gateway)
- 建立分布式日志和监控
六、总结
- 一个系统一个微服务:不是真正的微服务架构
- 真正的微服务:必须有多个独立自治的服务
- CRM系统案例 :应该拆分为
customer-service
、sales-service
等多个服务
如果只是把整个系统包装成一个"微服务",本质上仍是单体架构,无法享受微服务的优势。正确的做法是根据业务边界进行合理拆分。
答案:一个系统一个微服务是否算微服务架构?
严格来说不算 ,这属于"伪微服务"或"单体伪装成微服务"的情况。微服务架构的核心特征是服务解耦和独立自治,而单个微服务无法体现这些关键优势。
