月度归档:2014年08月

Lease与最长宕机时间分析

先看简单的情况,单点rootserver负责updateserver选主,与ups保持lease,设lease时间为L,可以知道ups最长不可服务的情况是,rs刚刚授予ups lease后,ups就意外宕机,rs要等lease超时后,才能重新选主,所以rs不宕机的情况下ups的最长不可服务时间就是L

 

L大小的选择也不是越小越好,因为过小的L会使得rs宕机重启影响到upslease,我们期望rs宕机重启的过程不影响到upslease。这里假设upsrs renew lease的间隔是TT<L,即每隔T秒,ups就来renew lease,把lease时间顺延),那么只要rs的宕机重启时间(称为D)小于L-T,就可以保证不会中断upslease

 

而最差情况是,rs刚刚授予ups lease后,ups就宕机;然后待ups lease差一点点要过期时rs宕机,所以在这种最差情况下ups最长不可服务时间是L+D

 

因此按如下方法进行推算:

设第i层系统的lease时间为L(i),最长不可服务时间为D(i)Lease renew间隔为T(i)

D(i) = L(i) + D(i-1)

D(i-1) <= L(i) – T(i) 按照最小lease算,则D(i-1) = L(i) – T(i)

推导:

L(i) = D(i-1) + T(i)

= L(i-1) + D(i-2) + T(i)

= L(i-1) + L(i-1) – T(i-1) + T(i)

= 2*L(i-1) – T(i-1) + T(i)

T(i-1)T(i) 近似相等,因此可以得出L(i) = 2*L(i-1),工程实现上包含必要的误差和通信代价后,通常使用L(i) = 2.5*L(i-1),即下一级lease是上一级lease时间的2.5

 

所以lease层级越多,下层系统lease的时间越长,宕机停服务的时间越长,比如如果rs依赖zookeeper选主,rslease10s,那么依赖rs选主的ups lease时间就要是25s,而ups的最长不可服务时间长达(35s+zookeeper不可以服务时间)

 

使用election的情况稍有不同,rs内置election进行选主,ups依赖rs进行选主,rs的最长不可用时间为2*Tcycle,为了保证D(i-1) <= L(i) – T(i)upslease时间L要大于2*Tcycle+T,由此可以推算出,最差情况下,ups的不可服务时间为4*Tcycle+T

 

所以我们的设计中要尽量避免多机lease的管理,尽量扁平化系统设计。

 

Loading