We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。
系统通过副本控制协议,是得从系统外部读取内部各个副本的数据在一定条件下,读到的数据相同称之为副本一致性(consistency)。
哈希方式
按数据范围分布,比如用户 id[0-100],30 个一分区,工程中,为了数据迁移等负载均衡操作的方便, 往往利用动态划分区间的技术,使得每个区间中服务的数据量尽量的一样多。一般的,往往需要使用专门的服务器在内存中维护数据分布信息, 称这种数据的分布信息为一种元信息。实际工程中,一般也不按照某一维度划分数据范围,而是使用全部数据划分范围,从而避免数 据倾斜的问题。
按数据量分布,就是把固定大小的数据放在一起,好比 linux 中的 page,一个 page 一管理
一致性哈希,一致性哈希的基本方式是使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希 函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每个节点负责处理从自己开始顺 时针至下一个节点的全部哈希值域上的数据。一致性哈希 的优点在于可以任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的 节点。
为此一种常见的改进算法是引入虚节点(virtual node)的概念,系统初始时就创建许多虚节点, 虚节点的个数一般远大于未来集群中机器的个数,将虚节点均匀分布到一致性哈希值域环上,其功能与基本一致性哈希算法中的节点相同。为每个节点分配若干虚节点。操作数据时,首先通过数据 的哈希值在环上找到对应的虚节点,进而查找元数据找到对应的真实节点。使用虚节点改进有多个 优点。首先,一旦某个节点不可用,该节点将使得多个虚节点不可用,从而使得多个相邻的真实节 点负载失效节点的压里。同理,一旦加入一个新节点,可以分配多个虚节点,从而使得新节点可以 负载多个原有节点的压力,从全局看,较容易实现扩容时的负载均衡。(原理是增加很多的虚拟节点,再将虚拟节点对应到真实节点参见)
移动数据不如移动计算
lease 机 制最重要的应用:判定节点状态。
基本的问题背景如下:在一个分布式系统中,有一个中心服务器节点,中心服务器存储、维护 着一些数据,这些数据是系统的元数据。系统中其他的节点通过访问中心服务器节点读取、修改其 上的元数据。由于系统中各种操作都依赖于元数据,如果每次读取元数据的操作都访问中心服务器 节点,那么中心服务器节点的性能成为系统的瓶颈。为此,设计一种元数据 cache,在各个节点上 cache 元数据信息,从而减少对中心服务器节点的访问,提高性能。另一方面,系统的正确运行严 格依赖于元数据的正确,这就要求各个节点上 cache 的数据始终与中心服务器上的数据一致,cache 中的数据不能是旧的脏数据。最后,设计的 cache 系统要能最大可能的处理节点宕机、网络中断等 异常,最大程度的提高系统的可用性。
首先假设中心服务器与节点之间的时间同步。中心服务器向 cache 节点发送数据的同时下发一个 lease,每个 lease 都一个过期时间,并且这个过期时间是一个明确的时间点,例如 12:00 一旦过了这个时间,那么所有的缓存数据都将过期,lease 失效。这也意味着 lease 的过期时间与发放时间无关,也就是说有可能节点收到数据时 lease 就已经过期了。中心发出的 lease 的含义是:在 lease 时间内服务器保证不修改数据。
读流程:判断元数据是否已经处于本地 cache 且 lease 处于有效期内 1.1 是:直接返回 cache 中的元数据 1.2 否:向中心服务器节点请求读取元数据信息 1.2.1 服务器收到读取请求后,返回元数据及一个对应的 lease 1.2.2 客户端是否成功收到服务器返回的数据 1.2.2.1 失败或超时:退出流程,读取失败,可重试 1.2.2.2 成功:将元数据与该元数据的 lease 记录到内存中,返回元数据
修改流程:
首先给出本文对 lease 的定义:Lease 是由颁发者授予的在某一有效期内的承诺。颁发者一旦发 出 lease,则无论接受方是否收到,也无论后续接收方处于何种状态,只要 lease 不过期,颁发者一 定严守承诺;另一方面,接收方在 lease 的有效期内可以使用颁发者的承诺,但一旦 lease 过期,接 收方一定不能继续使用颁发者的承诺。
由于 lease 是一种承诺,具体的承诺内容可以非常宽泛,可以是上节的例子中数据的正确性;也 可以是某种权限,例如当需要做并发控制时,同一时刻只给某一个节点颁发 lease,只有持有 lease 的节点才可以修改数据;也可以是某种身份,例如在 primary-secondary(2.2.2 )架构中,给节点颁发 lease,只有持有 lease 的节点才具有 primary 身份。Lease 的承诺的内涵还可以非常宽泛,这里不再 一一列举。
关于时钟同步问题可以让 client 在申请 lease 时带上自己的时间戳,server 判断若是相差太大就不允许接入
是指分布式系统的状态,点对点的还是可以使用的
Lease 的有效期虽然是一个确定的时间点,当颁发者在发布 lease 时通常都是将当前时间加上一 个固定的时长从而计算出 lease 的有效期。如何选择 Lease 的时长在工程实践中是一个值得讨论的问 题。如果 lease 的时长太短,例如 1s,一旦出现网络抖动 lease 很容易丢失,从而造成节点失去 lease, 使得依赖 lease 的服务停止;如果 lease 的时长太大,例如 1 分钟,则一旦接受者异常,颁发者需要 过长的时间收回 lease 承诺。例如,使用 lease 确定节点状态时,若 lease 时间过短,有可能造成网络 瞬断时节点收不到 lease 从而引起服务不稳定,若 lease 时间过长,则一旦某节点宕机异常,需要较 大的时间等待 lease 过期才能发现节点异常。工程中,常选择的 lease 时长是 10 秒级别,这是一个经 过验证的经验值,实践中可以作为参考并综合选择合适的时长。
于是就有人提出相对弱一点的一致性模型,这些模型包括:线性一致性,原子一致性,顺序一致性,缓存一致性,静态一致性,处理器一致性,PRAM一致性,释放一致性,因果一致性,TSO一致性,PSO一致性,弱序一致性,本地一致性,连续一致性等等,当然,也包括我们要详细介绍的最终一致性。
https://pure-earth-7284.herokuapp.com/2016/02/14/talk-about-consistency/
The text was updated successfully, but these errors were encountered:
No branches or pull requests
分布式的三个状态
tcp 不可靠就是说网络不可靠
异常处理黄金原则: 任何在设计阶段考虑到的情况都会在实际系统中发生;在实际运行中发生的异常反而没有在设计阶段想到。因此不要放过,设计阶段想到的任何异常。
副本
副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。
副本一致性
系统通过副本控制协议,是得从系统外部读取内部各个副本的数据在一定条件下,读到的数据相同称之为副本一致性(consistency)。
衡量分布式系统的指标
分布式系统原理
数据分布方式
哈希方式
按数据范围分布,比如用户 id[0-100],30 个一分区,工程中,为了数据迁移等负载均衡操作的方便, 往往利用动态划分区间的技术,使得每个区间中服务的数据量尽量的一样多。一般的,往往需要使用专门的服务器在内存中维护数据分布信息, 称这种数据的分布信息为一种元信息。实际工程中,一般也不按照某一维度划分数据范围,而是使用全部数据划分范围,从而避免数 据倾斜的问题。
按数据量分布,就是把固定大小的数据放在一起,好比 linux 中的 page,一个 page 一管理
一致性哈希,一致性哈希的基本方式是使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希 函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每个节点负责处理从自己开始顺 时针至下一个节点的全部哈希值域上的数据。一致性哈希 的优点在于可以任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的 节点。
为此一种常见的改进算法是引入虚节点(virtual node)的概念,系统初始时就创建许多虚节点, 虚节点的个数一般远大于未来集群中机器的个数,将虚节点均匀分布到一致性哈希值域环上,其功能与基本一致性哈希算法中的节点相同。为每个节点分配若干虚节点。操作数据时,首先通过数据 的哈希值在环上找到对应的虚节点,进而查找元数据找到对应的真实节点。使用虚节点改进有多个 优点。首先,一旦某个节点不可用,该节点将使得多个虚节点不可用,从而使得多个相邻的真实节 点负载失效节点的压里。同理,一旦加入一个新节点,可以分配多个虚节点,从而使得新节点可以 负载多个原有节点的压力,从全局看,较容易实现扩容时的负载均衡。(原理是增加很多的虚拟节点,再将虚拟节点对应到真实节点参见)
副本与数据分布
本地化计算
移动数据不如移动计算
基本副本协议
Lease 机制 (租赁机制)
lease 机 制最重要的应用:判定节点状态。
基于 lease 的分布式 cache 系统
基本的问题背景如下:在一个分布式系统中,有一个中心服务器节点,中心服务器存储、维护 着一些数据,这些数据是系统的元数据。系统中其他的节点通过访问中心服务器节点读取、修改其 上的元数据。由于系统中各种操作都依赖于元数据,如果每次读取元数据的操作都访问中心服务器 节点,那么中心服务器节点的性能成为系统的瓶颈。为此,设计一种元数据 cache,在各个节点上 cache 元数据信息,从而减少对中心服务器节点的访问,提高性能。另一方面,系统的正确运行严 格依赖于元数据的正确,这就要求各个节点上 cache 的数据始终与中心服务器上的数据一致,cache 中的数据不能是旧的脏数据。最后,设计的 cache 系统要能最大可能的处理节点宕机、网络中断等 异常,最大程度的提高系统的可用性。
lease cache 的实现原理
首先假设中心服务器与节点之间的时间同步。中心服务器向 cache 节点发送数据的同时下发一个 lease,每个 lease 都一个过期时间,并且这个过期时间是一个明确的时间点,例如 12:00 一旦过了这个时间,那么所有的缓存数据都将过期,lease 失效。这也意味着 lease 的过期时间与发放时间无关,也就是说有可能节点收到数据时 lease 就已经过期了。中心发出的 lease 的含义是:在 lease 时间内服务器保证不修改数据。
读流程:判断元数据是否已经处于本地 cache 且 lease 处于有效期内
1.1 是:直接返回 cache 中的元数据
1.2 否:向中心服务器节点请求读取元数据信息
1.2.1 服务器收到读取请求后,返回元数据及一个对应的 lease
1.2.2 客户端是否成功收到服务器返回的数据
1.2.2.1 失败或超时:退出流程,读取失败,可重试
1.2.2.2 成功:将元数据与该元数据的 lease 记录到内存中,返回元数据
修改流程:
lease 机制的分析
首先给出本文对 lease 的定义:Lease 是由颁发者授予的在某一有效期内的承诺。颁发者一旦发 出 lease,则无论接受方是否收到,也无论后续接收方处于何种状态,只要 lease 不过期,颁发者一 定严守承诺;另一方面,接收方在 lease 的有效期内可以使用颁发者的承诺,但一旦 lease 过期,接 收方一定不能继续使用颁发者的承诺。
由于 lease 是一种承诺,具体的承诺内容可以非常宽泛,可以是上节的例子中数据的正确性;也 可以是某种权限,例如当需要做并发控制时,同一时刻只给某一个节点颁发 lease,只有持有 lease 的节点才可以修改数据;也可以是某种身份,例如在 primary-secondary(2.2.2 )架构中,给节点颁发 lease,只有持有 lease 的节点才具有 primary 身份。Lease 的承诺的内涵还可以非常宽泛,这里不再 一一列举。
关于时钟同步问题可以让 client 在申请 lease 时带上自己的时间戳,server 判断若是相差太大就不允许接入
基于 lease 机制确定节点状态
分布式主要是 3 点
心跳无法解决节点状态问题
是指分布式系统的状态,点对点的还是可以使用的
lease 的有效期时间选择
Lease 的有效期虽然是一个确定的时间点,当颁发者在发布 lease 时通常都是将当前时间加上一 个固定的时长从而计算出 lease 的有效期。如何选择 Lease 的时长在工程实践中是一个值得讨论的问 题。如果 lease 的时长太短,例如 1s,一旦出现网络抖动 lease 很容易丢失,从而造成节点失去 lease, 使得依赖 lease 的服务停止;如果 lease 的时长太大,例如 1 分钟,则一旦接受者异常,颁发者需要 过长的时间收回 lease 承诺。例如,使用 lease 确定节点状态时,若 lease 时间过短,有可能造成网络 瞬断时节点收不到 lease 从而引起服务不稳定,若 lease 时间过长,则一旦某节点宕机异常,需要较 大的时间等待 lease 过期才能发现节点异常。工程中,常选择的 lease 时长是 10 秒级别,这是一个经 过验证的经验值,实践中可以作为参考并综合选择合适的时长。
一致性种类
于是就有人提出相对弱一点的一致性模型,这些模型包括:线性一致性,原子一致性,顺序一致性,缓存一致性,静态一致性,处理器一致性,PRAM一致性,释放一致性,因果一致性,TSO一致性,PSO一致性,弱序一致性,本地一致性,连续一致性等等,当然,也包括我们要详细介绍的最终一致性。
https://pure-earth-7284.herokuapp.com/2016/02/14/talk-about-consistency/
The text was updated successfully, but these errors were encountered: