微服务改造:踩过的坑!

简介: 在技术团队从2~3人发展到百人规模的过程中,我见证了技术栈从JSP到前后端分离+SpringCloud微服务架构的演变。期间经历了系统拆分、数据库独立等挑战,如接口调用复杂、职责划分模糊、日志分散等问题。虽然初期遇到不少坑,但最终提升了系统的解耦和应对变化的能力。

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

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

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

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


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


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


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


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

微服务拆分的坑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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

目录
相关文章
|
Kubernetes Cloud Native 关系型数据库
提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
【4月更文挑战第9天】提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
1288 0
|
SQL druid 搜索推荐
最强最全面的数仓建设规范指南 (一)
本文将全面讲解数仓建设规范,从数据模型规范,到数仓公共规范,数仓各层规范,最后到数仓命名规范,包括表命名,指标字段命名规范等!
14582 2
|
Docker 容器
【Docker】掌握 Docker 镜像操作:从基础到进阶
【Docker】掌握 Docker 镜像操作:从基础到进阶
|
8月前
|
JSON Prometheus Cloud Native
全国空气质量查询API:让空气质量数据成为智慧生活的基石(含Python接入指南)
本文介绍空气质量数据服务的技术价值与接口架构,涵盖全国监测网络现状、API功能及技术指标,提供基于Python的快速接入示例,并展示在环境监测、智慧城市等场景中的应用潜力。
637 0
|
6月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1106 68
|
存储 数据安全/隐私保护
zookeeper 节点介绍及节点常用命令总结
zookeeper 节点介绍及节点常用命令总结
580 4
|
Linux Docker 容器
安装docker-18.06报错Error: libseccomp conflicts with docker-18.06
通过这些步骤,您可以成功在CentOS上安装Docker 18.06,并解决libseccomp的冲突问题。这些方法确保系统兼容性,并保证Docker的正常运行。
409 27
|
存储 监控 负载均衡
解读 CIA 三元组:信息安全的基石
【8月更文挑战第31天】
1944 1
|
Linux 开发工具 Windows
kali修改apt安装的源为国内源,提升访问速度,以及apt update ,apt upgrade和apt dist-upgrade的区别
kali修改apt安装的源为国内源,提升访问速度,以及apt update ,apt upgrade和apt dist-upgrade的区别
|
Java API 开发者
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
1356 0