今天早上有同学转了篇文章《分布式数据库是伪需求吗?》到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 内部就是一个分布式数据库,单个闪存的性能是存在瓶颈的。但可以通过堆叠多个闪存片的方式,提升整个 SSD 的IOPS 性能。
认知的格局打开,可以认为即便是单个数据库实例,但凡用了 SSD 设备,就是一个分布式数据库。至于单个 MySQL 实例 200W QPS 性能,这是事实。但做内核的同学应该明白,这只是为了验证 MySQL 的极限。200W QPS 的测试结果是本地 socket 连接,而不是 TCP/IP 连接。100W QPS 的测试结果是 Sysbench 的 Read Only 测试。Sysbench 的测试表单行记录大小固定为120字节。第一,应用的服务不可能和数据库部署在同一台服务器上,也就是不可能通过 socket 连接进行进程间的通信。第二,你的业务不可能是全部是 Read Only 的请求,如果是,那用 Redis 缓存更为适合。最后,业务表单行记录不可能只有120字节,1K甚至更多才是常态。最后的最后,真实业务的数据库需要有容灾保障,会有额外的网络开销。
这意味着每次事务提交绕不开那 2~3ms 的网络等待。所以,单实例数据库,生产环境下,能有个小几万 QPS 就不很错了。只有通过分布式数据库架构,才能将性能真正堆叠到百万 QPS 。对于一个典型的中型互联网公司/银行,数据库请求数量级通常在几万/几十万 QPS这个范围;不重复的TP数据量级在百TB上下浮动。
因此,论点2:真实的生产环境,单实例数据库性能远远达不到百万 QPS 的要求,所以,单实例数据库架构并不能满足业务的性能需求。
到这,所谓 SSD 成本低,容量大,性能好的优势,都已不成立。

不是的,通过 LV 包证明了自己的购买能力,满足了社交和尊重的需求。奢侈品不是伪需求,只是它不是用于满足最为基础的需求。
拉回到分布式数据库领域,相比传统集中式架构,分布式数据库额外解决单机 QPS 瓶颈问题、突发的热点问题、网络带宽瓶颈问题、多城多写容灾能力的建设问题等等。
很多人买 iPhone 顶配的 512G 或 1T 存储,并不是他们需要有这么多空间存储照片,视频等,而是因为他们不想去定期清理磁盘空间,又或是他们不想为了存储空间问题而在使用上胆战心惊。
因此,结论3:当满足最基本的数据存储访问需求后,向分布式数据库转型,是因为其额外提供了更高层次的数据库保障能力。
近日与某分布式数据库厂工程师闲聊时获悉,在客户那儿做 POC 时,Oracle 10秒跑完的查询,他们的分布式数据库用上各种资源和 Dirty Hack 都有一个数量级上的差距。
亲,你一开始不都在谈 TP (Transaction Processing)么?所以,作者再次通过偷换概念的方式为自己的观点进行辩驳。诚然,分布式架构后,类似 AP 的复杂查询变得更难了,有些 SQL 运行速度可能会变慢。但你也不能否认,某些 SQL 可以通过并行访问数据节点的方式,执行速度也能变得更快。
更为重要的是,这些短板是可以补齐的,而且方法很多。
例如通过实现分布式 SQL 执行器、通过实现行列混存的方式等等。正如新能源车一样,现在电池的续航一般为500KM左右,存在一些短板。
但相信5年后,通过增加电池密度,又或是新的材料等技术,电池的续航大概率会达到1000KM。因此,结论4:所有的技术问题都不是问题,都可以通过技术的方式解决。
你想原地踏步,不与时俱进,那是你个人的选择,无可厚非。然,时代巨轮滚滚前向,他不会因为你的谎言而停留,而是以更快的速度碾压前行。

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