文档章节

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

Abioy
 Abioy
发布于 2015/03/10 01:49
字数 1608
阅读 97
收藏 1
点赞 0
评论 0

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的解决方案很简单。

来自: http://www.cnblogs.com/sunyongyue/p/yale_google_calvin_brief.html

© 著作权归作者所有

共有 人打赏支持
Abioy
粉丝 0
博文 1
码字总数 1608
作品 0
广州
改朝换代:MySQL Group Replication

Paxos将成为这个新时代的主宰,这点姜老师深信不疑。四五年前甚至知道现在,仍有很多人怀疑MySQL是否能取代Oracle数据库,多年后腾讯、网易、阿里等互联网公司们用自己的实际案例大声地告诉那...

姜 承尧 ⋅ 2017/08/24 ⋅ 0

2017年秋招美团Java程序员开发,看我如何拿到offer

热乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧。三面技术面面经如下: 一面: 中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么...

Theriseof ⋅ 2017/12/12 ⋅ 0

【转】构建可扩展的微博架构(qcon beijing 2010演讲) by Tim Yang

在使用Twitter几年的时间里面,经常思考微博如何更好的实现,恰好最近几个月也参与了相关工作,大部分都是工程实践,总结实践会促生更具实际价值的理论。因此在QCon Beijing 2010这次演讲参考...

wanghhao ⋅ 2015/09/07 ⋅ 0

分布式事务之说说TCC事务

在当前如火如荼的互联网浪潮下,如何应对海量数据、高并发成为大家面临的普遍难题。广大IT公司从以往的集中式网站架构,纷纷转向分布式的网站架构,随之而来的就是进行数据库拆分和应用拆分,...

xiaogong1688 ⋅ 2017/08/07 ⋅ 0

构建可扩展的微博架构(qcon beijing 2010演讲)

在使用Twitter几年的时间里面,经常思考微博如何更好的实现,恰好最近几个月也参与了相关工作,大部分都是工程实践,总结实践会促生更具实际价值的理论。因此在QCon Beijing 2010这次演讲参考...

TimYangNet ⋅ 2010/05/19 ⋅ 0

数据库下半场财付通京东金融正面交锋!

  【IT168 评论】移动金融市场现在基本被三大互联网厂商分割:支付宝(阿里巴巴)、财付通(腾讯)、京东金融(京东)。能让这三大企业都凑齐的场合恐怕不多,更别说正面交锋了。在SACC大会《数据...

it168网站 ⋅ 2017/10/23 ⋅ 0

为什么我们在 TiDB 里面使用全局授时服务

前言 在 TiDB 里面,为了支持分布式事务,我们通过 PD,这个全局的单点服务,为事务分配全局唯一的时间,这个做法就是简单高效,但获取 timestamp 的时候会有网络开销。这点对一些人来说,就...

siddontang ⋅ 2017/11/26 ⋅ 0

物联网应用开发平台--Calvin

Calvin 是爱立信推出的开源其物联网IoT应用开发平台。 Calvin面向分布式物联网云计算开发,包含了一个物联网应用开发框架和物联网应用的运行时环境。爱立信为Calvin设定的宗旨是让物联网开发...

红薯 ⋅ 2015/06/07 ⋅ 1

如何使用私有网络部署全球同服游戏服务

版权声明:本文由吴晓斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/178 来源:腾云阁 https://www.qcloud.com/community 近年来,随着移动互联网技...

偶素浅小浅 ⋅ 2016/11/09 ⋅ 0

SACC2017:数据库架构设计与实践的后半生

  【IT168 资讯】在支付领域各占一席之地的财付通和京东金融很少在公开场合分享各自在数据库架构设计上的问题和思考,在SACC大会的数据库架构设计专场,财付通和京东金融来了一次正面碰撞,...

it168网站 ⋅ 2017/10/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 25分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部