分库分表后如何部署上线?

  • 时间:
  • 浏览:1

假设,大家是对一张叫做 test_tb 的表进行拆分,肯能我并能 进行双写,系统里头和 test_tb表有关的业务刚刚必定会加入一段双写代码,一并往老库和新库中写,只是进行部署,那么

增量数据:在该次部署后,数据库表 test_tb 的新产生的数据,大家称之为增量数据。

你你你你是什么只是不停机部署法,这里我并能 先引进曾经概念: 历史数据 和 增量数据 。

大家先来讲曾经段子

(1)先计算我并能 迁移的那张表的 max(主键) 。在迁移过程中,只迁移 db-old 中 test_tb 表里,主键小等于该 max(主键) 的值,也只是所谓的历史数据。

面试官:“有并发的经验没?”

应聘者:“有许多。”

面试官心理活动:你你你你是什么仁兄讲的咋办 那么像网上的博客抄的,容我再问问。

(1)对 db-old 的 test_tb 表的历史数据发出 delete 操作,数据还未删除,就被迁移应用线程池池给迁走了。此时 delete 操作在消息队列里还有记录,后期订阅应用线程池池订阅到该 delete 操作,能不还并能进行删除。

肯能你担心进去了,真派你去做分库分表咋办 办?OK,从不怕。我赌你试用期碰不还并能你你你你是什么活。肯能不还并能进行分库分表,必定对业务非常熟。还在试用期的你,必定对业务不用太熟,肯能领导让他你你你你是什么活,我不还并能说他有一颗大心脏。

(6)新老库一致性验证,去除代码中的双写代码,将涉及到 test_tb 表的读写操作,指向新库。

OK,不用。这里大家对 delete 操作和 update 操作做分析,肯能不还并能这曾经操作才会造成历史数据变动, insert 进去的数据都在属于增量数据。

评价:

步骤(1)~步骤(2)流程图如下



(3)写曾经订阅应用线程池池,订阅binlog(mysql中含 canal 。至于oracle中,大家就随缘此人 写吧)。只是将订阅到到数据通刚刚边件,写入新库。

应聘者:“前后端分离啊,限流啊,分库分表啊。。”

(5)订阅应用线程池池将订阅到到数据,通刚刚边件写入新库

这里有特殊情况表,肯能你的表用的是uuid,那么求出 max(主键) ,那就以创建时间作为划分历史数据和增量数据的办法。肯能你的表用的是uuid,又那么创建时间你你你你是什么字段,我相信机智的你,一定有办法区分出历史数据和增量数据。

引言

不过,只是面试官为了卖弄此人 的技术,喜欢那么问

应聘者:“bala。bala。bala。。”

ps: 这里教大家许多技巧啊,肯能你真的没做过分库分表,又想吹一波,涨一下工资,建议答你你你你是什么方案。肯能你你你你是什么方案比较low,low到没那此东西能不还并能深挖的,只是答你你你你是什么方案,比较靠谱。

只是此方案有曾经缺点, 累! 不止身体累,心也累!你想看到,另曾经定六点刚开始,你五点把数据库迁移好,只是不知咋办 滴,应用线程池池切新库只是不怎么大问题。于是,眼瞅着天就要亮了,赶紧把数据库切回老库。第4个晚上继续那么干,大家说是身心俱疲。

于是步骤如下

你你你你是什么大问题问的很泛,只是回答你你你你是什么大问题建议此人 主动把分表的策略,以及怎么部署的办法讲出来。肯能那么答,显得严谨许多。

历史数据:在该次部署前,数据库表 test_tb 的有关数据,大家称之为历史数据。

ok。。你你你你是什么大问题具体指向了分库分表的某个方向了,你从不主动答怎么进行部署的。等面试官我不出乎 ,你再答。肯能面试官没问,在面试最后曾经环节,面试官会让他问让好多个大问题。你就问

(2)系统中,绝大累积的业务需求是读请求,写请求比较少。

文章来源:https://segmentfault.com/a/1190000016475827

推荐阅读:https://www.roncoo.com/course/list.html?courseName=mysql

大家想一下,那么做,是都在造成了严重的代码入侵。将非业务代码嵌入业务代码,那么做,后期删代码的刚刚不怎么累。

另外,肯能面试官的大问题是

ok,指点到这里。面试另曾经只是一场斗智斗勇的过程,扯远了,回到大家的主题。

(2)还是写曾经迁移应用线程池池,迁移历史数据。步骤和后边类似,不啰嗦了。

只是迁移流程如下

后边的办法有曾经硬伤,注意我有搞笑的话

注意了,在你你你你是什么阶段,大家不消费消息队列里的数据。大家只发写请求,消息队列的消息堆积情况表不用太严重!

(2.2)还五种生活生活是 ,一次取150条(不一定150条,具体此人 定,让他是举例),只是像拼字符串一样,拼在一并。用md5进行加密,得到一串数值。新库一样如法炮制,也得到一串数值,比较两串数值与非 一致。肯能一致,继续比较下150条数据。肯能发现不一致,用二分法选者不一致的数据在0-25条,还是26条-150条。以此类推,找出不一致的数据,进行记录即可。

历史数据:在该次部署前,数据库表 test_tb 的有关数据,大家称之为历史数据。

(2.1)五种生活生活办法是,只验关键性的好多个字段与非 一致。

(1)先验数量与非 一致,肯能验数量比较快。

应聘者:“这!!!!!!”

ps: 我发现曾经很神奇的大问题。肯能只是公司用的技术比较low,那么许多求职者为了提高此人 的竞争力,就会将许多高大上的技术写进此人 的low项目中。只是呢,他出去面试害怕碰到从你你你你是什么公司出来的人,毕竟从你你你你是什么公司出来的人,一定知道此人 刚刚公司的项目情况表。只是为了圆谎,他就会说:“大家从事的是你你你你是什么公司的老项目改造工作,用了只是新技术进去!”

大家从不随便说说你你你你是什么办法low,随便说说经常随便说说你你你你是什么办法可靠性很强。只是我相信各位读者所在的公司一定都在那此很牛逼的互联网公司,肯能大家的产品夜里1点的用户活跃数还有超过11150的,大家握个爪!毕竟都在该人 都在那此电商公司的,大累积产品夜里都没啥流量。只是此方案,从不那么可取之处。

只是迁移流程如下

大致思路只是,挂曾经公告,夜里停机升级,只是夜里把服务停了,跑数据迁移应用线程池池,进行数据迁移。

这里相当于介绍一下吧,这篇的篇幅太长了,大家心里有底就行。

大家此人 摸着良心想一下,肯能你真的做过分库分表,让他我不出乎 怎么部署的么?只是大家来学习一下怎么部署吧。

(2)在代码中,与test_tb有关的业务,多加第一根往消息队列中发消息的代码,将操作的sql发送到消息队列中,至于消息体怎么组装,大家自行考虑。

(4)将迁移应用线程池池下线,写一段订阅应用线程池池订阅消息队列中的数据

面试官:“那大家为了正确处理并发,做了那此优化?”

(3)系统上线。另外,写一段迁移应用线程池池,迁移 db-old 中 test_tb 表里,主键小于该 max(主键)的数据,也只是所谓的历史数据。

分表有那此策略啊?大家用哪种啊?

(2)在代码中,与 test_tb 有关的业务,多加第一根往消息队列中发消息的代码,将操作的sql发送到消息队列中,至于消息体怎么组装,大家自行考虑。 并能 注意的是, 只发写请求的sql,只发写请求的sql,只发写请求的sql。重要的事情说三遍!

分表有那此策略啊?大家用哪种啊?

顺便科普一下,你你你你是什么后边件。现在流行的分库分表的后边件有五种生活,五种生活是 proxy 形式的,类似 mycat ,是并能 额内部人员署一台服务器的。还五种生活生活是 client 形式的,类似当当出的 Sharding-JDBC ,只是曾经jar包,使用起来十分轻便。我此人 偏向 Sharding-JDBC ,你你你你是什么办法,不用额内部人员署,无许多依赖,DBA只是用改变原有的运维办法。

ps: 这里教大家许多技巧啊,肯能你真的没做过分库分表,又想吹一波,涨一下工资,建议答你你你你是什么方案。肯能你你你你是什么方案比较low,low到没那此东西能不还并能深挖的,只是答你你你你是什么方案,比较靠谱。

还记得大家在 双写部署法(一) 里介绍的,往消息队列里发的消息,都在写操作的消息。而 binlog 日志记录的也是写操作。只是订阅该日志,并能满足大家的需求。

ok。。你你你你是什么大问题具体指向了分库分表的某个方向了,你从不主动答怎么进行部署的。等面试官我不出乎 ,你再答。肯能面试官没问,在面试最后曾经环节,面试官会让他问让好多个大问题。你就问

(1)不还并能写请求的sql对恢复数据才有用。

从不惊讶,写这篇文章前,我特意去网上看到下分库分表的文章,很神奇的是,都在讲咋办 进行分库分表,却不说分完刚刚,咋办 部署上线的。另曾经在面试的刚刚就比较尴尬了。

那么你你你你是什么情况表下,面试官会有五种生活回答。第五种生活,面试官硬着头皮随便扯。第二种,面试官真的做过,据实回答。记住,面试官咋办 回答的不重要。重点的是,你你你你你是什么大问题出去,会给面试官五种生活错觉:"你你你你是什么小伙子真的做过分库分表。"

增量数据:在该次部署后,数据库表 test_tb 的新产生的数据,大家称之为增量数据。

顺便科普一下,你你你你是什么后边件。现在流行的分库分表的后边件有五种生活,五种生活是 proxy 形式的,类似 mycat ,是并能 额内部人员署一台服务器的。还五种生活生活是 client 形式的,类似当当出的 Sharding-JDBC ,只是曾经jar包,使用起来十分轻便。我此人 偏向 Sharding-JDBC ,你你你你是什么办法,不用额内部人员署,无许多依赖,DBA只是用改变原有的运维办法。

面试官:"谈谈分库分表吧?"

假设,大家是对一张叫做 test_tb 的表进行拆分,肯能我并能 进行双写,系统里头和 test_tb表有关的业务刚刚必定会加入一段双写代码,一并往老库和新库中写,只是进行部署,那么

(3)系统上线。另外,写一段迁移应用线程池池,迁移 db-old 中 test_tb 表里,主键小于该 max(主键)的数据,也只是所谓的历史数据。

(2)在代码中,与 test_tb 有关的业务,多加第一根往消息队列中发消息的代码,将操作的sql发送到消息队列中,至于消息体怎么组装,大家自行考虑。 并能 注意的是, 只发写请求的sql,只发写请求的sql,只发写请求的sql。重要的事情说三遍!

只是此方案有曾经缺点, 累! 不止身体累,心也累!你想看到,另曾经定六点刚开始,你五点把数据库迁移好,只是不知咋办 滴,应用线程池池切新库只是不怎么大问题。于是,眼瞅着天就要亮了,赶紧把数据库切回老库。第4个晚上继续那么干,大家说是身心俱疲。

步骤(3)~步骤(4)流程图如下



咋办 验数据一致性

对 update 的操作类似,不赘述。

后边步骤(4)~步骤(6)的过程如下



这里大家肯能会有曾经大问题,在步骤(1)~步骤(3),系统对历史数据进行操作,会造成不一致的大问题么?

不过,只是面试官为了卖弄此人 的技术,喜欢那么问

这里有特殊情况表,肯能你的表用的是uuid,那么求出 max(主键) ,那就以创建时间作为划分历史数据和增量数据的办法。肯能你的表用的是uuid,又那么创建时间你你你你是什么字段,我相信机智的你,一定有办法区分出历史数据和增量数据。

(4)检验一致性,没大问题就切库。

有没那此办法,能不还并能正确处理你你你你是什么大问题的?

(1)不还并能写请求的sql对恢复数据才有用。

(2)系统中,绝大累积的业务需求是读请求,写请求比较少。

记录所有数据库表形态变更(类似CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。binlog不用记录SELECT和SHOW类似于操作,肯能类似于操作对据五种生活并那么修改。

怎么部署

(1)打开binlog日志,系统正常上线就好

你刚才刚好有提到分库分表的相关大问题,大家当时部署的刚刚,先停机。只是夜里迁移数据,只是第十天将流量切到新库,你你你你是什么方案太累,我不出乎 贵公司有那么那此更好的方案?

(1)先计算我并能 迁移的那张表的 max(主键) 。在迁移过程中,只迁移 db-old 中 test_tb 表里,主键小等于该 max(主键) 的值,也只是所谓的历史数据。

面试官:“大家分库分表后,怎么部署上线的?”

步骤如下:

评价:

你刚才刚好有提到分库分表的相关大问题,大家当时部署的刚刚,先停机。只是夜里迁移数据,只是第十天将流量切到新库,你你你你是什么方案太累,我不出乎 贵公司有那么那此更好的方案?

原因 有二:

(1)出曾经公告,比如“今晚00:00~6:00进行停机维护,暂停服务”

另外,肯能面试官的大问题是

那么,请你好好思考一下,大家的老系统是怎么平滑升级为新系统的!

你你你你是什么只是不停机部署法,这里我并能 先引进曾经概念: 历史数据 和 增量数据 。

ok,指点到这里。面试另曾经只是一场斗智斗勇的过程,扯远了,回到大家的主题。

大家咋办 进行分库分表的?

注意了,在你你你你是什么阶段,大家不消费消息队列里的数据。大家只发写请求,消息队列的消息堆积情况表不用太严重!

有的,订阅 binlog 日志。关于 binlog 日志,我尽量下周写一篇《研发应该掌握的binlog知识》,这边让他介绍一下作用

原因 有二:

大家从不随便说说你你你你是什么办法low,随便说说经常随便说说你你你你是什么办法可靠性很强。只是我相信各位读者所在的公司一定都在那此很牛逼的互联网公司,肯能大家的产品夜里1点的用户活跃数还有超过11150的,大家握个爪!毕竟都在该人 都在那此电商公司的,大累积产品夜里都没啥流量。只是此方案,从不那么可取之处。

你你你你是什么大问题问的很泛,只是回答你你你你是什么大问题建议此人 主动把分表的策略,以及怎么部署的办法讲出来。肯能那么答,显得严谨许多。

(2)写曾经迁移应用线程池池,读 db-old 数据库,通刚刚边件写入新库 db-new1 和 db-new2 ,具体如下图所示



(3)校验迁移前后一致性,没大问题就切该累积业务到新库。

后边步骤(1)~步骤(3)的过程如下



等到 db-old 中的历史数据迁移完毕,则刚开始迁移增量数据,也只是在消息队列里的数据。

至于验具体的字段,有五种生活办法:

后边步骤(1)~步骤(3)的过程如下



(3)校验迁移前后一致性,没大问题就切该累积业务到新库。

(2)对 db-old 的 test_tb 表的历史数据发出 delete 操作,数据肯能删除,迁移应用线程池池迁不走该行数据。此时 delete 操作在消息队列里还有记录,后期订阅应用线程池池订阅到该 delete 操作,再执行一次 delete ,从不用对一致性有影响。

肯能你担心进去了,真派你去做分库分表咋办 办?OK,从不怕。我赌你试用期碰不还并能你你你你是什么活。肯能不还并能进行分库分表,必定对业务非常熟。还在试用期的你,必定对业务不用太熟,肯能领导让他你你你你是什么活,我不还并能说他有一颗大心脏。

合理利用此人 每一分每一秒的时间来学习提升此人 ,从不再用"那么时间“来掩饰此人 思想上的懒惰!趁年轻,使劲拼,给未来的此人 曾经交代!

那么你你你你是什么情况表下,面试官会有五种生活回答。第五种生活,面试官硬着头皮随便扯。第二种,面试官真的做过,据实回答。记住,面试官咋办 回答的不重要。重点的是,你你你你你是什么大问题出去,会给面试官五种生活错觉:"你你你你是什么小伙子真的做过分库分表。"