报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

聊聊数据库的未来,写在 PingCAP 成立五周年前夕

  • 2020-04-08
  • 本文字数:4150 字

    阅读完需:约 14 分钟

聊聊数据库的未来,写在 PingCAP 成立五周年前夕

我还清楚记得,五年前的这个时候,当时还在豌豆荚,午后与刘奇和崔秋的闲聊关于未来数据库的想象,就像一粒种子一样,到了今天看起来也竟枝繁叶茂郁郁葱葱,有点感慨。按照惯例,五年是一个重要的节点,没有十年那么冗长,也没有一两年的短暂,是一个很好的回顾节点,就在此认真的回顾一下过去,展望一下未来。


五年前创业的出发点其实很朴素:做一个更好的分布式数据库。从学术的角度上看起来,并不是提出了什么惊天地泣鬼神的神奇算法,我们选择的 Shared-nothing 的架构其实在当时的业界也不是什么新鲜的事情了,但真正令我激动的是:我们要造的是一个真正能作为整个系统的 Single Source of Truth 的基础软件。这句话怎么理解呢?我在后边会好好聊聊。

数据是架构的中心

作为一个互联网行业的架构师,几乎是天天都在和各种类型的数据打交道,这么多年的经验,不同行业不同系统,从技术层面来说,抽象到最高,总结成一句话就是:


数据是架构的中心。


仔细想想,我们其实做的一切工作,都是围绕着数据。数据的产生,数据的存储,数据的消费,数据的流动……只不过是根据不同的需求,变化数据的形态和服务方式。计算机系的同学可能还记得老师说过的一句话:程序 = 算法 + 数据结构,我这里斗胆模仿一下这个句式:系统 = 业务逻辑 x 数据。可以说很多架构问题都是出在数据层,例如常见的「烟囱式系统」带来的种种问题,特别是数据孤岛问题,其实本质上的原因就出在没有将数据层打通,如果不从数据架构去思考,就可能「头疼医头、脚疼医脚」,费了半天劲还是很别扭,反过来如果将数据层治理好,就像打通「任督二脉」一样,起到四两拨千斤的效果。


但是理想通常很丰满,现实却很骨感。至少在我们五年前出来创业那会儿,我们觉得并没有一个系统能够很好的解决数据的问题。可能好奇的读者就要问了:不是有 Hadoop?还有 NoSQL?再不济关系型数据库也能分库分表啊?其实列出的这几个几乎就是当年处理存储问题的全部候选,这几个方案的共同特点就是:不完美。


具体一点来说,这几个解决方案对于数据应用的场景覆盖其实都不大,对于复杂一点的业务,可能需要同时使用 n 多个方案才能覆盖完整。这就是为什么随着近几年互联网业务越来越复杂,类似 Kafka 这样的数据 Pipeline 越来越流行,从数据治理的角度其实很好理解:各种数据平台各负责各的,为了做到场景的全覆盖,必然需要在各个「岛」之间修路呀。


我们当年就在想,能不能有一个系统以一个统一的接口尽可能大的覆盖到更多场景。


我们需要一个 Single Source of Truth。数据应该是贯穿在应用逻辑各个角落,我理想中的系统中对于任意数据的存取都应该是可以不加限制的(先不考虑权限和安全,这是另一个问题),这里的“不加限制”是更广义的,例如:没有容量上限,只要有足够的物理资源,系统可以无限的扩展;没有访问模型限制,我们可以自由的关联、聚合数据;没有一致性上的限制;运维几乎不需要人工干预……

以分布式数据库为统一中心的架构

我当年特别着迷于一个美剧:Person of Interest (疑犯追踪),这个电视剧里面有一个神一样的人工智能 The Machine,收集一切数据加以分析,从而预测或是干预未来人们的行动。虽然这部美剧还是比较正统的行侠仗义之类的主题,但是更让我着迷的是,是否我们能设计一个 The Machine?虽然直到目前我还不是一个 AI 专家,但是给 The Machine 设计一个数据库似乎是可行的。这几年创业过程中,我们发现更令人兴奋的点在于:


以分布式数据库为统一中心的架构是可能的。


这个怎么理解呢?举个例子,就像在上面提到的分裂带来的问题,数据层的割裂必然意味着业务层需要更高的复杂度去弥补,其实很多工程师其实偏向于用线性的思维去思考维护系统的成本。但是实际的经验告诉我们,事情并不是这样的。一个系统只有一个数据库和有十个数据库的复杂程度其实并不是的简单的 10x,考虑到数据的流动,维护成本只可能是更多,这里还没有考虑到异构带来的其他问题。



以分布式数据库为中心的架构是什么样子的呢?很好理解,整个架构的中心是一个场景覆盖度足够广,且具有无限的水平伸缩能力的存储系统。大部分数据的流动被限制在这个数据库内部,这样应用层就可以几乎做到无状态,因为这个中心的数据库负责了绝大部分状态,每个应用可以通过自己的缓存来进行加速。


这里我想提醒的是,为什么我在上面强调水平扩展能力,是因为受限的扩展能力也是导致分裂的一个重要的原因。我们从来都没有办法准确的预测未来,我们很难想象甚至是一年后业务的变化(想想这次疫情),有句老话说的很好:唯一不变的就是变化。


另外一个经常被问到的问题,为什么要强调缓存层需要离业务层更近,或者说,为什么位于中心的这个巨型数据库不应该承担缓存的责任?我的理解是,只有业务更懂业务,知道应该以什么样的策略缓存什么样的数据,而且出于性能(低延迟)考虑,缓存离业务更近也是有道理的。



对应上面那句话「唯一不变的就是变化」,这个架构带来最大的好处正是「以不变应万变」,或者更简单的一个词:简洁。Google 其实在很早就想清楚了这个问题,因为他们很早就明白什么是真正的复杂。


另一个例子是 HTAP,如果关注的数据库的发展的话,最近一定对 HTAP 这个词很熟悉,其实在我看来的 HTAP 的本质在于上面提到的覆盖度,下面是一个典型的架构:



传统的数据架构通常将 OLTP、OLAP、离线数仓分离,各个系统各司其职,中间通过独立的 Pipeline 进行同步(有时候还会加上 ETL)。


下面是一个 HTAP 的系统的样子:



虽然从表面上看,只是简单的将接口层进行整合,但是这个意义其实是深远的,首先数据同步的细节被隐藏了一起来,这意味着数据库层面可以自己决定通过何种方式同步数据,另外由于 OLTP 引擎和 OLAP 引擎在同一个系统内部,使得很多细节信息不会在同步的过程中丢失,比如:事务信息,这就意味着在内部的分析引擎能够做到传统的 OLAP 没办法做的事情。另外对于业务层的使用来说,少一个系统意味着更统一的体验和更小的学习和改造成本,不要低估统一带来的力量。

未来在哪里?

上面这些是过去五年发生的事情,也几乎按照我们创业时候的设想一步步的变为现实,那么接下来的五年会发什么?随着对于行业和技术的理解的加深,至少有一点我深信不疑的是:

弹性调度会是未来的数据库的核心能力

谁都不会否认,最近十年在 IT 技术上,最大的变革是由云带来的,这场革命还在进行时。云的核心能力是什么?我认为是弹性。计算资源分配的粒度变得越来越细,就像从只能买房变成可以租房,甚至可以像住酒店一样灵活。这意味着什么?本质在于我们可以不用为「想象中」的业务峰值提前支付成本。


过去我们的采购服务器也好,租赁机柜也好,都是需要设定一个提前量的,当业务峰值没有到来之前,其实这些成本是已经提前支付的了。云的出现将弹性变成了基础设施的一个基础能力,我预计数据库也会发生同样的事情。


可能有很多朋友会有疑问,现在难道不是几乎所有数据库都号称能够支持透明水平扩展嘛?其实这里希望大家不要将「弹性调度」狭隘的理解为扩展性,而且这个词的重点在「调度」上,我举几个例子以方便大家理解:


1. 数据库能不能够自动识别 workload,根据 workload 进行自动伸缩?例如:预感到峰值即将来临,自动的采购机器,对热数据创建更多副本并重分布数据,提前扩容。在业务高峰过去后,自动回收机器进行缩容。


2. 数据库能不能感知业务特点,根据访问特点决定分布?例如:如果数据带有明显的地理特征(比如,中国的用户大概率在中国访问,美国用户在美国),系统将自动的将数据的地理特征在不同的数据中心放置。


3. 数据库能不能感知查询的类型和访问频度,从而自动决定不同类型数据的存储介质?例如:冷数据自动转移到 S3 之类比较便宜的存储,热数据放在高配的闪存上,而且冷热数据的交换完全是对业务方透明的。


这里提到的一切背后都依赖的是「弹性调度」能力。未来我相信物理资源的成本会持续的降低,计算资源的单价持续下降带来的结果是:当存储成本和计算资源变得不是问题的时候,问题就变成「如何高效的分配资源」。如果将高效分配作为目标的话,「能调度」就是显而易见的基础。


当然就像一切事物发展的客观规律一样,学会跑步之前,先要学会走路,我相信在接下来的一段时间内,我们会看到第一批初步拥有这样能力的新型数据库,让我们拭目以待。

下一个阶段是智能

对于更远的未来是怎么样子的?我不知道,但是就像 The Machine 一样,只有足够数据才能诞生出智能,我相信就像我们不了解宇宙和海洋一样,我们现在对于数据的认识一定是肤浅的,甚至大量的数据我们都还没记录下来,一定有更大奥秘隐藏在这海量的数据中,从数据中能获取什么样的洞察,能够怎么样更好的改变我们的生活,我并不知道,但是做这件事情的主角我猜不会是人类。虽然在这个小节我们讨论的东西可能就有点像科幻小说了,不过我愿意相信这样的未来,从数据的海洋中诞生出新的智能体。

尾声

创业这五年的时间,回头看看那个最朴素的出发点:写一个更好的数据库彻底解决烦人的 MySQL 分库分表问题。似乎也算没有偏离初心,但是在这个旅途中一步步看到了更大的世界,也越来越有能力和信心将我们相信的东西变为现实:


我有一个梦想,未来的软件工程师不用再为维护数据库加班熬夜,各种数据相关的问题都将被数据库自动且妥善的处理;


我有一个梦想,未来我们对数据的处理将不再碎片化,任何业务系统都能够方便的存储和获取数据;


我有一个梦想,未来的我们在面临数据的洪流时候,能从容地以不变应万变。


最近我听到一句话,我个人很喜欢:雄心的一半是耐心。构建一个完美的数据库并不是一朝一夕的工作,但是我相信我们正走在正确的道路上。


凡所过往,皆为序章。


作者简介:黄东旭,PingCAP 联合创始人兼 CTO,资深基础软件工程师,架构师,曾就职于微软亚洲研究院,网易有道及豌豆荚,。擅长分布式系统以及数据库开发,在分布式存储领域有丰富的经验和独到的见解。狂热的开源爱好者以及开源软件作者,代表作品分布式 Redis 缓存方案 Codis,以及分布式关系型数据库 TiDB。2015 年创业,成立 PingCAP,在 PingCAP 的主要工作是从零开始设计并研发开源 NewSQL 数据库 TiDB, 目前 GitHub 上该项目累积 star 数超过 23000+,成为本领域全球顶级的开源项目。


本文转载自 PingCAP 公众号。


原文链接:https://mp.weixin.qq.com/s/Ahhaa9cAm248Sh4IHrcy-w


2020-04-08 13:511309

评论

发布
暂无评论
发现更多内容

成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程

阿里巴巴中间件

阿里云 微服务 云原生 中间件 网关

仅需三天,受人追捧的华为内部Java优化笔记登顶Github热搜!

Java 架构 面试 程序人生 编程语言

想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中

华为云开发者联盟

MySQL 运维 测试 MySQL数据库 Kubernetes 集群

2021年9月国产数据库大事记

墨天轮

数据库 华为云 国产数据库 达梦 人大金仓

Java 面试的“完美圣经”,有了这些还愁面试吗?

Java 程序员 架构 面试 后端

机器翻译是否能替代人工翻译?从前世今生说起

博文视点Broadview

用21张图,把Git 工作原理彻底说清楚

git 架构 面试 后端

还在苦恼网络协议?阿里大佬这份笔记带你从入门到精通!

Java 架构 面试 程序人生 编程语言

「 活动 」连续 3 天,企业容器应用实战营上海站来啦!

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生 活动

校友录小程序开发笔记三十二:校友卡模块设计与实现

CC同学

SSH是什么?怎么组成?有哪些优势?

行云管家

SSH 服务器 SSH工具 服务器管理协议

浙江金华市正规等保测评机构有几家?在哪里?联系电话是多少?

行云管家

网络安全 等保 等保测评

教你用Java7的Fork/Join框架开发高并发程序

华为云开发者联盟

Java 算法 线程 高并发 Fork/Join框架

一加9 Pro怎么样?值得入手的全能旗舰

Geek_8a195c

【优化技术专题】「线程间的高性能消息框架」终极关注Disruptor的核心源码和Java8的@Contended伪共享指南

码界西柚

Disruptor 异步执行 高性能框架 10月月更

专场预告 | DTCC数据库技术大会云溪数据库专场

云计算

“828页Java面试手册”在我手,何愁offer不到手!

Java 程序员 架构 面试 后端

再见收费的Navicat!操作所有数据库靠它就够了!

Java 数据库 架构 开源项目

GitHub标星过万!阿里内部流传的JDK源码剖析手册到底有多强?

程序员 jdk 面试 java

OpenCV学习(三):三重境界

轻口味

OpenCV图像处理 10月月更

为绿色而生:智慧矿山可视化数治监管

一只数据鲸鱼

数据可视化 智慧矿山 煤矿 矿山

Vue进阶(幺叁幺):父子组件传值实现数据深拷贝

No Silver Bullet

Vue 深拷贝 10月月更

双减来了!人工智能如何促进教育领域转型?

京东科技开发者

人工智能 大数据 AI 教育行业

每一个用到canvas的小伙伴都应该了解的fabric.js

荣顶

JavaScript 大前端 canvas 图形处理 画布

设计电商秒杀系统

木云先森

架构训练营

我用 10000 张图片合成我们美好的瞬间

荣顶

JavaScript 大前端 canvas 图形处理

万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践

JackJiang

websocket 即时通讯 IM

明道云当选“中国电子商会数据资源服务创新专业委员会”理事单位

明道云

百分点大数据技术团队:低代码平台实践

百分点科技技术团队

DCI架构是如何解决DDD战术建模缺点的?

华为云开发者联盟

领域驱动设计 对象 建模 对象编程 DCI架构

设计模式如何提升 vivo 营销自动化业务扩展性 | 引擎篇01

vivo互联网技术

自动化 后端 设计模式 软件架构设计 java

聊聊数据库的未来,写在 PingCAP 成立五周年前夕_大数据_PingCAP技术团队_InfoQ精选文章