几句话说说跨IDC分布式数据库Calvin

CalvinFS拿了FAST 15最佳论文;找到了失联十三年的小伙伴;年终/年初整理资料,发现做团委工作的 King 师兄对Calvin有兴趣;最近其他团队对分布式事务和存储问题/兴趣较多……几件事激发了我写这本文的动机,要知道上一篇是2012年的(虽然一直有做个人学习、工作笔记)。

Yale的CalvinFS最有价值的就是元数据管理部分,也就是Calvin(的修改版)。没有跨IDC的Calvin,也就没有跨IDC的CalvinFS。以下的内容以旁观者角度写,一些问题简单描述,但是实际上非常难处理,Calvin等分布式系统的作者可能是花了大量精力才完成。在进入Calvin内容之前先提两个东西。

一个是ACID和CAP——因为里边都有A、C,所以放一起提:P 。ACID是数据库的概念,说的是事务;CAP是分布式系统的概念,说的是不存在三者完美的系统。A和C在两者里边是不同的。ACID里边的A是说原子性,而CAP里的A是可用性;而关于C,前者说的是相关内容(如索引与数据、关联等)的进行一致地变化,后者一般说的是同一内容几个副本一致进行变化,。ACID里边I是隔离性,D是持久性,都比较好理解。CAP中的P则是说分区容忍。

另一个是2PC和Paxos。首先,Paxos变种太多的,网上资料经常把几种变种混成一个,建议想了解还是看书或是原始论文吧。提分布式事务就会提到2PC、3PC、PAXOS,中间那种一般没人用不说。2PC主要问题在于阻塞,非coordinator服务挂掉基本都有较好的方案处理,而coordinator在prepare收到全部都是ok后挂掉……而PAXOS方面,自从有了zookeeper之后,也很多人用起来了,除了同步数据外,还有一些应用场景是HA选主等。

一般高大上的功能都伴随着CAP中某方面的妥协,Calvin也不例外。机器挂掉或是IDC出故障等P方面的问题总是存在的,一般只能在A和C里做选择,calvin主要牺牲的是A可用性(这个跟Spanner的选择是类似的,其实也是现在慢慢被认可的方向)。spanner得益于其truetime全局逻辑时间的设计,达到了外部一致性的级别,现实系统不可能做得更好。而Calvin则选择了顺序一致性,也就比外部一致性弱一些。但是所有的系统或设计都是分场景的,Calvin也不例外,虽然它提供了强一致的级别,支持ACID,但不代表一定要在所有场景下无条件放弃对A的追求。强一致的事务只是提供了一种选择,在不需要这方面保证(隔离性I、一致性C)时,直接跳过这一层可提升性能(可用性方面);虽然强一致带来的代价一定要存在,但是可以考虑把代价转移到不常用的地方去,比如读写场景中,增加写延时来优化读性能;同时,即便是写场景,一定程度上牺牲延迟,但是换取更大吞吐也成为很多跨IDC系统的设计方向。

上边提到了事务和一致性,这方面在calvin里的实现是很有意思的,走了一条跟时间流行方向不同的路线。分布式系统设计中,事务是一个难点。2PC的阻塞问题通过虚拟节点可以缓解,spanner在2pc下层放了paxos是一个意思。但是这总是一个问题,而且典型系统中的并发更新带来的死锁问题,在更新操作变重的分布式系统中会被放大。calvin直接干掉了2PC,这是通过把更新操作而不是更新结果做同步来达到,其实也就是用全局的队列(paxos实现),来同步操作日志。而死锁方面则通过预先定义读写set和ordered lock来规避(一些事务不能预先定义读写set的要用到OLLP机制)。这种事务设计,对单个机器上的请求返回速度比较敏感,特别是为了批量处理而人为地引入了一个最大10ms等待时间之后。calvin用了一个warm up的方案来弥补,挺有意思的,思想就是把一些事情放到事务开始前,把数据提前load到内存。但是需要注意到的是,因为同步的是操作日志而不是结果,所以要求各副本在收到相同日志后,应该有相同的结果,也就是说不确定性因素(如本机硬盘坏)等引起的问题不能abort事务。这是相比2PC方案的缺点,在这种情况下,出问题的副本只能自行同步/恢复到正确副本的状态上去。这里边有一个想要吐嘈的地方:哪些场景下应该warm-up,应该warm-up哪些数据,这两个问题是warm-up机制需要处理的,而calvin论文中对前者是直接实验出一个经验值,后者是暂时没有好方案……

Calvin除了deterministic这点外,其他是很多思路包括跨IDC延时现状的情况下,尽力提升吞吐和主要场景性能等现在已经是大多数分布式系统设计时的同识/方向。其设计的线性化扩展能力也是其他系统也在追寻的,虽然我对它的性能扩展能力有一些疑问……

写得比较随意,如有错漏还请指正。同时如上文所说,一些问题的处理是很有难度的,希望不要因为这里的轻描淡定而误导成calvin的解决方案很简单。

时间: 2024-10-07 06:55:14

几句话说说跨IDC分布式数据库Calvin的相关文章

分布式数据库选型——数据水平拆分方案

概述 水平拆分的概念随着分布式数据库的推广已为大部分人熟知.分库分表.异构索引.小表广播.这些功能几乎是产品功能需求标配.然而有些客户使用分布式数据库后的体验不尽如意.本文尝试从数据的角度总结分布式数据的复制(replication)和分区(partition)技术原理和方案,其中分区也有称为分片(sharding),希望能引起读者一些思考,在分布式数据库选型中能注意这些细节的区别,选择适合业务的数据水平拆分方案. 分布式数据库架构 分布式数据库以集群形式存在,有多个节点.集群架构有共享磁盘架构

用七年时间造出的阿里云,如今三句话告诉你是什么

马云在2016年10月杭州云栖大会的主题演讲中只字未提"阿里云",但这并不说明阿里云不重要,而是在某种意义上说明在马云的心里,阿里云"从0到1"的阶段已经完成了. 在10月13日杭州云栖大会开幕当天,马云发表了就上一财年致股东信,信中提及阿里云承载了中国35%的网站并为之提供云计算和大数据的服务,而截至2016年3月31日的阿里财报显示阿里云拥有超过230万用户,其中云计算付费用户达50万. 从2009年2月写下阿里云的第一段代码开始,阿里云上上下下的负责人们就一直

分布式数据库中全局唯一主键

[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现><activiti5.10解决分布式集群部署的主键问题><分布式环境下数据库主键方案><如何在高并发分布式系统中生成全局唯一Id><分布式环境下ID生成方法总结> <分布式环境下数据库主键方案> [ http://www.2cto.com/database/201309/243195.html ] 在只使用单数据库时,使用自增主键ID无疑是最适合的.但在集群.主从架构上时

在大学时的分布式数据库读书笔记 拿出来分享

二章 一.分布式数据库系统的设计 1数据库设计概述 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据. 数据库设计的基本步骤(如图2.1): 需求分析 概念结构设计 逻辑结构设计 物理结构设计 数据库的建立和测试 数据库运行和维护. 图2.1 数据库各阶段设计描述,如图2.2 图2.2 2命名规范 2.1 命名总规则 1.  所有名称的字符范围为:A-Z, a-z, 0-9 和_(下划线).不允许使用其他字符作为名称. 2.  采用英文单

8句话让你彻底明白什么是大数据营销

这个时代搞营销就像是在做一道未知口味的超级大蛋糕,而营销手段就好比不同的口味的配料,随着个人的喜好不同,配出的味道也将会不一样,但这个蛋糕终归是要拿到桌面上去品尝,所以在海量的人群信息中如何具有针对性的让潜在客户看见并接受呢? 答案就是大数据的运用.随着移动互联网的发展和移动智能设备软硬件功能的不断完善,网民使用习惯发生了巨大变化,用户行为方式从传统的PC端为主转变为"PC端+移动端"并重,呈现出跨屏互动的趋势,至此大数据的作用也日益明显起来.然而对于大数据及营销你真的了解吗?它到底有

Oracle学习(十五):分布式数据库

--分布式数据库的独立性:分布数据的独立性指用户不必关心数据如何分割和存储,只需关心他需要什么数据. --本地操作 SQL> sqlplus scott/tiger --远程操作 SQL> sqlplus scott/[email protected]:1521/orcl --分布式操作 SQL> --创建数据库链路l2(需要权限): SQL> --remoteorcl服务命名(在net manager里配置):配置跟远程服务器的数据库的连接协议.主机名(ip地址).端口号等 SQ

分布式数据库MVCC读写设计

分布式数据库数据表分成多个parition,分布在不同server上,拓扑是每个server维护不同的版本时间戳,相比单机数据库,提供MVCC要复杂很多,当然,你如果有spanner的原子钟,那会简单很多. 现描述一种可行的实现方案,抛砖引玉. 此方案可以做如下保证: 1.单Partition读(分分布式事务读)可以保重repeated read. 2同一个server上的分布式事务可以保证repeated read,并且对外保证因果序列: 3.跨partition不能保证因果序,但可保证rep

跨IDC ycache原理和配置说明

总体介绍:   多idc缓存方案的invalid方案(如下图),是通过两个操作保证多个idc之间的缓存的高可用性和最终一致性的. 更新数据库后,发送invalid消息:invalid消息广播到其他idc后,立即删除所在idc缓存中的对应key:单凭这个操作,在使用一个数据库的场景,已经能保证缓存一致性了:在使用主.备数据库的场景,如果主备库的同步非常快,也能保证很大概率的缓存一致性: invalid消息会在每个idc的缓存中设置一个mark,用来标志这个key已经被其他人更新了,并且设置一个TT

阿里10年分布式数据库技术沉淀,AliSQL X-Cluster的应用实战

MySQL 数据库从诞生以来就以简单.易用.开源为主打特点,成为不少开发者首选的数据库系统.阿里集团在 2008 年开始提出"去 IOE"的口号,迈入了  MySQL 数据库的时代.系统使用大量的 MySQL,配合业务的改造替代原有的商业版 Oracle 系统.根据阿里交易型应用的特点,以及双十一这样业界罕有的需求推动下,我们在官方的 MySQL 基础上增加了非常多实用的功能.性能补丁,打造了 AliSQL 这个  MySQL 分支品牌. 时间很快走到 2014 年,随着业务高速的增长