使用最近的mongodb如何计算网络延迟?

时间:2018-01-13 16:04:43

标签: mongodb

关于mongodb doc,使用最近模式进行读取, 驱动程序从网络延迟落在可接受的延迟窗口内的成员读取。然而,该文档并未说明具体的“网络延迟”是什么。

有谁知道它是如何评估的?使用ping往返时间或平均查询时间或通过某些特定查询?

1 个答案:

答案 0 :(得分:0)

  

有谁知道它是如何评估的?使用ping往返时间或平均查询时间或通过某些特定查询?

以下内容适用于MongoDB v3.2,v3.4和当前版本v3.6。基于MongoDB Specifications: Server Selection

对于每个可用的服务器,客户端(即驱动程序)必须跟踪服务器监视isMaster命令的平均往返时间(RTT)。当服务器没有平均RTT时,必须将平均RTT设置为等于第一个RTT测量值(即服务器可用后的第一个isMaster命令)。

在第一次测量之后,必须使用指数加权移动平均公式计算平均RTT,加权因子(α)为0.2。如果先前的平均值表示为(old_rtt),则使用以下公式从新的RTT度量(new_rtt)计算新的平均值(x):

alpha = 0.2
new_rtt = alpha * x + (1 - alpha) * old_rtt

在最近的9次观察中,选择加权因子0.2来计算平均RTT重量的85%。

另见Blog: Server Selection in Next Generation MongoDB Drivers

您可能也对selecting servers within the latency window

感兴趣

在几个合适的服务器之间进行选择时,延迟窗口是从最短RTT到最短RTT加上本地阈值的可接受RTT的范围。例如。如果最短RTT为15ms且本地阈值为200ms,则延迟窗口的范围为15ms - 215ms

例如,MongoDB Python driver (PyMongo)默认情况下,localThresholdMS的值为15ms,这意味着只有ping时间在15ms-30ms内的成员才会用于查询。