当前位置: 首页 > news >正文

微服务改造:踩过的坑!

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

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

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

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

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

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

微服务拆分的坑

  • 每个微服务建独立的数据库呢,还是可以共用?

一般来说每个微服务创建自己独立的数据库,但如果微服务拆分过细就会存在数据库也过细。造成大量的沟通与开发成本。

  • 原本一个很小的功能一条 SQL 设定,现在让我调用 3~4 个接口来实现?

某个功能开发到一半,发现表里没数据,然后就想着创建视图来完成。开发人员不理解为什么以前一条 sql 能解决的问题,现在要我调用 3~4 个接口才能实现,并且性能和效率差的不是一星半点。现在开发时间又紧还让我找别人要接口,人家任务也都排的满满的。这时很多开发者就会悄悄的用自己的方法来实现比如用视图,存储过程。如果项目组又没有架构师那就是研发经理没发现基本上就是这么干了。

  • 调这么多服务太麻烦了,自己开小灶悄悄实现?

当任务紧时,很多开发者发现调这么多服务太麻烦了,自己开小灶悄悄实现。如果没有代码审查环节,基本上出来的微服务就是乱七八糟的代码了。

  • 不知道哪个微服务该负责特定的业务逻辑,职责划分模糊。

这个问题和上一个有点类似,上面可能是开发者主动开小灶。这个问题大多数是开发者无意识的行为,因为他认为这个功能就是自己的。当然这主要是沟通和负责划分的问题。

  • 一个小需求的改动可能涉及多个微服务的协调,沟通成本极高。

开发过程中快开发完,发现需要改动。有的是需求问题、有的是理解问题还有的可能是设计上的问题。这时需要调整,这也是软件开发必然会出问题的事情。以前一条线都是自己的调整很简单,但现在涉及多个微服务的协调,沟通成本就极高了。

  • 不同微服务的开发进度不一致,影响整体项目上线时间。

服务拆分后就会存在协同开发,不同功能不同团队或人员负责。此时就会出现进度不一致,功能优先等级也不一致的问题。当然也有解决办法比如先定义好接口通过伪代码或接口平台实现伪接口。

  • 微服务的日志分散在各个地方,排查问题变得困难。

刚刚开发时大家都是开几个窗口看日志,每次找问题以前 IDE 直接链过去了,现在还得找接口路径,找到微服务再去查。另外一个问题就是 IDE 项目启动过多电脑跟不上了。当然解决方案就是加内存换固态盘,日志搭建 ELK 等等方式。

这的确在改变原本团队的开发习惯,不过坚持下来后会发现微服务之间拆分与解耦在以后业务量变大后、应对变化需求能力、运维及交付成本方面都会带来很多的好处。

但前期服务拆的太细这种问题会被放大,所以前期项目还是不要拆分的太细。

其实回头看这些问题都已经有很有成熟的解决文案,只不过第一次改造项目时经验不足,所以会暴露出各种问题出来,走了不少弯路。比如每个微服务建独立的数据库?成熟的方案就是每个微服务创建自己独立的数据库,跨库数据通过接口来完成。但真正实施过程中会发现每个成员接收程度、开发时间不足、单个功能需要找多人调用接口、原本的开发习惯等等因素,就会出现各种各样的问题。所以文章更多的不是微服务的方案而是一些经验,让初次改造项目的管理者、开发者避开一些坑。

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


http://www.mrgr.cn/news/71018.html

相关文章:

  • PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级
  • C语言函数指针,重命名使用
  • linux GPIO
  • 用K8S部署nginx负载均衡
  • 第3篇 滑动开关控制LED__ARM汇编语言工程<一>
  • vscode的一些使用心得
  • 2. Sharding-JDBC广播表和绑定表操作
  • 阿里云Linux安装Docker服务报错问题
  • 【轻松远程处理图片:在线图片编辑工具Photopea群晖NAS部署解决方案】
  • 解决 C/C++ 中 “invalid use of incomplete type” 编译错误
  • 【前端】深入浅出的React.js详解
  • Spring Boot编程训练系统:深入设计与实现
  • 双指针算法的妙用:提高代码效率的秘密(3)
  • 【三宝的身高】
  • 数据湖系列之四 | 数据湖存储加速方案的发展和对比分析
  • C# 后端方法返回时间戳
  • 2025年河南定向选调生报名时间
  • java ssm 个人学习管理系统 学习安排 学生在线学习管理 源码 jsp
  • 【GDB调试】智慧中控项目的调试
  • 【Linux进程篇4】谈:操作系统进程调度各种基本状态(运行,挂起,阻塞等)
  • 第18篇 :深入剖析systemverilog中 randomize 静态static约束案例(四)
  • 中国人工智能影响力人物谌鹏飞行善公益演讲--《AI就是爱》
  • 如何选择适合自己需求的可编程晶振?
  • [定时器]
  • AI Agent智能数字员工解决案例
  • 关于第二台及其的 Anaconda的安装信息