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

22|微服务拆分(二):三招搞定数据库表解耦

你好,我是姚琪琳。
上节课,我们学习了微服务拆分之初,需要搭建好的两个基础设施,一个是基于开关的反向代理,另一个是数据同步机制。有了这两个设施做保障,接下来就可以大刀阔斧地一一拆解了。
除此之外,我们还讲了如何用 API 来取代代码依赖。你可能已经发现了,这个实践与其说是解决了对于单体代码的依赖,不如说是解决了对于单体数据库的依赖。
诚然,对于保险系统以及大多数这种数据密集型系统来说,所有的操作最终都将体现到数据库上。在这类系统的改造过程中,最不好解决的问题莫过于数据库表的解耦了。
这种面向数据库编程在 21 世纪初的国内是十分流行的,像 Delphi、VB 等都提供了很方便的数据库连接组件,而 PowerBuilder 更是推出了可以直连数据库的 DataWindow,将数据的访问和展示耦合在了一起。
在这样的大背景下,将所有逻辑都放在客户端组件的 Smart UI 模式,以及将业务逻辑和数据访问逻辑混杂的“事务脚本模式”为什么如此流行,也就不难理解了。然而随着业务的发展,这种模式的弊病也越来越明显,很多团队都意识到了这个问题并着手解决。但在遗留系统中,这样的代码还是随处可见。
在微服务拆分的过程中,如何界定数据库表的所有权,进而拆分给不同的服务,就成了最为棘手的工作。这节课我们一起继续探索遗留系统的改造实践,按照从易到难的顺序,分别学习三种行之有效的方法,帮你搞定数据库表的解耦。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了微服务拆分过程中解决数据库表解耦的三种有效方法,分别是通过API调用取代连表查询、建立单独的查询数据库实现读写分离、以及冗余数据到核保服务中。这些方法为解决数据库表解耦提供了实用的技术指导。文章还提到了快照数据、业务数据和参考数据的冗余方式,以及它们的优缺点和应用场景。此外,还提到了在处理INSERT、UPDATE和DELETE的SQL时可以用API调用来取代。总的来说,本文为读者提供了解决微服务拆分过程中数据库表解耦问题的有效方法和实用技术指导。

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

全部留言(2)

  • 最新
  • 精选
  • Williamleelol
    姚老师你好: 咱们本个专栏主要讲遗留系统现代化,传统意义上基本都是一个大泥球式的单体服务开始。最近我接手却正好相反,服务分的很碎很细,并且有很多坏味道比如一个需求需要修改很多服务,典型的分布式单体。在众多问题中我有一点没想清楚,因为用到了非常多的faas,每个faas有薄(比如只做消息体转换)有厚(做业务流程处理)。个人风格是非常不建议这么做的因为会导致认知负载太高,几十个faas最终没人说的全,不知道一个流程是从哪里开始的,有问题排查成本也升高。但是话说回来faas真正解决的问题是什么呢?强调function的话最终我想不管如何管理也一定会变得数量特别多直到难以管理,最佳实践是什么样的? 辛苦~

    作者回复: 你好,这是一个非常好的问题,为了更准确地回答,我特意咨询了一下我的前同事,现腾讯云的Serverless专家架构师杨政权,以下是他的回答: FaaS解决的问题:FaaS平台的特点是更精细的资源分配、更精确的计费粒度、低运维成本以及弹性伸缩的能力,在我来FaaS主要解决两个问题: 1)企业的IT投资分配问题:FaaS属于Serverless的一个分支,对于大部分企业来说,尤其是成长期的SMB企业,运维一个K8S集群、虚拟机集群或者IDC并不会带来核心竞争力的提升,通过Serverless提供的低运维成本的方案,降低企业在基础运维、资源调度等方面的成本,从而把更多的IT投资分配到那些核心的业务能力提升上 2)传统容量预测的矛盾问题:资源准备的太多导致利用率多,资源准备的太少又可能会影响线上业务,FaaS这种跟随请求量进行主动扩容的模式让「准备的资源」和「实际所需的资源」尽量贴合;所以更适合的通常也是矛盾最突出的场景,那些业务有波峰波谷、量级难以预测,同时业务又对于实时性有较高要求的业务场景,如电商大促、批量的音视频处理、服务端渲染SSR 等 FaaS的粒度:一个好的FaaS应用设计应该可以充分地利用平台所提供的优势 1)通过业务的逻辑拆分分离特定的业务,代码体积、内存消耗和应用初始化时间降低,从而获得更快速的弹性扩容,提升该业务场景的吞吐量;和微服务类似,拆分之后在编程语言和技术栈的选择上也会更加灵活。 2)但是正如您所说,过度的拆分的确会带来新的问题,2019年Thoughtworks技术雷达就提出「Lambda pinball」的概念,并放到了On Hold的位置,过度的FaaS拆分很容易陷入构建分布式单体的陷阱中,还会导致冷启动过多的问题,降低FaaS实例的复用率。在拆分的时候仍然需要关注业务逻辑的内聚性,让每一个FaaS包含一个相对完整的应用场景,在逻辑边界的基础上进行物理边界的优化,通过Faas的实际运行消耗,如冷启动速度、内存闲置情况、实例并发数等指标进行优化。 3)目前FaaS的应用设计还缺少成熟的方法论支持,最佳的方式还是通过实际的运行结果,结合业务场景的要求进行实际压测,然后观察性能、成本和平台指标进行针对性的优化。

    2022-05-31
    7
  • peter
    文中以图片表示的复杂查询令人吃惊,没见过这么长的查询。 Q1 这么长的查询,一般需要多长时间? 比如100ms? Q2 除了时间,从实际应用的角度,这种复杂查询还有哪些问题?

    作者回复: 其实时间并不是主要问题,它既然能长成这个样子,业务方也一定是可以忍受的。最主要的问题是:1. 无法维护,2. 数据所有权不清楚

    2022-05-31
    1
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部