dfant
#1
inline int64_t CALCULATE_RENEW_LEASE_INTERVAL() { return std::min<int64_t>(0.5 * MAX_TST, 500_ms); }// 续约周期固定为消息延迟的一半,最大不超过500ms
inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() { return 2 * MAX_TST; }// 时间窗口的长度,为两个最大单程消息延迟, 默认为2s
inline int64_t CALCULATE_MAX_ELECT_COST_TIME() { return 10 * MAX_TST; }// 一次选举可能出现的最大耗时设置,默认为10s
inline int64_t CALCULATE_LEASE_INTERVAL() { return 4 * MAX_TST; }// 4个消息延迟,默认是4s
inline int64_t CALCULATE_TRIGGER_ELECT_WATER_MARK() { return std::min<int64_t>(MAX_TST, 1_s); }// 触发无主选举的Lease剩余水位线,1个最大消息延迟,最大不超过1s
CALCULATE_TIME_WINDOW_SPAN_TS 这个时间是不是用来判断选举rpc信息在2秒内没有到达就会被认为是过期消息了??
CALCULATE_LEASE_INTERVAL 这个时间是不是leader副本每次租约时间是4秒??
CALCULATE_TRIGGER_ELECT_WATER_MARK 这个是在3秒内没有收到其他follower副本的rpc信息,leader就卸任了吗?
2 个赞
你好,我理解为
inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() {
return 2 * MAX_TST;
}
其中,MAX_TST` 是任意两台机器间的单程网络延迟上限,默认值为 100ms。因此,CALCULATE_TIME_WINDOW_SPAN_TS的默认值为:2 * 100ms = 200ms,在选举过程中,如果某个副本的消息未能在时间窗口内到达,则可能被视为无效或过期消息。
inline int64_t CALCULATE_LEASE_INTERVAL() {
return 4 * MAX_TST;
}
同理,lease_time是4个消息延迟,默认是4s
1 个赞
dfant
#4
1 个赞
CALCULATE_TIME_WINDOW_SPAN_TS用于计算时间窗口的长度,所谓时间窗口是指,paxos中的acceptor角色需要一个窗口期来收集所有参与选举的proposer角色的拉票消息,并从中根据优先级选取最优副本成为leader,即下图中的浅蓝色窗口的长度:
CALCULATE_LEASE_INTERVAL用于计算副本的租约时长,是上图粉色+红色的的窗口时间。
CALCULATE_TRIGGER_ELECT_WATER_MARK用于计算提前开启下一次选举的时间点,一旦lease剩余时间小于这个值,就开启下一轮选举,当上轮租约到期时,下一轮的leader立马无缝上任,中间没有gap。否则当上一任租约到期后,再开启选举流程会导致多浪费一些选举时间。
2 个赞
dfant
#7
嗯嗯 ,这个我看到了,不过这个上面说的是 500ms leader续约一次。
我在生产问题中发现 rpc延迟时间200ms-800ms甚至1秒多都不会出现副本切主发生。在实际切主发生时间段rpc通信延迟在2秒多,所以想深究下 具体是延迟多久才会出现副本切主?
你看看 这个:https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207690
1 个赞
dfant
#14
那 4版本对外公布的 ,这几个时间配置 ,我和其他同学理解对不对啊。帮忙看看
inline int64_t CALCULATE_RENEW_LEASE_INTERVAL() { return std::min<int64_t>(0.5 * MAX_TST, 500_ms); }// 续约周期固定为消息延迟的一半,最大不超过500ms
inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() { return 2 * MAX_TST; }// 时间窗口的长度,为两个最大单程消息延迟, 默认为2s
inline int64_t CALCULATE_MAX_ELECT_COST_TIME() { return 10 * MAX_TST; }// 一次选举可能出现的最大耗时设置,默认为10s
inline int64_t CALCULATE_LEASE_INTERVAL() { return 4 * MAX_TST; }// 4个消息延迟,默认是4s
inline int64_t CALCULATE_TRIGGER_ELECT_WATER_MARK() { return std::min<int64_t>(MAX_TST, 1_s); }// 触发无主选举的Lease剩余水位线,1个最大消息延迟,最大不超过1s
CALCULATE_RENEW_LEASE_INTERVAL:leader副本每隔500ms续约一次。
CALCULATE_TIME_WINDOW_SPAN_TS:这个是选举rpc延迟时间阈值,超过这个值就是过期信息。
CALCULATE_TRIGGER_ELECT_WATER_MARK:租约还剩最后一秒,触发无主选举。
辞霜
#15
CALCULATE_TRIGGER_ELECT_WATER_MARK 租约小于该值,触发选举。
CALCULATE_TIME_WINDOW_SPAN_TS 用于计算时间窗口的长度,时间窗口是指计算选举拉票信息并选取最优副本成为leader的时间
CALCULATE_RENEW_LEASE_INTERVAL 续约时间
2 个赞