前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >迁移到MySQL的架构演进(一)

迁移到MySQL的架构演进(一)

作者头像
jeanron100
发布2019-06-18 19:40:53
6390
发布2019-06-18 19:40:53
举报

这是学习笔记的第 2010 篇文章

我们经过了一个相对漫长的周期把SQL Server业务迁移到了MySQL分布式架构,整个过程算是跌宕起伏。我来复现一下这个过程。

迁移前,我们做了业务梳理,发现这个业务其实可以划分为两个大类,一个是数据业务,一个是账单业务。数据业务负责事务性数据,而账单业务是状态数据的操作历史。整体的系统现状梳理如下表10-4。

表10-4 数据业务与账单业务的对比

数据业务

账单业务

数据量

400G+

1024G+

数据特点

数据读写(插入,修改,查询)

数据写入为主(插入,查询)

数据属性

事务性数据

流水型数据

数据保留周期

物理备份保留周期1个月账单数据保留在2周以上

数据同步策略

数据业务通过调用存储过程生成账单数据

改造前架构如下图所示,对数据做了过滤,整体上库里面的表有上万张,虽然是多个独立的业务单元,但是状态数据和流水数据是彼此通过存储过程级联调用。

对这样一个系统做整体的改造,存在大量存储过程,业务耦合度较高的情况下,要拆分为分布式架构是很困难的,主要体现在3个地方:

(1)研发和运维对于分布式架构的理解有限,认为要改造可行,但是改动量极大,基本会在做和不做之间摇摆。

(2)对于大家的常规理解来说,希望达到的效果是一种透明平移的状态,即原来的存储过程我们都无缝的平移过来,显然在MySQL分布式的架构下,这种方案是不可行的,而且如果硬着头皮做完,那么效果也肯定不好。

(3)对于分布式的理解,不是仅仅把业务拆开那么简答,我们始终要找到一个平衡点,不是所有业务都需要拆分做成分布式。分布式能带来好处,但是同时分布式也会带来维护的复杂成本。

所以对于架构的改进,我们为了能够落地,同时在这个过程中尽可能和研发团队保持架构的同步迭代,我们整体上走过了如下图所示的4个阶段。

(1)功能阶段:梳理需求,对存储过程进行转义,适配MySQL方向

(2)架构阶段: 对系统架构和业务架构进行改进设计,支持分布式扩展

(3)性能阶段: 对系统压力进行增量测试,全量测试,全面优化性能问题

(4)迁移阶段: 设计数据迁移方案,完成线上环境到MySQL分布式环境的迁移

我们主要讨论上面3个阶段,我总结为8个架构演进策略,我们逐个来说一下。

10.4.2 功能设计阶段

策略1:功能平移

对于一个已经运行稳定的商业数据库系统,如果要把它改造为基于MySQL分布式架构,很自然会存在一种距离感,这是一种重要不紧急的事情,而且从改进的步调来说,是很难一步到位的。所以我们在这里实行的是迭代的方案,如图所示。

就如同大家开始预期的那样,既然里面有大量的存储过程逻辑,我们是不是把存储过程转义到MySQL里面就可以了呢。在没有做完这件事情之前,大家谁都不能做这个决定,况且MySQL单机的性能和商业数据库相比本身存在差距,在摇摆不定中,我们还是选择既有的思维来进行存储过程转义,

在初始阶段,这部分的时间投入会略大一些,在功能和调用方式上,我们需要做到这种适配,尽可能让应用层少改动或者不改动逻辑代码。

存储过程转义之后,我们的架构演进才算是走入了轨道,接下来我们要做的是系统拆分。

10.4.3 系统架构演进阶段

策略2:系统架构拆分

我们在之前做业务梳理达成的共识是:系统分为数据业务和账单业务,那么我们下一步的改造的目标也很明确了,一来数据库的存储容量太大,一个TB级别的MySQL库,存在上万张表,而且业务的请求极高,很明显单机存在着较大的风险,系统拆分是把原来的一个实例拆成两个实例,通过这种拆分就能够强行把存储过程的依赖解耦。而拆分的核心思路是对于账单数据的写入从实时转为异步,这样对于前端的响应就会更加高效。

拆分后的架构如下图所示。

当然拆分后,新的问题出现了,账单业务的写入量按照规划是很高的,无论从单机的写入性能和存储容量都难以扩展,所以我们需要想出新的解决方案。

策略3:写入水平扩展

账单数据从业务模型上属于流水型数据,不存在事务,所以我们的改进就是把账单业务的存储过程转变为insert语句,在转换之后,我们把账单数据库改造为基于中间件的分布式架构,这个过程对于应用同学来说是透明的,因为它的调用方式依然是SQL。

同时因为之前的账单数据有大量的表,数据分布参差不齐,表结构都相同,所以我们也借此机会把数据入口做了统一,根据业务模型梳理了几个固定的数据入口。这样一来,对于应用来说,数据写入方式更简单,更清晰了,改造后的架构如下图

这个改造对于应用同学的收益是很大的,因为这个架构改造让他们直接感受到不用修改任何逻辑和代码,数据库层就能够快速实现存储容量和性能的水平扩展。

账单的改进暂时告一段落,我们开始聚焦于数据业务,发现这部分的读请求非常高,读写比例可以达到8:1左右,我们继续开始架构的改进。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档