分布式系统理论基础 - 一致性、2PC和3PC

引言 狭义的分布式系统指由网络连接的计算机系统,每个节点独立地承担计算或存储任务,节点间通过网络协同工作.广义的分布式系统是一个相对的概念,正如Leslie Lamport所说[1]: What is a distributed systeme. Distribution is in the eye of the beholder. To the user sitting at the keyboard, his IBM personal computer is a nondistributed

Java 多线程之内存一致性错误

当不同的线程针对相同的数据却读到了不同的值时就发生了内存一致性错误.内存一致性错误的原因是非常复杂的.幸运的是我们程序员不需要详细的理解这些原因,我们需要做的事情就是使用策略来规避这些. 避免内存一致性错误的关键就是需要先理解happens-before 关系.这个关系只是简单保证了一个确定语句所写的内存对另外一个确定的语句来说是可见的.为了更好的明白这个,来看看下面这个例子.假设一个简单的int是这样被定义和初始化: int counter = 0; counter能被线程A和B访问.假设线程

MySQL 一致性读 深入研究

一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innodb-consistent-read.html A consistent read means that InnoDB uses multi-versioning to present to a query a snapshot of the database at a point in time.

一致性算法Paxos详解

分布式系统除了能提升整个系统的性能外还有一个重要的特性就是提高系统的可靠性,可靠性指的是当分布式系统中一台或N台机器宕掉后都不会导致系统不可用,分布式系统是state machine replication的,每个节点都可能是其他节点的快照,这是保证分布式系统高可靠性的关键, 而存在多个复制节点就会存在数据不一致的问题,这时一致性就成了分布式系统的核心:在分布式系统中必须保证: 假如在分布式系统中初始是各个节点的数据是一致的,每个节点都顺序执行系列操作,然后每个节点最终的数据还是一致的. 一致性

一致性 Hash 算法

一.概述 1.我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择.与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储.一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置. 2.常规hash算法的应用以及其弊端 最常规的方式莫过于hash取模的方式.比如集群中可用机器适量为N,那么key值为K的的数据请求很简单的应该路由到hash(K)

一致性Hash算法(分布式算法)

一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法? 比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在服务器数量不发生改变的情况下,如果采用普通的hash再对服务器总数量取模的方法(如key%服务器总数量),如果期间有服务器宕机了或者需要增加服务器,问题就出来了. 同一个key经过hash之后,再与服务器总数量取模的结果跟之前的结果会不一样,这就导致了之前保存数据的丢失.因此,引入了一致性Hash(Consistent Hashing)分布算法 把数据用hash函数(

如何解决分布式系统数据事务一致性问题(HBase加Solr)

如何解决分布式系统数据事务一致性问题 (HBase加Solr) 摘要:对于所有的分布式系统,我想事务一致性问题是极其非常重要的问题,因为它直接影响到系统的可用性.本文以下所述所要解决的问题是:对于入HBase和Solr的过程,如何保证HBase中写入的数据与Solr中写入的数据完全一致. 关键词:HBase, Solr, 分布式, 事务, 系统架构, 大数据 作者:王安琪(博客:http://www.cnblogs.com/wgp13x/) 一.关于分布式系统事务一致性问题 Java 中有三种可

分布算法之一致性哈希算法

在进行大型网站的web开发时,分布式这个词经常出现在我们面前.如: memcache.redis服务器等缓存服务器的负载均衡(分布式cache), MySQL的分布式集群(分布式DB), 大量session的共享存储(分布式文件,或session服务器等), 这些都会用到分布式的思想,究其根源,都要理解分布式算法.原谅我扯这么一堆才扯出本文的主题,一致性哈希算法.接下来以缓存服务器的负载均衡来谈一下一致性哈希算法. 传统算法缺陷 对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位

一致性哈希算法怎么保证数据的一致性

比如,图中,如果弄的node2挂了,根据算法,原来node2的数据会到node4,但是如果node2又恢复了,但是这个时候node2可能是老的数据(假设数据还在),数据的一致性就不能保证了 --cut-- justjavac在2014-10-22 22:17:20回答到: 这是缓存吧.数据老了,直接删除. huandu在2014-10-22 18:44:23回答到: 一致性哈希(Consistent Hashing)和数据一致性没有任何关系,这是个关键的理解错误. 一致性哈希只是保证在分布式结构

CAP理论及系统一致性

印象中CAP理论开始流行是从Amazon Dynamo的论文开始的,Amazon的CTO还在他的博客中介绍了最终一致性的概念,从此以后,各种会议和交流中都少不了CAP的影子.然而,对于分布式系统工程设计和开发来说,CAP意味着什么呢? CAP 理论由 Berkerly 的 Brewer 教授提出,三者的含义如下: 一致性 ( Consistency) :任何一个读操作总是能读取到之前完成的写操作结果: 可用性 ( Availability) :每一个操作总是能够在确定的时间内返回: 分区可容忍性

PowerPC——缓存一致性入门介绍

本文是RAD Game Tools程序员Fabian "ryg" Giesen在其博客上发表的<Cache coherency primer>一文的翻译,经作者许可分享至InfoQ中文站.该系列共有两篇,本文系第一篇. 我计划写一些关于多核场景下数据组织的文章.写了第一篇,但我很快意识到有大量的基础知识我首先需要讲一下.在本文中,我就尝试阐述这些知识. 缓存(Cache) 本文是关于CPU缓存的快速入门.我假设你已经有了基本概念,但你可能不熟悉其中的一些细节.(如果你已经熟

利用percona-toolkit工具检查MySQL数据库主从复制数据的一致性,以及修复。

利用percona-toolkit工具检查MySQL数据库主从复制数据的一致性,以及修复. 一.pt-table-checksum检查主从库数据的一致性 pt-table-checksum在MASTER上校验指定库.表,将结果存在一个库表里,复制进程将检验sql传递到slave上再执行一次.通过比较M/S的检验值确定数据是否一致.利用主从复制做检验,不需要在检验期间对主从数据库同时锁表,可以控制校验的数据和速度,不影响到正常服务. 安装: #依赖包 yum –y perl-DBI perl-DB

一致性Hash与负载均衡

前言 在我们的日常web应用开发当中memcached可以算作是当今的标准开发配置了.相信memcache的基本原理大家也都了解过了,memcache虽然是分布式的应用服务,但分布的原则是由client端的api来决定的,api根据存储用的key以及已知的服务器列表,根据key的hash计算将指定的key存储到对应的服务器列表上. 基本的原理以及分布 在这里我们通常使用的方法是根据 key的hash值%服务器数取余数 的方法来决定当前这个key的内容发往哪一个服务器的.这里会涉及到一个hash算

一致性哈希算法

tencent2012笔试题附加题 问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器. 已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去.但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器,这样会发

(转) 一致性Hash算法在Memcached中的应用

前言 大家应该都知道Memcached要想实现分布式只能在客户端来完成,目前比较流行的是通过一致性hash算法来实现.常规的方法是将 server的hash值与server的总台数进行求余,即hash%N,这种方法的弊端是当增减服务器时,将会有较多的缓存需要被重新分配且会造成缓 存分配不均匀的情况(有可能某一台服务器分配的很多,其它的却很少). 今天分享一种叫做"ketama"的一致性hash算法,它通过虚拟节点的概念和不同的缓存分配规则有效的抑制了缓存分布不均匀,并最大限度地减少服务

SOAPSonar测试框架容易部署,并提供功能、性能、一致性和安全性测试

SOAPSonar是领先的服务测试和诊断解决方案,世界上有超过40,000份部署应用.SOAPSonar为基于HTTP,HTTPs, MQ 和 JMS协议的SOAP, XML, 和REST服务提供简单.直观和综合的测试.SOAPSonar测试框架容易部署,并提供功能.性能.一致性和安全性测试. 自始自终,Crosscheck Networks 都将SOAPSonar设计为综合的测试解决方案,在服务开发的整个周期中都可使用其功能.SOAPSonar容易部署,且不需要SOA网络通讯P,XML,或者

zookeeper的一致性协议:Zab

转自:http://blog.csdn.net/chen77716/article/details/7309915 Zookeeper使用了一种称为ZabZookeeper Atomic Broadcast的协议作为其一致性复制的核心据其作者说这是一种新发算法其特点是充分考虑了Yahoo的具体情况高吞吐量.低延迟.健壮.简单但不过分要求其扩展性.下面将展示一些该协议的核心内容 另本文仅讨论Zookeeper使用的一致性协议而非讨论其源码实现 Zookeeper的实现是有Client.Server

[转]图解分布式一致性协议Paxos

Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理>: Google Chubby的作者MikeBurrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品. <大规模分布式存储系统>: 理解了这两个分布式协议之后(Paxos/2PC),学习其他分布式协议会变得相当容易. 学习Paxos算法有两部分:a) 算法的原理/证明:b) 算法的理解/运作. 理解这个算法的运作过程其实基本就可以用于工程实践.而且理解这个过程相对

一致性hash的理解

参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html http://blog.csdn.net/cywosp/article/details/23397179 传统的hash算法在存储集群中很常用,比如数据库的sharding,我们就可以通过hash值映射到不同的服务器,架设有N台服务器,那么就是Key%N. 但是在分布式系统的场景中,随时可能添加新的服务器,或者有服务器宕机,这时就会出现映射故障. 一致性has

[php]对服务器进行一致性hash分布算法

<?php /** * 对服务器进行一致性hash分布算法 */ class HashRing { private $servers = array(); private $nodeList = array(); private $nodeHashList = array(); private $nodeTotalNum = 0; private $virtualNodeNum = 32; private $keyHash = ''; public function __construct($s