gitbook/分布式数据库30讲/docs/271369.md
2022-09-03 22:05:03 +08:00

11 KiB
Raw Permalink Blame History

开篇词|为什么要学习分布式数据库?

你好我是王磊你也可以叫我Ivan现在是光大银行首席数据架构师。这门课我想和你聊聊分布式数据库这个话题。

说起分布式数据库啊,很多人的第一反应是,这东西还很新吧?一般的公司是不是根本就用不上?我有必要学吗?

分布式数据库可以解决什么问题?

简单来说分布式数据库就是用分布式架构实现的关系型数据库。注意我们说的是关系型数据库所以像MongoDB这样的NoSQL产品不是我们这门课要讲的重点。

那为什么要用分布式架构呢原因很简单就是性能和可靠性。由于各种原因IBM大型机这样的专用设备已经不再是多数企业的可选项而采用x86架构的通用设备在单机性能和可靠性上都不能满足要求因此分布式架构就成为了一个必然的选择。

你可能会问哪来那么多高性能和高可靠性需求有人用吗别说还真不少。近几年阿里巴巴、腾讯、百度、字节跳动、美团、滴滴、快手、知乎、58等互联网公司都已经开始使用分布式数据库而传统的金融、电信行业也在快速跟进据我所知像交通银行、中信银行、光大银行、北京银行和一些城市商业银行也都已经上线了分布式数据库。可以说在各种因素的推动下,分布式数据库已经成为一种技术潮流,甚至是新基建的一部分。

分布式数据库能得到广泛使用其中很重要的因素就是供应商不再是Oracle这样的国外商业巨头越来越多的国内公司和开源软件杀入这个领域。

比如阿里巴巴的OceanBase是高举高打的方式每年双十一大促都要秀一下性能虽然这个性能统计方法有待商榷但毕竟已经应用在关键业务上了。TiDB也在努力培育市场技术社区做得有声有色在互联网领域有了大量实施案例。GoldenDB已经随着中信银行的新一代核心业务系统上线投产截至目前平稳运行了三个月左右。其他分布式数据库包括CockroachDB、YugabyteDB、TBase、TDSQL、巨杉、VoltDB、GaussDB 300等等还有很多产品正在赶来的路上。

你看,分布式数据库是名副其实的“供需两旺”。

我们要学分布式数据库的另一个原因在于,你可以通过学习它的设计思想,提高自己的架构设计水平和代码能力。分布式数据库是学术研究与工业实践的完美结合,深入其中你会看到很多极致的设计方法。通过学习分布式数据库的架构设计,形成内化的设计能力,一定是架构师的要诀之一。

比如我就受益于分布式数据库的设计思想带领团队一起开发了一款叫作Pharos的软件实现了百亿海量数据下的复杂查询。

抓住主线,高效学习分布式数据库

我猜你可能会觉得分布式数据库很复杂,学起来太难。其实完全不用担心,我们这门课的使命就是要破除神秘感,找出分布式数据库的学习路径,帮你抓住它的核心内容。

那怎么找到这条学习路径呢这就得从数据库说起了。数据库其实就做了两个操作读和写。但就这两件事有时也会冲突写入快、读取可能就会慢另外还得考虑存储空间的成本。有个RUM猜想就是说这个事情读放大、写放大、存储空间放大最多只能避免两个三选二。这是第一个部分存储的设计。

系统总是要多人使用吧,这就带来并发的问题,出现写写冲突和读写冲突时采用什么策略,这是第二部分事务模型。

数据库的操作接口是SQL基于关系模型来定义数据结构和操作原语而且还有各种索引、优化措施让SQL执行得更快这是第三个部分查询引擎。

任何架构都要避免单点故障,所以数据库会有一个复制机制,多个节点形成主备关系,主备之间同步数据,这样可靠性就有了保障,这是第四部分复制。

最后,还有一些必备的辅助工作,客户端接入、权限控制、元数据存储。这样一个基本的数据库就可以运行了。

归纳一下,数据库就是要做好五件事,存储、事务、查询、复制和其他。对分布式数据库来说,不仅要继续做这五件事,还要多出一件事,分片。在这六件事中,存储和其他这两件事与单体数据库差不多,难点就在事务、查询、复制和分片这四件。

我们来具体说说这四件事。

第一件,也就是多出的那一件事,叫分片元数据存储和分片调度。

既然已经是多个节点,那一张表的数据还放在一个节点上吗,是不是该分散一下提高性能?这样,表就不再是数据的最小存储单元了,换成了分片,也就是表的水平切分下来的一部分,这和分区的概念很像。但是,这一分散,使用数据时总得知道去哪找吧?这就是分片元数据。另外,这分片也不是静止的,有很多因素会导致分片在节点间移动,比如分片存储的数据太多或者访问压力太大,这就需要对分片进行拆分、合并以及调度。

第二件是事务准确地说是分布式事务。它和单机事务完全不一样虽然数据库早就有了XA协议作为标准理论上支持跨库事务可是那性能实在太差啊。使用XA协议的MySQL集群操作延时是单机的10倍。这是什么概念根本没法在生产环境用。所以还得研究更加高效的分布式事务模型。

第三件是查询,查到数据很容易,难的还是高性能。而且数据都分片了,一个查询任务如何分配,是在某个节点上集中数据还是把逻辑推给各个节点,这都是要设计权衡的。

第四件是复制也就是高可靠设计原来的单机复制机制也可以延用但是在这种复制机制下只有主节点工作备节点闲着。现在新的设计是在分片基础上用Paxos协议建立复制组这样就有了更小的高可靠单元让每个复制组的主副本交叉部署在多个节点上就可以充分利用机器资源。

你看,只要抓住了这四件事,是不是就掌握了分布式数据库的学习要点。

采用这种抓主线的学习方式,还能让你避免一下子就陷入安装部署、操作指令等细节中,摆脱学完以后还是不知道产品原理、碰到没见过的问题依然是束手无策的窘境。所以在这门课里,我会带你**摆脱这些细节,从原理层面深入分析。**具体来说,我会以一个中立的视角去给你剖析主流产品的运行机制和理论依据,横向比较它们的差异,分析这些技术决策背后的动机,帮助你快速建立起对分布式数据库全面的认知体系。

我是怎么设计这门课的?

接下来,我要和你说说整个课程的设计。

我会在基础篇为你讲解分布式数据库的基本概念、主流产品的架构风格、一些基本功能,以及分布式数据库设计的难点,帮助你建立对分布式数据库的整体认知。

开发篇,我会带你深入到一个个关键功能的设计中,挖掘其背后可选择的理论设计方案,分析方案之间的差异,以及工业界产品在落地实现时的改进。也就是说,开发篇的设计思路是从问题到解决方案,再到产品实现。

这样一来,你不仅能在纵向上搭建一个分布式数据库的多层知识目录,还能从横向上针对每一个关键功能对比各种主流产品的设计选择,最终形成一个网络化的体系。

实践篇我会聚焦于架构选型,告诉你在企业中引入分布式数据库需要关注哪些事情、做些什么准备,比如会给运维带来哪些冲击、怎么去做测试,其他企业是基于什么原因选择分布式数据库的。同时,我还会为你梳理一份分布式数据库的产品图鉴,带你一起检阅这个时代最酷的基础软件。你也可以将它当成产品维度的课程索引,反向检索产品的设计。

还有,我必须再次声明一下:各种分布式数据库产品的安装部署、操作指令、性能调优等都不在这次课程的范畴内。一方面,这确实超出了我的个人能力,毕竟要面对如此多的产品;另一方面,只要你选择了正确的方向,就很容易从其他渠道获得详实的资料和具体的指导。

另外关于必备基础我也要提一下想要学习这门课是不是得对数据库的内部运行机制或者分布式技术有深刻的认识呀你放心不需要这么多基础。我上面介绍的课程设计思路其实就是为了帮你可以低门槛地学习只要你具备一定的编程基础有一些数据库的使用经验以及对SQL运行优化有直观的感受就能够从课程里汲取前人的智慧、提升自己的技术竞争力。

关于我

说了这么多还没有和你介绍下我自己。我在数据领域有超过15年的工作经验了一直在关注企业数据架构、大数据生态体系以及分布式架构服务过多家大型金融机构。

从2013年开始作为数据领域的主要设计者我推动了光大银行从传统数据仓库向大数据生态的转型主导了大数据开发平台、数据中台等多个重要系统的架构设计工作获得了银行业的多个技术奖项是大数据技术在金融行业的第一批践行者。

2018年光大银行启动了分布式数据库选型工作我作为技术专家深度参与了这项工作。在调研过程中我有幸与很多产品专家进行了深入的讨论甚至是争论。这个过程让我有机会了解各种产品在设计背后的考虑和权衡也拓展了对当前工业界工艺水准的整体认识。

最后我想说的是,分布式数据库凝聚了无数学者与工程师的智慧,灿若星辰。希望这个课程能带你穿越时空,开启一场与大师的对话之旅。

如果你身边也有些想要或者必须要学习分布式数据库的朋友,我希望你把这个课程分享给他 / 她,你们可以一起学习,互相鼓励。

欢迎你多多给我留言,与分布式数据库相不相关都可以,只要是我熟悉的领域就一定会认真给你答复。今天是开篇词,也希望你留言说说自己对这门课的期待,或者自己目前遇到的问题,我们下一讲见!