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

本文涉及的产品
日志服务 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 个 ,功能模块的相关性增加,每个服务的责任范围更大,但仍然保持了适当的解耦。这样可以简化服务管理,同时保留扩展和维护的灵活性。

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
消息中间件 人工智能 供应链
go-zero 微服务实战系列(二、服务拆分)
go-zero 微服务实战系列(二、服务拆分)
|
7天前
|
存储 消息中间件 SQL
微服务改造血泪史:数据库拆分踩过的那些坑!
本文复盘了传统项目改造成微服务架构时,数据库拆分过程中遇到的问题。主要问题包括:1. 数据库拆分过细,导致跨服务调用频繁,破坏服务独立性;2. 数据一致性难以保证,分布式事务管理复杂;3. 跨服务查询影响性能,复杂查询难以实现。初次改造时应避免过度拆分,逐步演进架构。
22 0
|
1月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
86 4
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
285 17
微服务框架Dubbo环境部署实战
|
3月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
155 3
|
3月前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
89 3
|
3月前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
60 3
|
4月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
4月前
|
缓存 NoSQL Redis
go-zero微服务实战系列(七、请求量这么高该如何优化)
go-zero微服务实战系列(七、请求量这么高该如何优化)
|
4月前
|
缓存 NoSQL 数据库
go-zero微服务实战系列(五、缓存代码怎么写)
go-zero微服务实战系列(五、缓存代码怎么写)

热门文章

最新文章