lease 分布式
来源:互联网 发布:php用逗号拼接字符串 编辑:程序博客网 时间:2024/05/19 22:23
背景和介绍
缓存是计算机里广泛使用的一种技术,对降低读取延迟、网络流量和服务器负载都非常有效,但也带来了一致性(Consistency)的问题。所谓一致就是客户端总能读到最新的数据,使用缓存后有可能服务器端的数据已经被修改,但客户端仍然从缓存中读取陈旧的数据。为了保证一致性,有两种常见的解决办法,第一种是轮询(Polling),即每次读取数据时都先询问服务器数据是不是最新的,如果不是就从服务器传输新数据,这种方法需要每次读取数据时都与服务器通信。另一种方法就是回调(Callback)或者无效化(Invalidation),就是由服务器记住有哪些客户端读取了数据,对数据做修改时首先通知所有这些客户端数据已经失效,这种方法的问题在于服务器需要记住所有读取过数据的客户端,这是很大的负担,更严重的是,一旦有客户端联系不上或者丢失了客户端的信息,修改操作就无法继续。
在租约期限内,客户端可以保证其缓存中的数据是最新的。同时,租约可以容忍各种非拜占庭式失效(机器崩溃、网络分割等)。如果客户端崩溃或者网络中断,服务器只需要等待其租约过期就可以进行修改操作。如果服务器出错丢失了所有客户端的信息,它只需要知道租约的最长期限,就可以在这个期限之后安全的修改数据。与回调方式相比,服务器只需记住还拥有租约的客户端即可。
租约属性和管理
租约的属性和管理有多种选择,首先要考虑的就是租约期限的长短。
互联网的一致性问题
在互联网环境下,一致性问题更加复杂,因为网络延迟比局域网要大的多,客户端失效和网络分割都很常见。因此很多情况下,我们都只保证缓存的弱一致性,也就是不保证客户端总能读到最新的数据,只是尽量保证其读到的数据还不是非常滞后。相应的,我们把前面使用的一致性称为强一致性。目前最常用的保证弱一致性的方法就是生存期(TTL), 即读取数据的时候会指定生存期,在生存期内客户端直接从缓存中读取数据,之后必须与服务器通信验证缓存有效性或者获取最新数据。很显然,我们可以给变化较 多的数据分配较短的生存期来尽量减少客户端读取过期数据的几率,而给变化较少的数据分配较长的生存期来减少读取延迟和服务器负载。
1992年CMU的Vincent Gate在Alex项目中实现了可变生存期(Adaptive TTL),这个技术基于这样的观察,就是新数据比旧数据更容易被修改。 在Alex中采用了更新阈值(update threshold)的概念,把生存期设定为其缓存时间的一个百分比。假设一个刚刚向服务器验证过的数据已经在缓存中存在了10个钟头,其更新阈值为 20%,那么其生存期就是2个钟头。采用可变生存期技术并不能减少网络流量,但是可以比普通的生存期技术减少服务器负荷。
卷租约
一旦卷租约过期,服务器就认为相应的对象租约也都过期,客户端重新获取卷租约时,会检查相应的对象租约的有效性,如果数据没有修改就续约,否则清空缓存。事实上,卷租约和对象租约类似于 心跳和回调,前者主要用来确定客户端的状态,后者用来定位对数据有兴趣的客户端。通过两种租约的结合,可以较好的平衡失效延迟和通信开销。实验数据表明,要取得同样的 失效延迟时间,卷租约机制可以比普通租约机制减少三成到四成的消息数。粗一想或许还会奇怪,加了一个租约怎么能够减少通信呢?这是因为要取得同样的失效延迟,普通租约就必须把租约期限设定在延迟期限内(比如20秒),而如果使用卷租约,只需把卷租约的期限设定在延迟期限内,而对象租约的时间可以设的很长。因为卷租约的通信开销有好几个对象分摊,而对象租约的开销因为期限很长事实上非常小,所以总的开销会小于只使用普通租约的情况。
租约的其他应用
很多情况下,系统中已经有一个保证一致性的中心服务,如某个 单一服务器或者是 实现了Paxos协议的一组服务器,但如果所有的功能都需要通过这个中心服务,很容易造成性能瓶颈。为了提高效率和扩展性,可以通过租约把 一致性扩展到更多服务上。事实上用租约来维护缓存一致性也是相当于把服务器上的数据一致性扩展到了客户端。
到底租约是什么?
在很多时候,租约的定义似乎很模糊,有的时候租约类似心跳,有的时候又类似于锁。到底租约的本质是什么呢?回到租约最原始的定义:租约就是在 一定期限内给予持有者 特定权力的 协议。我觉得这里的期限就是租约的根本特性,正是这一特性使得租约可以容忍机器失效和网络分割。在期限之内,租约其实就是服务器和客户端之间的协议,而这 个协议的内容可以五花八门。如果协议内容是服务器确认客户端还存活,那么这个租约的功能就相当于心跳;如果协议内容是服务器保证内容不会被修改,那么这个 租约就相当于读锁;如果协议内容是服务器保证内容只能被这个客户端修改,那么这个租约就相当于写锁。租约这种灵活性和容错性,使其成为了维护分布式系统一致性的有效工具。
- lease 分布式
- 分布式文件系统:lease机制
- Lease
- lease
- Lease 机制在分布式系统中的应用
- Lease 机制在分布式系统中的应用
- Lease 机制在分布式系统中的应用
- 大数据分布式基础-Lease机制简介和应用
- 分布式选主 -- 利用Mysql ACID和Lease协议实现选主和高可用
- lease机制
- Lease问题
- lease paper
- lease机制
- lease 脑裂
- lease机制
- 基于Lease的一致性
- lease引发的血案
- hbase源码学习.Lease
- 【分布式系统工程实现】如何检测一台机器是否宕机?
- opencv中自带blobtrack运行演示
- uva10054-The Necklace(项链)
- 数据类型相互转换
- 招聘中级测试工程师、开发测试工程师各一名
- lease 分布式
- SEO网络优化方法
- 50个必备的实用jQuery代码段
- CF-18D - Seller Bob(贪心+简单大数)
- Python 初体验之 最基本的if-else-while-for
- 一个字节造成的巨大性能差异——SQL Server存储结构
- 数据绑定之DataBinding细解
- decision_tree (ID3) with python
- 代码风格