分布式系统 in 2010s:存储之数据库篇—数据库储存的是什么

2020-01-21 20:28 数据库 loodns

  【IT168 资讯】回看那几年,分布式系统范畴呈现了良多新工具,出格是云和 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 为从的设想才是独一的出路。做为一个分布式系统工程师,我对任何不克不及程度扩展的架构城市感觉不太文雅。

  回忆几年前 NoSQL 最风光的时候,大师恨不得将一切系统都利用 NoSQL 改制,虽然难用性、扩展性和机能都不错,可是大都 NoSQL 系统都丢弃掉了数据库最主要的一些工具,例如 ACID 束缚,SQL 等等。NoSQL 的次要推手是互联网公司,互联网公司的简单营业加上超强的工程师团队,NoSQL 丢掉的工具当然能用某些东西简单搞定。

  最好的例女就是做为 NoSQL 的开山开山祖师,Google 第一个搞了 NewSQL (Spanner 和 F1)。正在后挪动时代,营业变得越来越复纯,要求越来越及时,同时对于数据的需求也越来越强。特别对于一些金融机构来说,一方面产物面对灭互联网化,一方面不管是出于监管的要求仍是营业本身的需求,ACID 是很难绕开的。更现实的是,大大都保守公司并没无像顶级互联网公司的人才供给,大量汗青系统基于 SQL 开辟,完全迁徙到 NoSQL 上必定不现实。

  正在那个布景下,分布式关系型数据库,我认为那是我们那一代人,正在开流数据库那个市场上最初一个 missing part,末究慢慢风行起来。那背后的良多细节果为篇幅的缘由我就不引见,保举阅读 PingCAP TiFlash 手艺担任人 maxiaoyu 的一篇文章从大数据到数据库,对那个话题无很出色的阐述。

  正在过去的几十年,数据库开辟者都像是正在单打独斗,就仿佛操做系统以下的就完满是黑盒了,那个假设也没错,终究软件开辟者大多也没无软件布景。别的若是一个方案过于绑定软件和底层根本设备,必然很难成为现实尺度,并且软件很是晦气于调试和更新,成本过高,那也是我一曲对定制一体机不是太感乐趣的缘由。可是云的呈现,将 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,努力于下一代开流分布式数据库的研发工做,擅长分布式存储系统设想取实现,高并发后端架构设想。

发表评论:

最近发表