00 开篇词 从业务出发,开启海量 MySQL 架构设计

你好,我是姜承尧(常用ID:破产码农),目前是腾讯金融数据平台与研发中心总监。

我与 MySQL 结缘已有十余年,最开始在久游开启了数据库职业生涯,接着在网易负责数据库内核、云数据库开发,现在腾讯负责金融支付系统的数据库开发。

毕业至今,我一直从事 MySQL 相关的工作(比如运维、平台开发、内核开发、云计算开发),经历了无数个 DBA 必经的通宵之旅,也因此累积了无数架构实战经验。

我与 MySQL 相伴相随

在久游工作时,我负责全国最为热火的网游劲舞团,那时只要说你是负责劲舞团的 DBA,身上都闪着光芒,但谁又能想到,我曾遇到过连续 72 小时的加班回档全服游戏数据。为了避免再次发生类似情况,早在 2008 年我就在久游设计了多实例高可用架构,并结合 LVM 快照功能,防止下一次游戏升级可能导致的业务数据错乱等情况。

我可以说是国内最早从事 MySQL 内核工作的 DBA。那时随着海量数据的不断发展,业务对于 MySQL 数据库的要求变得更为“苛刻”,不但要能够使用 MySQL,还要能对内核进行额外的开发。为此,我深入 MySQL 内核设计领域,为迎合 SSD 技术的发展,独立开发了 SBP(Secondary Buffer Pool)架构,并在久游、网易等业务中大规模使用。

在网易期间,我发现 MySQL 数据半同步复制功能不断改进,当时就预见它将很快进入金融核心业务领域,于是主导网易开源 MySQL 分支版本 InnoSQL,设计并开发出金融级 MySQL 高可用架构 VSR,VSR 同时作为开源数据库组件,成功应用于某四大行核心系统

2017 年来到腾讯后,我主导了新一代腾讯金融核心数据库架构的设计与研发工作,让各位小伙伴所使用的金融与支付功能得到了更为安全的保障。

可以说,MySQL 数据库在互联网业务中的成功,让我获益良多:

  • 收入不断攀升,比起其他种类数据库,MySQL 收入显然优势突出。目前,一线城市的数据库从业人员要达到 50 万是很轻松的一件事情,若去互联网公司,薪资可以说上不封顶。
  • 作为一份职业的成就感,MySQL 带给我太多的“感动”。伴随着互联网的崛起,MySQL 已经成为互联网公司数据库的标准配置。看到自己运维开发的数据库能够支撑数以万计的用户,这种感觉真的是好极了。

我时常思考,如何将自己这么多年在 MySQL 方面的知识沉淀形成方法论进行输出,希望能有更多的同学享受到 MySQL 发展的红利。

怎么用好 MySQL 呢

虽然这些年先后出版过 《MySQL技术内幕》《MySQL内核》 系列三本书,但相对理论,每本书的方向都较为专一,未能有效地从整个业务的全链路角度去分享一个互联网海量 MySQL 架构的实现

同样,纵观整个业界,各技术书籍也好,在线课程也罢,都只专注于怎么用好 MySQL 的某一个功能,并没有站在业务的角度去考虑,怎么设计一个海量并发业务的 MySQL 数据库架构

比如,站在理论角度看,自增的 INT 类型用于主键没有问题,但站在类似双 11、春节红包的业务角度看,INT 类型做核心业务主键非常不可取,甚至会带来无尽的麻烦。

再比如,你肯定知道用MySQL 复制技术可以搭建一个高可用架构,但结合不同业务类型,一定要数据库层去完成高可用的架构吗?不一定!因为数据库是有状态的,当发生问题时,切换速度可能比较慢,你其实可以通过与业务相结合的方法去设计一套高可用的架构。

总之,数据库学到最后,要与业务紧密结合,站在业务的角度,全流程地进行思考,这样才能设计出真正好用的数据库架构。

非常有幸,收到拉勾教育平台的邀请,给了我再次进行 MySQL 创作的动力,拉勾网上有许多技术同学,他们有着一颗对知识渴望的心,希望学习对其工作真正有帮助的课程。

所以我将着力打造好这门课程,结合现阶段你学习 MySQL 时存在的痛点,如对于 MySQL 8.0 新特性与业务结合、金融级数据库高可用设计、分布式架构设计能力等, 用自己超过 15 年的一线 MySQL 工作经验,帮助你从业务全流程的角度看待数据库系统,设计出一个基于 MySQL 的海量并发系统。同时,也希望你能在学完这门课程后,形成自己的数据库架构方法论,并积极交流与探讨,不断成长。

课程设计

总的来说,我通过表结构设计、索引设计、高可用架构设计、分布式架构设计,由浅入深、循序渐进地与你一起打造出一个能支撑海量的并发访问的分布式 MySQL 架构。

模块一:表结构设计,该模块中我会以实际的业务为案例分析,先带你分析不同字段类型的选型,然后再学习 MySQL 中表的设计,比如表结构设计、访问设计、物理存储设计。通过模块一解决你表结构设计的痛点问题,让你打好架构设计最为基础的工作。

又因为单表的设计不足以支撑业务上线,所以在学完“表结构设计”后,模块二就是索引的设计。在该模块中,我会通过讲述索引的基本原理,层层推进到索引的创建和优化,最后触达复杂 SQL 索引的设计与调优,比如多表 JOIN、子查询、分区表的问题。希望学完这部分内容之后,你能解决线上所有的 SQL 问题,不论是 OLTP 业务,还是复杂的 OLAP 业务。

那么在讲完表结构与索引设计之后,业务上线必不可少的就是高可用的环节,而 MySQL 作为一个开源的数据库,虽然提供了大量的高可用解决方案,但或多或少存在不少问题。所以模块三高可用的架构设计中,我会层层递进,手把手教你搭建一个完整的、可靠的、符合各种业务类型的高可用解决方案。

除此之外,海量的业务还会涉及分布式架构的设计,这其实对当前业务与 DBA 同学来说,是非常具有挑战性的技术难点。而在模块四分布式架构中,我将会从分布式架构概述、分布式表结构设计、分布式索引设计、分布式事务等角度展开。相信我,学完这部分内容,你会觉得分布式并不是一个很难的架构,对于各种分布式架构中的难题,可以做到信手拈来。

模块五偏向拓展,是对一些数据库设计中热门话题的分析,当你学完前四部分的内容后,进阶学习这些问题,能从更宏观、更上层的角度去设计出一个更好的架构,解决对应的问题,比如热点更新问题、数据迁移等问题。

总的来说,这门课值得你期待,也是我所认为最具有架构实战的 MySQL课程,所以我希望你能认真钻研、学透这门课程,早日成为一名真正合格的数据库架构师。