68 lines
7.3 KiB
Markdown
68 lines
7.3 KiB
Markdown
|
||
|
||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||
|
||
|
||
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课程,所以我希望你能认真钻研、学透这门课程,早日成为一名真正合格的数据库架构师。
|
||
|
||
|
||
|
||
|