分布式服务超时问题

最近发现有一次启动mongos需要特别久,查明原因后发现是超时时间过长导致。

因为后端三台configdb中的一台死机,mongos启动时会去分别连接这几台configdb,在connect这台机器的时候,由于机器无响应,导致超时后才能返回,这样启动时间超过了一分钟。而且在查询mongos的时候,有些命令(show dbs)也会阻塞很久,因为要同步从configdb取结果。

解决办法可以将操作系统的/proc/sys/net/ipv4/tcp_syn_retries改为0,这样当连接tcp连接时,发送的sync无响应,不会再重试,这样超时时间就是3s。或者修改mongos源码,将超时时间改短。

在分布式服务系统中,后端机器经常会有多台,原则上一台机器死机,是不影响服务的。但由于有时候将超时时间设置过长,在同步访问后端的机器中就会出现超时问题,这样即使一台机器挂掉,对服务会对有影响。

如果网络条件比较好,实际上这些超时时间是可以设置很短的,例如50毫秒。当机器出问题后,对整体服务影响不大。

你可能感兴趣的:(分布式服务超时问题)