一致性hash

分布式系统架构的基本原则和实践概述

萝らか妹 提交于 2020-03-02 15:30:33
一、分布式系统遵循几个基本原则 1. CAP原理 CAP Theorem,CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,在分布式系统中这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。 从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是 强一致性 。如果能容忍后续的部分或者全部访问不到,则是 弱一致性 。如果经过一段时间后要求能访问到更新后的数据,则是 最终一致性 。 但web应用也有例外,比如支付宝系统,就要求数据(银行账户)的强一致性,而且面对大量淘宝用户,可用性要求很高,因此只能牺牲数据的分区冗余。这一点也曾在和支付宝工程师交流时,得到验证。 2. C10K问题 分布式系统另一个理论是C10K问题,即系统的并发用户增加1万(customer ten thousand

一致性HASH算法

给你一囗甜甜゛ 提交于 2019-12-29 19:56:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一致性HASH算法研究 1.引言 在研究Ceph CRUSH算法时,看到有文章说它是一种特殊的一致性HASH算法,于是我便开始研究一致性HASH算法做先期准备,发现理念确实接近,区别在于虚拟节点和物理节点的映射办法不同,这是Ceph的核心算法,非常关键,此处不表,下文分解。 2.一致性HASH的出现背景及其优势 在分布式系统中,常常利用HASH算法进行数据分布,目的是希望将数据均匀的分布到各节点,分担压力,尤其是在缓存系统中。一个典型的设计如下: 2.1场景说明 为了提升系统性能,解决数据库的性能瓶颈,设置N个缓存服务器,将应用和数据库进行隔离,每个缓存服务器负责数据库1/N的数据。应用程序在访问数据时,根据关键字计算得到hash值,并根据一定规则找到数据所在的缓存节点。 2.2最简单模型 最简单的办法是,采用hash(key) mode N的办法计算文件落在的服务器位置,那么在Find Cache Server步骤中,需要增加一个取摸操作,存在的问题是: 集群添加机器,计算公式变为hash(key) / (N + newAddedCount) 集群退出机器,计算公式变为hash(key) / (N - removedCount) 由于计算公式的分母变化,计算值也都将发生变化。通过取摸运算,找到的节点错误