HBase下的Lease

在BigTable的论文中讲到了Lease的概念。Least就好比你租房子住,签了多长的合约。如果时间长了,你可以续约(renew)。你也可能因为房子不习惯想换个地住,你就和房东说,取消住房(cancel)。当然在Hbase里,你不用交违约金。

因为BigTable会同时处理很多个客户端,就好比是一个有多套房子的房东同时把不同房间租给了多个不同的客户。那它关心什么呢?我想他首先关心的是每个客户的合约(lease)什么时候到期了。在HBase里,也有类似的问题需要进行管理。每个合约用一个Lease表示,这个类继承了java的Delayed接口。Delayed接口简单的讲,就是告诉其它人在过一段时间要有事发生. 在这里,用于Lease合约超期了通知它人。这个它人是在创建Lease时指定的,就好比是签租房合同时上面填写的租房人名字。

总结下,这里提到了几个概念:
合约 (租房合约              ): Least
它人 (合约过期通知对象): Listener
在Hbase里,每一份Lease都用一个唯一的名字来标识它。如果你想renew一个不存在的Lease或者想创建一个已经存在的Lease都会抛出异常。

最后,HBase具体怎么判断哪个Lease过期了呢?是由Leases类实现的。它把所有的Lease存放在DelayQueue中,并不断轮询是否由Lease
过期了。轮询(poll)的频率由leaseCheckFrequency控制。Lease的租用时间长度由leasePeriod指定。
    lease = leaseQueue.poll(leaseCheckFrequency, TimeUnit.MILLISECONDS);

当轮询到一个Lease过期了,就将该Lease删除并通知该Lease的Listener。

你可能感兴趣的:(hbase)