遗留系统现代化实战
姚琪琳
Thoughtworks 资深咨询师
5615 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 30 讲
用户故事 (1讲)
遗留系统现代化实战
15
15
1.0x
00:00/00:00
登录|注册

23|微服务拆分(三):如何拆分存储过程?

你好,我是姚琪琳。
上节课我们学习了解耦数据库表的三种方法,单体架构拆分的挑战又下一城。
虽然在遗留系统中,用 Java 直接调用 SQL 语句十分常见,但真正的大 Boss,是调用链很深的存储过程。
在十几二十年前,将业务逻辑写在数据库的存储过程或函数中是一种潮流。虽然这种潮流有着当时的历史背景,但在现在看来显然是“最差实践”了。如果遗留系统中存在大量的存储过程,该如何应对呢?我们今天就来学习这方面的内容。

将存储过程或函数封装成 API

在遗留系统中,存储过程和函数往往用来封装复杂的业务逻辑。比如“审核核保申请”这样一个功能,可能会修改二十多张表。这里的表有的与核保相关,也有的与核保关系并不大,比如保单表。
然而用存储过程或函数来编写业务逻辑的风气一旦形成,很多简单的业务逻辑,比如对单张或少量表的修改,开发人员也会自然而然放到存储过程或函数里。
我曾经见过用数据库函数来比较时间前后关系的自定义函数,明明任何一门编程语言都提供了这种基本功能,但当时的开发人员却偏偏钟爱 SQL,真的是难以理解。
这样一来,真正的代码反而变成了薄薄的一层胶水,真的是面向数据库编程啊。看到这你先别忙着叹气,我们一起理理思路,争取“分而治之”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在微服务架构中存储过程和函数拆分的重要性,以及在遗留系统中如何封装复杂业务逻辑并将其改造成API的方法。作者提出了三种情况下的处理方式,并通过具体案例展示了拆分过程中的修改和迁移方法。同时,还探讨了将SQL转换成API调用的实践,以及如何通过重试来取代回滚,解决了事务性操作转换成非事务性操作的问题。此外,文章还提到了分布式事务的解决方案,以及API调用可能带来的新问题。通过本文,读者可以了解在微服务架构中如何拆分存储过程,并将其改造成API,以及在拆分过程中可能遇到的挑战和解决方法。文章还分享了一些数据拆分时的小技巧,包括以重试的方式来代替回滚操作、用批量API来取代单次API的循环调用,以及用异步事件来取代同步API。文章以实际案例和技术思路为主线,为读者提供了在微服务架构中存储过程拆分和API改造的实用指导和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《遗留系统现代化实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 雨落~紫竹
    遗留系统最可怕的是牵一发而动全身 而且是导致的数据问题 很难立刻发现 所以感觉在没有对那块逻辑足够的认知 先不要动他

    作者回复: 但那样数据表就拆分不出来了

    2022-07-10
    2
  • aoe
    遗留系统中好像没有什么是API不能解决的!
    2022-06-01
    3
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部