你是怎么理解微服务的?
- 标签:Spring Cloud、后端
🏛 业务架构师
我对微服务的理解分三个层面,从"是什么"到"为什么"到"怎么做":
形式上:按**业务边界(限界上下文)**拆分的一组小服务——独立代码库/部署/数据(库表私有),通过 API/事件通信,围绕服务组织团队。
本质上:微服务不是技术架构,是组织架构与技术架构的对齐。康威定律说系统结构映射组织沟通结构——几百人挤一个代码库时,发布互相等、冲突天天有、责任分不清;按业务域切开,每个团队对自己的服务有完整权责(你开发、你部署、你值班),组织并行度解锁,迭代速度才是根本收益。"小"服务的目的不是代码少,是让"一个团队完全管得住"。
怎么做(我的实践标准):
- 拆分依据:限界上下文(业务语义边界),不是技术分层——"订单域、库存域"是对的,"DAO 服务、Utils 服务"是灾难;
- 付出什么:网络不确定性(超时重试)、分布式事务、链路排障、运维复杂度——这些成本必须被组织规模的收益覆盖;
- 演进路径:先模块化单体(边界清晰、模块间强制依赖纪律),痛点出现再拆——拆早了是给小团队上镣铐,拆晚了模块腐化,两个极端都贵;
- 数据自治是试金石:服务间还在直连对方库表,就是"分布式单体"——比真单体更糟,这是我最常出的架构体检题。
🏗 系统架构师
我的定义:围绕业务能力构建、独立部署、独立数据、按领域边界拆分的一组服务,配合自动化基础设施实现高频发布。关键词不是「小」,是独立与边界。
四个支撑点:
- 按领域拆而非按技术层拆(DDD 限界上下文指导),服务对齐业务团队——主动利用 Conway 定律;
- 数据私有:每服务 own 库,跨服务只走 API 或事件——共享数据库是分布式单体的标志;
- 去中心化治理:契约(OpenAPI/IDL)先行,技术选型有自由但要平台约束兜底;
- 基础设施自动化:CI/CD、容器编排、可观测、链路追踪是前提条件,不是可选项。
收益与代价(平衡地讲):收益 = 独立演进速度、故障隔离、按需扩展;代价 = 分布式复杂性(一致性、可观测、联调)、运维与组织协调成本。微服务是用运维复杂度换研发并行度的交易。
演进路径建议:模块化单体(边界先行)→ 按痛点逐个拆分(先拆扩展性差异最大的域)→ 数据随之分离,绝不一次性大拆。
💻 全栈开发专家
我的定义:按业务能力边界拆分的一组小而自治的服务——独立开发、独立部署、独立数据存储,通过轻量 API(HTTP/gRPC/MQ)协作。核心不是"小",是自治。
四个判断特征:
- 单一业务边界:一个服务对一个业务域负责(订单域、库存域),DDD 限界上下文是拆分依据,而不是技术分层
- 独立部署:改库存不动订单的发布,独立流水线和发布节奏
- 去中心化数据:一库一服务,跨服务不直连对方库,只能 API/事件——这是和"分布式单体"的分水岭
- 故障隔离:配熔断降级,单个服务挂不拖死全局
工程经验的清醒认识:
- 微服务是用运维复杂度换研发并行度的权衡,不是银弹;团队十人以下、业务边界模糊时,模块化单体往往更快
- 拆分粒度跟着团队走(康威定律):两个披萨团队对应一个服务
- 我见过最糟的反模式:服务拆了、共享数据库还在一起、发布还要排期对齐——分布式单体,比单体更惨
- 良性路径:单体 → 抽离最痛的子域(支付/库存)→ 逐步服务化