作者 | 黄东旭

责编 | 郭   芮

回看这几年,分布式系统领域出现了很多新东西,特别是云和 AI 的崛起,让这个过去其实不太 sexy 的领域一下到了风口浪尖,在这期间诞生了很多新技术、新思想,让这个古老的领域重新焕发生机。站在 2010s 的尾巴上,我想从数据库、硬件、测试、运维等角度,跟大家一起聊聊分布式系统令人振奋的进化路程,以及谈一些对 2020s 的大胆猜想。

无论哪个时代,存储都是一个重要的话题,今天先聊聊数据库。在过去的几年,数据库技术上出现了几个很明显的趋势。

存储和计算进一步分离

我印象中最早的存储—计算分离的尝试是 Snowflake,Snowflake 团队在 2016 年发表的论文《 The Snowflake Elastic Data Warehouse 》是近几年我读过的最好的大数据相关论文之一,尤其推荐阅读。

Snowflake 的架构关键点是在无状态的计算节点 + 中间的缓存层 + S3 上存储数据,计算并不强耦合缓存层,非常符合云的思想。从最近 AWS 推出的 RedShift 冷热分离架构来看,AWS 也承认 Snowflake 这个搞法是先进生产力的发展方向。

另外这几年关注数据库的朋友不可能不注意到 Aurora。不同于 Snowflake,Aurora 应该是第一个将存储—计算分离的思想用在 OLTP 数据库中的产品,并大放异彩。Aurora 的成功在于将数据复制的粒度从 Binlog 降低到 Redo Log ,极大地减少复制链路上的 IO 放大。而且前端复用了 MySQL,基本做到了 100% 的应用层 MySQL 语法兼容,并且托管了运维,同时让传统的 MySQL 适用范围进一步拓展,这在中小型数据量的场景下是一个很省心的方案。

虽然 Aurora 获得了商业上的成功,但是从技术上,我并不觉得有很大的创新,熟悉 Oracle 的朋友第一次见 Aurora 的架构可能会觉得和 RAC 似曾相识。Oracle 大概在十几年前就用了类似的方案,甚至很完美的解决了 Cache Coherence 的问题。另外,Aurora 的 Multi-Master 还有很长的路要走,从最近在 ReInvent 上的说法来看,目前 Aurora 的 Multi-Master 的主要场景还是作为 Single Writer 的高可用方案,本质的原因应该是目前 Multi-Writer 采用乐观冲突检测,冲突检测的粒度是 Page,在冲突率高的场合会带来很大的性能下降。

我认为 Aurora 是一个很好的迎合 90% 的公有云互联网用户的方案:100% MySQL 兼容,对一致性不太关心,读远大于写,全托管。但同时,Aurora 的架构决定了它放弃了 10% 有极端需求的用户,如全局的 ACID 事务 + 强一致,Hyper Scale(百 T 以上,并且业务不方便拆库),需要实时的复杂 OLAP。这类方案我觉得类似 TiDB 的以 Shared-nothing 为主的设计才是唯一的出路。作为一个分布式系统工程师,我对任何不能水平扩展的架构都会觉得不太优雅。

分布式 SQL 数据库登上舞台,ACID 全面回归

回想几年前 NoSQL 最风光的时候,大家恨不得将一切系统都使用 NoSQL 改造,虽然易用性、扩展性和性能都不错,但是多数 NoSQL 系统都抛弃掉了数据库最重要的一些东西,例如 ACID 约束,SQL 等等。NoSQL 的主要推手是互联网公司,互联网公司的简单业务加上超强的工程师团队,NoSQL 丢掉的东西当然能用某些工具简单搞定。

但最近几年大家渐渐发现低垂的果实基本上没有了,剩下的都是硬骨头。

最好的例子就是作为 NoSQL 的开山鼻祖,Google 第一个搞了 NewSQL (Spanner 和 F1)。在后移动时代,业务变得越来越复杂,要求越来越实时,同时对于数据的需求也越来越强。尤其对于一些金融机构来说,一方面产品面临着互联网化,一方面不管是出于监管的要求还是业务本身的需求,ACID 是很难绕开的。更现实的是,大多数传统公司并没有像顶级互联网公司的人才供给,大量历史系统基于 SQL 开发,完全迁移到 NoSQL 上肯定不现实。

在这个背景下,分布式关系型数据库,我认为这是我们这一代人,在开源数据库这个市场上最后一个 missing part,终于慢慢流行起来。

云基础设施和数据库的进一步整合

在过去的几十年,数据库开发者都像是在单打独斗,就好像操作系统以下的就完全是黑盒了,这个假设也没错,毕竟软件开发者大多也没有硬件背景。另外如果一个方案过于绑定硬件和底层基础设施,必然很难成为事实标准,而且硬件非常不利于调试和更新,成本过高,这也是我一直对定制一体机不是太感兴趣的原因。

但是云的出现,将 IaaS 的基础能力变成了软件可复用的单元,我可以在云上按需租用算力和服务,这会给数据库开发者在设计系统的时候带来更多的可能性,举几个例子:

1、 Spanner 原生的 TrueTime API 依赖原子钟和 GPS 时钟,如果纯软件实现的话,需要牺牲的东西很多(例如 CockroachDB 的 HLC 和 TiDB 的改进版 Percolator 模型,都是基于软件时钟的事务模型)。但是长期来看,不管是 AWS 还是 GCP 都会提供类似 TrueTime 的高精度时钟服务,这样一来我们就能更好的实现低延迟长距离分布式事务。

2、 可以借助 Fargate + EKS 轻量级容器 + Managed K8s 的服务,让数据库应对突发热点小表读的场景(这个场景几乎是 Shared-Nothing 架构的老大难问题),比如在 TiDB 中通过 Raft Learner 的方式,配合云的 Auto Scaler 快速在新的容器中创建只读副本,而不是仅仅通过 3 副本提供服务;比如动态起 10 个 pod,给热点数据创建 Raft 副本(这是我们将 TiKV 的数据分片设计得那么小的一个重要原因),处理完突发的读流量后再销毁这些容器,变成 3 副本。

3、冷热数据分离,这个很好理解,将不常用的数据分片,分析型的副本,数据备份放到 S3 上,极大地降低成本。

4、 RDMA/CPU/ 超算 as a Service,任何云上的硬件层面的改进,只要暴露 API,都是可以给软件开发者带来新的好处。

例子还有很多,我就不一一列举了。总之我的观点是云服务 API 的能力会像过去的代码标准库一样,是大家可以依赖的东西,虽然现在公有云的 SLA 仍然不够理想,但是长远上看,一定是会越来越完善的。

数据库的未来在哪里?

数据库的未来是更加的垂直化还是走向统一?

对于这个问题,我同意这个世界不存在银弹,但是我也并不像我的偶像,AWS CTO Vogels 博士那么悲观,相信未来是一个割裂的世界(AWS 恨不得为了每个细分的场景设计一个数据库)。过度地细分会加大数据在不同系统中流动的成本。解决这个问题有两个关键:

  • 数据产品应该切分到什么粒度?

  • 用户可不可以不用知道背后发生了什么?

第一个问题并没有一个明确的答案,但是我觉得肯定不是越细越好的,而且这个和 Workload 有关,比如如果没有那么大量的数据,直接在 MySQL 或者 PostgreSQL 上跑分析查询其实一点问题也没有,没有必要非去用 Redshift。虽然没有直接的答案,但是我隐约觉得第一个问题和第二个问题是息息相关的,毕竟没有银弹,就像 OLAP 跑在列存储引擎上一定比行存引擎快,但是对用户来说其实可以都是 SQL 的接口。

SQL 是一个非常棒的语言,它只描述了用户的意图,而且完全与实现无关,对于数据库来说,其实可以在 SQL 层的后面来进行切分,在 TiDB 中,我们引入 TiFlash 就是一个很好的例子。动机很简单:

1、用户其实并不是数据库专家,你不能指望用户能 100% 在恰当的时间使用恰当的数据库,并且用对。

2、数据之间的同步在一个系统之下才能尽量保持更多的信息,例如,TiFlash 能保持 TiDB 中事务的 MVCC 版本,TiFlash 的数据同步粒度可以小到 Raft Log 的级别。

另外一些新的功能仍然可以以 SQL 的接口对外提供,例如全文检索,用 SQL 其实也可以简洁的表达。这里我就不一一展开了。

我其实坚信系统一定是朝着更智能、更易用的方向发展的,现在都 21 世纪了,你是希望每天拿着一个 Nokia 再背着一个相机,还是直接一部手机搞定?

作者:黄东旭,分布式系统专家、架构师、开源软件作者。PingCAP 联合创始人兼 CTO,知名开源项目 Codis/TiDB/TiKV 主要作者,曾就职于微软亚洲研究院、网易有道及豌豆荚。2015 年创业,成立 PingCAP,致力于下一代开源分布式数据库的研发工作,擅长分布式存储系统设计与实现,高并发后端架构设计。

声明:本文系作者投稿,版权归作者个人所有。

【End】

热 文 推 荐 

☞微信「扫码支付」被诉侵犯专利权;苹果回应“iOS 13 频繁提醒 App 定位”;Python 2 退休 | 极客头条

☞如何通过 Web 实现防御木马、病毒...... | 原力计划

☞互联网诞生记

☞2019 年被“杀”死的那些技术!

☞暴力裁员、爬虫被抓、QQ 注销……2019 年程序员大事记

☞大数据中台之Kafka,到底好在哪里?

☞新年首日涨姿势不能停:召回→排序→重排技术演进趋势深度总结

☞“区块链岛”女记者调挖矿事件时惨遭暗杀,时隔2年依旧无法沉冤昭雪……

你点的每个“在看”,我都认真当成了喜欢

近十年数据库流行趋势纵览!存储计算分离、ACID 全面回归......相关推荐

  1. mysql 存储计算分离 开源_Openstack计算-存储-控制分离与计算节点的在线添加

    Openstack计算-存储-控制分离与计算节点的在线添加 实验环境:red hat linux 6.5 Host: 192.168.122.19 server19.example.com Compu ...

  2. 2019 数据库流行趋势 --非国内

    今天周五,又是一礼拜一度的 胡扯 其实从去年已经隐隐约约感觉到数据库的有变化,只是没有想到变得这么快.今年的中美贸易,实实在在的是给某些数据库重击,如果以前去某数据库还是喊喊,然后该用还用,今年从传统 ...

  3. access抓取数据_十年数据库流行度,哪款是你的最爱

    准备写一个系列,在年终岁尾之际,盘一盘大家或者是本人比较关心的一些数据.文章内容会包括数据获取的过程和数据可视化结果.今天先来看看各大数据库在过去一年的表现吧! 先来看看数据库流行度总体走势 近十年数 ...

  4. 阿里巴巴计算平台资深技术专家“一浪”对大数据领域近几年的技术趋势和变化的看法【强烈推荐数据岗细细品!】

    导读:计算和存储分离是近几年大数据架构领域颇受关注的一个技术风向.在对刚刚过去的 2019 天猫双 11 技术进行总结时,阿里巴巴 CTO 行癫也特别提到了阿里在计算存储分离上的进展.大数据最初兴起之 ...

  5. 今天见 | 洞见数据库前沿趋势 DTCC 2020阿里云9大看点早知道

    简介:12月21日-12月23日,阿里云数据库在DTCC 2020等你~ 12月21日-12月23日,由国内知名IT技术社区主办的数据库技术交流盛会--DTCC 2020(第十一届中国数据库技术大会) ...

  6. 区块链存储进入Gartner技术成熟度曲线 | Gartner发布2019年十大战略性技术趋势

    [编者Peter Ye按] 本篇文章讲述了两件不同的事情. 一. 2018年7月25日,Gartner发布的<Hype Cycle for Blockchain Technologies, 20 ...

  7. 三大院士、十大数据库掌门人,岳麓对话开启数字经济新时代!

    10月23日,第二届"长沙 · 中国1024程序员节"在湖南长沙盛大开幕.大会以"开源开放.算据赋能--开启数字经济新时代"为主题,囊括岳麓尖峰对话.2021技 ...

  8. 深入渗透流行趋势 安防行业发展机遇多

    近几年,随着消费个性化需求的上升,智能系统技术与产品越来越受到百姓青睐.自然,"深入渗透流行趋势,安防行业发展机遇多"也成为了老百姓关心已久的热门话题.我国安防行业2016年发展如 ...

  9. 跨越数据库发展鸿沟,谈分布式数据库技术趋势

    金融行业架构转型需求 随着移动化与互联网化的不断发展,我国金融行业的商业模式与技术体系已经逐渐走上了与西方世界完全不同的道路.众所周知,欧美国家的移动化普及率远远不如我国,同时人口基数也有着数量级的不 ...

最新文章

  1. 15.4 xshell使用xftp传输文件;15.5 使用pure-ftpd搭建ftp服务
  2. python中的面向对象编程讲解_Python中的面向对象编程详解(上)
  3. 计算机基础知识的重点,计算机基础知识重点
  4. [Ext JS] Sencha Cmd命令参考之二
  5. 标准C程序设计七---120
  6. leetcode题库53-- 最大子序和
  7. Glut 回调函数小结
  8. [梦]2005.2.10
  9. webComponent初体验
  10. PPT、EXCEL、SPSS、水晶易表教程与学习资料汇总
  11. python调用通达信函数_Funcat 将同花顺、通达信等的公式写法移植到了 Python 中
  12. 数据挖掘 文本分类(二)搜集中文语料库与ICTCLAS分词
  13. 解决npm public提示403 Forbidden - PUT https://registry.npmjs.org/js-toolkit - You do not have permission
  14. 原创 基于微信场地预约小程序 毕业设计 毕设 源码 源代码 欣赏 - 可用于羽毛球、篮球、乒乓、网球等预约小程序
  15. Win10开始菜单点击没有反应打不开怎么办?
  16. 爱情降临的时刻你在等待着
  17. 【合集】Jerry Wang 2018~2021 四年期间的 SAP 技术文章合集
  18. 2023南京中医药大学计算机考研信息汇总
  19. IT专家的十大热门领域
  20. XNA实现3D连连看

热门文章

  1. textbox readonly的问题
  2. SQL:插入数据的小坑
  3. linux环境下安装OpenGL
  4. 矩池云如何使用 conda create 创建纯净的 Python3.6 环境?
  5. python PIL库 Image.new 和 paste
  6. leetcode题库124-- 二叉树中的最大路径和
  7. Boost.Asio取消异步操作
  8. Ubuntu 18.04安装codeblocks 17-12
  9. 南桥芯片组行业调研报告 - 市场现状分析与发展前景预测
  10. 中国抗衰老护肤品市场趋势报告、技术动态创新及市场预测