微服务拆分的 “坑”:实战复盘与避坑指南

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文回顾了从2~3人初创团队到百人技术团队的成长历程,重点讨论了从传统JSP到前后端分离+SpringCloud微服务架构的演变。通过实际案例,总结了微服务拆分过程中常见的两个问题:服务拆分边界不清晰和拆分粒度过细,并提出了优化方案,将11个微服务优化为6个,提高了系统的可维护性和扩展性。

在技术团队里,我亲身经历了

从一个 2~3 人初创阶段的团队到百人规模技术团队的演变

也见证了技术栈和系统架构从传统到现代的变迁

从最初使用的JSP,到如今前后端分离+SpringCloud的微服务架构


添加图片注释,不超过 140 字(可选)


我们的技术、架构和运维模式经历了翻天覆地的变化。复盘一下自己走过的路,尤其是微服务拆分过程中所踩过的那些坑,背过的锅。。。  


添加图片注释,不超过 140 字(可选)


这里来复盘一下,传统项目改造成微服务架构时,系统拆分所踩过的坑。

总结起来应该就是这两坑货:

坑一:服务拆分边界不清晰

坑二:拆分粒度过细,过度拆分

我们的项目是原本就有的系统,随着公司的发展。老板钱多了想做大做强、招架构师、招总监、系统用户量大了等问题,所以系统需要升级,需要改造。

当下一般来说就是改造成微服务架构,那么

第一步,就是产品对业务进行拆分;

第二步,就是技术根据拆分好的业务,创建对应的微服务;

.....

产品的业务模块

这是个电商系统,不过与传统电商系统多出来的就是有商品的申请、对商品申请的审核、商品的制作这几个业务。

添加图片注释,不超过 140 字(可选)

首先是产品经理把系统划分出相应的业务模块,

  • 1、 业务申请

处理用户的商品下单申请,收集订单信息主要包括证照、申请表等材料。

  • 2. 订单审核

对用户订单进行审核,确保订单合法有效如证照是否真实、申请表填写是否正确。

  • 3. 生产制作

生产商品并管理订单的生产过程,跟踪制作进度和资源。

  • 4. 用户管理

用户账户信息,处理注册、登录和权限。

  • 5. 支付与结算

处理订单支付、退款、结算及发票等相关事务。

  • 6. 物流与配送

管理物流信息,协调配送流程和状态更新。

  • 7. 消息通知

发送系统消息和通知,确保用户及时了解信息。

  • 8. 报表与分析

生成业务报表,提供数据分析支持决策。

当时技术团队就根据产品的型业务模块一一对应来生成相应的微服务。

微服务拆分

那么目前微服务拆分的依据就是根据业务模块来拆分,好样并没有毛病。

添加图片注释,不超过 140 字(可选)

  1. 业务中心:负责业务的申请、用户上传相应的材料
  2. 审核中心:负责业务申请的审核
  3. 生产中心:负责商品的生产
  4. 用户中心:负责用户与权限的管理
  5. 支付中心:负责订单的支付、发票等
  6. 物流中心:负责商品的物流跟踪
  7. 消息中心:负责 MQ、短信、邮件等消息
  8. 报表中心:负责系统报表生成、使用等功能
  9. 日志中心:负责系统业务日志、系统日志的管理
  10. 存储中心:负责系统所有文件的存储与管理
  11. 监控中心:负责系统监控管理

拆分下来整个系统就变成这 11 个微服务,不多也不少了。另一个兄弟团队拆分出 30 来个微服务。拆分完后就是开发了,这时各种坑就出现了


总结

引用淘宝技术团队的一句经典的话:

“好的架构是进化来的,不是设计来的,好的功能也是进化来的”。

为了避免微服务拆分过细,一般服务可以将关联紧密业务模块放一起,随着业务和团队的发展,再逐步细化微服务的拆分。比如,在电商平台中,最初订单和支付是合并在一个服务中的,随着业务复杂性增加,可以将支付拆分出来变成独立的服务。  

如果重新拆分的话或许会是这样的:

添加图片注释,不超过 140 字(可选)

1.业务中心

  • 责任:负责订单的全生命周期管理,包括订单提交、审核、生产等。
  • 合并模块:
  • 提交订单信息(业务中心)
  • 审核提交订单(审核中心)
  • 生产订单中的商品(生产中心)

2.ERP中心

  • 责任:处理支付、发票,以及库存管理相关的功能。
  • 合并模块:
  • 支付、发票(财务中心)
  • 库存管理(商品中心)

3.用户中心

  • 责任:管理用户信息、用户权限、以及与用户相关的功能。
  • 合并模块:
  • 用户基本信息(用户中心)

4.消息中心

  • 责任:负责系统内的短信、邮件等通知功能。
  • 模块:
  • 短信、邮箱(消息中心)

5.监控中心

  • 责任:记录和监控系统日志,用于分析和审计。
  • 模块:
  • 日志(日志中心)
  • 监控服务

6.数据中心

  • 责任:负责生成报表,以及存储订单相关的文件和图片。
  • 合并模块:
  • 报表(报表中心)
  • 存储订单相关的图片、文件(文档中心)



添加图片注释,不超过 140 字(可选)


这样微服务的数量从 11 个减少到 6 个 ,功能模块的相关性增加,每个服务的责任范围更大,但仍然保持了适当的解耦。这样可以简化服务管理,同时保留扩展和维护的灵活性。

我是栈江湖,如果你喜欢此文章,不要忘记关注+点赞哦!你的支持是我创作的动力。如果你有任何意见或建议,欢迎在下方留言。若转载,请注明文章来源。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
7月前
|
存储 NoSQL API
微服务——MongoDB实战演练——需求分析
本文档《5-MongoDB实战演练》聚焦于某头条文章评论业务的需求分析与功能实现。基于MongoDB,需完成以下功能:1)提供基本的增删改查API;2)支持通过文章ID查询相关评论;3)实现评论点赞功能。结合实际业务场景,演示MongoDB在数据存储与操作中的应用,附带示意图帮助理解业务结构。
85 2
微服务——MongoDB实战演练——需求分析
|
7月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
113 2
|
7月前
|
NoSQL Java MongoDB
微服务——MongoDB实战演练——文章评论实体类的编写
本节主要介绍文章评论实体类的编写,创建了包`cn.itcast.article.po`用于存放实体类。具体实现中,`Comment`类通过`@Document`注解映射到MongoDB的`comment`集合,包含主键、内容、发布时间、用户ID、昵称等属性,并通过`@Indexed`和`@CompoundIndex`注解添加单字段及复合索引,以提升查询效率。同时提供了Mongo命令示例,便于理解和操作。
106 2
|
7月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc("likenum")`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
118 0
|
7月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
95 0
|
7月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章微服务模块搭建
本节介绍文章微服务模块的搭建过程,主要包括以下步骤:(1)创建项目工程 *article*,并在 *pom.xml* 中引入依赖;(2)配置 *application.yml* 文件;(3)创建启动类 *cn.itcast.article.ArticleApplication*;(4)启动项目,确保控制台无错误提示。通过以上步骤,完成文章微服务模块的基础构建与验证。
82 0
|
4月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
219 9
|
4月前
|
缓存 负载均衡 监控
微服务架构下的电商API接口设计:策略、方法与实战案例
本文探讨了微服务架构下的电商API接口设计,旨在打造高效、灵活与可扩展的电商系统。通过服务拆分(如商品、订单、支付等模块)和标准化设计(RESTful或GraphQL风格),确保接口一致性与易用性。同时,采用缓存策略、负载均衡及限流技术优化性能,并借助Prometheus等工具实现监控与日志管理。微服务架构的优势在于支持敏捷开发、高并发处理和独立部署,满足电商业务快速迭代需求。未来,电商API设计将向智能化与安全化方向发展。
|
7月前
|
NoSQL MongoDB 数据库
微服务——MongoDB实战演练——表结构分析
本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
72 1
微服务——MongoDB实战演练——表结构分析
|
7月前
|
NoSQL Java 数据库连接
微服务——MongoDB实战演练——技术选型
本节主要介绍技术选型中的两个重要工具:**mongodb-driver** 和 **SpringDataMongoDB**。其中,mongodb-driver 是 MongoDB 官方提供的 Java 驱动包,用于连接和操作 MongoDB 数据库,功能类似 JDBC 驱动。通过官方示例可快速上手。而 SpringDataMongoDB 是 Spring 生态的一员,封装了 mongodb-driver,提供了更简洁的 API,方便开发者在 Spring 环境中操作 MongoDB。两者各有优势,可根据实际需求选择合适的技术方案。
86 2