今天早上有同学转了篇文章《分布式数据库是伪需求吗?》到IMG的高端群,然后让姜老师谈谈对于分布式数据库是不是伪需求的看法。

在下不才,替姜老师来回答下这个问题。

仔细看了下文章,发现里面的观点基本全错。

再仔细看,原来是个卖 PostgreSQL 数据库服务的家伙。

并且大概率是从 Oracle 数据库时代留存下来的 PG DBA。

所以,这一切就很好理解了。

因为用姜老师的话来说 Oracle/PG DBA 的弱是全方位的弱。

作者一开始的论点就非常荒谬。

搬出摩尔定律,堆叠一些数据和表格。

无非是想要表达硬件发展快,现在 SSD 的成本低,容量大,性能高,所以不需要进行分布式数据的分片。

让我们看一下 2013 年典型 SSD 的性能指标,并与 2022 年 PCI-e Gen4 NVMe SSD 的典型产品进行对比。不难发现:硬盘4K随机读写 IOPS从 60K/40K 到了 1600K/600K,价格从 2220$/TB 到 40$/TB 。性能翻了15 ~ 26倍,价格便宜了56 倍

这个观点看似非常正确,其实恰恰说明了作者没有基本的经济学认知。

首先,2013年SSD才刚开始普及没多久,拿一种技术普及前和普及后的数据做比较,从维度上就是错的。

2019年特斯拉 Model 3 的价格约50W,现在供应量更完整,产量跟上,只卖23W,而且电池的续航更长。

其次,这种比较没有考虑货币的贬值。

货币的特性就是不断贬值,这几年各国货币贬值的速度空前绝后。

所以,作者再次拿不同时间维度的东西作比较,只是为了证明自己的观点。

最后,2013年各业务数据库的存储体量多少?双11的成交量才多少?

好比10年前 MySQL 5.5 版本的二进制包大小是150M,现在 MySQL 8.0 版本二进制包的大小约1G。

打开网易新闻 查看更多图片

说了这么多,其实区区想表达的是:除去供应链普及带来的硬件成本下降,综合考虑货币通胀、互联网普及、数据膨胀等因素,现在1T存储的成本和2013年1T存储的成本本质是一样的

更为重要的是,分布式数据库存储1T和集中式存储1T数据的成本也是一样的。

因此,论点1:从更宏观角度看,本质上 SSD的成本并没有降低,容量也没有变大。作者罗列的数据只是货币和数据通胀的外在表现。

接着,作者说SSD性能很高,MySQL 单实例可以跑出 200W QPS 的性能。

没错,SSD 的 IOPS 性能可以堆叠得很高。

通常来说,存储容量越大,性能越高。

但从底层逻辑上来讲,SSD 内部就是一个分布式数据库,单个闪存的性能是存在瓶颈的。但可以通过堆叠多个闪存片的方式,提升整个 SSD 的IOPS 性能。

认知的格局打开,可以认为即便是单个数据库实例,但凡用了 SSD 设备,就是一个分布式数据库。

因为 SSD 就是一个分布式闪存存储设备。

至于单个 MySQL 实例 200W QPS 性能,这是事实。

但做内核的同学应该明白,这只是为了验证 MySQL 的极限。

通过这样的极限测试,发现内核层可能出现的瓶颈。

200W QPS 的测试结果是本地 socket 连接,而不是 TCP/IP 连接。

100W QPS 的测试结果是 Sysbench 的 Read Only 测试。

Sysbench 的测试表单行记录大小固定为120字节。

然而,真实的生产环境是怎么样的呢?

第一,应用的服务不可能和数据库部署在同一台服务器上,也就是不可能通过 socket 连接进行进程间的通信。

第二,你的业务不可能是全部是 Read Only 的请求,如果是,那用 Redis 缓存更为适合。

最后,业务表单行记录不可能只有120字节,1K甚至更多才是常态。

最后的最后,真实业务的数据库需要有容灾保障,会有额外的网络开销。

特别是金融场景,跨 AZ 的容灾是必须项。

这意味着每次事务提交绕不开那 2~3ms 的网络等待。

所以,单实例数据库,生产环境下,能有个小几万 QPS 就不很错了。

只有通过分布式数据库架构,才能将性能真正堆叠到百万 QPS 。

而作者在原文中提及:

对于一个典型的中型互联网公司/银行,数据库请求数量级通常在几万/几十万 QPS这个范围;不重复的TP数据量级在百TB上下浮动。

因此,论点2:真实的生产环境,单实例数据库性能远远达不到百万 QPS 的要求,所以,单实例数据库架构并不能满足业务的性能需求。

到这,所谓 SSD 成本低,容量大,性能好的优势,都已不成立。

然后,作者谈了一个很假大空的话题,叫:伪需求。

作为回应,也理应务虚一些。

来,让我们看看马斯洛人类需求五层次理论。

马斯洛认为人潜藏着这五种不同层次的需求。

上图中的生理需求是最为基本的需求。

说伪需求的,是没有认知到存在五种不同层次的需求。

比如 LV 包包,成本100,卖1W。

所以,我们就不需要 LV 包包了?这是伪需求么?

不是的,通过 LV 包证明了自己的购买能力,满足了社交和尊重的需求。

奢侈品不是伪需求,只是它不是用于满足最为基础的需求。

拉回到分布式数据库领域,相比传统集中式架构,分布式数据库额外解决单机 QPS 瓶颈问题、突发的热点问题、网络带宽瓶颈问题、多城多写容灾能力的建设问题等等。

换句话说,分布式数据库满足了更高维度的用户需求。

很多人买 iPhone 顶配的 512G 或 1T 存储,并不是他们需要有这么多空间存储照片,视频等,而是因为他们不想去定期清理磁盘空间,又或是他们不想为了存储空间问题而在使用上胆战心惊。

因此,结论3:当满足最基本的数据存储访问需求后,向分布式数据库转型,是因为其额外提供了更高层次的数据库保障能力。

最后,作者已经显得语无伦次:

近日与某分布式数据库厂工程师闲聊时获悉,在客户那儿做 POC 时,Oracle 10秒跑完的查询,他们的分布式数据库用上各种资源和 Dirty Hack 都有一个数量级上的差距。

亲,你一开始不都在谈 TP (Transaction Processing)么?

10 秒跑完的查询也是 TP 请求?

这不是开玩笑么?

所以,作者再次通过偷换概念的方式为自己的观点进行辩驳。

诚然,分布式架构后,类似 AP 的复杂查询变得更难了,有些 SQL 运行速度可能会变慢。

但你也不能否认,某些 SQL 可以通过并行访问数据节点的方式,执行速度也能变得更快。

更为重要的是,这些短板是可以补齐的,而且方法很多。

例如通过实现分布式 SQL 执行器、通过实现行列混存的方式等等。

他们都可以跑得比原来单实例架构更快。

正如新能源车一样,现在电池的续航一般为500KM左右,存在一些短板。

但相信5年后,通过增加电池密度,又或是新的材料等技术,电池的续航大概率会达到1000KM。

也就是说,现在担心的续航问题最终会被解决。

因此,结论4:所有的技术问题都不是问题,都可以通过技术的方式解决。

到这,原作者的谎言被一一戳破。

你卖你的 PG 服务和产品,无可厚非。

你想原地踏步,不与时俱进,那是你个人的选择,无可厚非。

然,时代巨轮滚滚前向,他不会因为你的谎言而停留,而是以更快的速度碾压前行。

打开网易新闻 查看更多图片

世界激荡前进,让我们一起见证这百年未有之大变局吧。

以上。