Golang 中 DNS 查询时 pure Go resolver 和 cgo resolver 耗时相差很大的原因 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
rayhy
V2EX    Go 编程语言

Golang 中 DNS 查询时 pure Go resolver 和 cgo resolver 耗时相差很大的原因

  •  
  •   rayhy
    budui 2018-12-06 19:22:30 +08:00 3457 次点击
    这是一个创建于 2519 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我昨天在这里提了一个问题Golang 中 http.Get 的耗时比 curl 耗时大很多是什么原因?, V 友@zeyexe已经帮我解答了问题(太强了!),他说应该是 Golang 的 net 库中的不同resolver导致的差异。不同耗时可能是 Windows 默认走系统调用,可能有 cache 加速。

    今天想了下,即使是 cache 也不可能带来 pure Go resolver 和 cgo resolver 20s 左右的差异,就又花时间仔细探索了一下。

    探索过程记录在我的博客里了,限于篇幅,在这儿直接说我最后发现的原因:

    Go 版本 DNS 查询(pure Go resolver)在 Go 1.11 中出现了一个 bug(之前的版本没有这个 bug):不能正确处理/etc/resolv.conf中有 nameserver 不工作时的情形,不能“ fail fast ”,导致 timeout。这个 bug 经过 Go 开发人员在#133675#138175的讨论,已经在这个commit中修复,更新到 Go 1.11.1 就没有这个问题了。

    至于更细节的这个 bug 是怎么出现的,又是怎么修好的。我就不再探索了,毕竟,我只是一个刚看到《 The Go Programming Language 》第一章的小白:sweat_smile:。

    6 条回复    2018-12-27 18:36:47 +08:00
    rayhy
        1
    rayhy  
    OP
       2018-12-06 19:24:28 +08:00
    @icexin , 因为话有点多,我就新开了一个帖子,没有在原贴中回复。再次感谢大佬的远程 debug,
    azzwacb9001
        2
    azzwacb9001  
       2018-12-08 22:27:36 +08:00
    嚯,厉害呀,摸到了官方 BUG
    rayhy
        3
    rayhy  
    OP
       2018-12-08 22:35:24 +08:00
    @azzwacb9001,哈,摸到最后是有点震惊。说起来这帖子几乎没人评论。。沉了的第一天伤心了一会儿 23333
    Mitt
        4
    Mitt  
       2018-12-27 14:20:15 +08:00
    @azzwacb9001 这个其实也不是 BUG,是“ Feature ”,Windows 下的 DNS 查询确实有些复杂,curl、ping、nslookup 等工具用的都不是同一套 ns 机制, 这个问题在 windows 下多网卡的时候尤其明显,三个命令由于系统的“智能” DNS 导致查询使用的是不同网卡的 DNS 和流量出口
    rayhy
        5
    rayhy  
    OP
       2018-12-27 14:54:27 +08:00 via Android
    @a href="/member/Mitt">Mitt,^_^;你再细看看,问题和 Windows 没关系的。刚开始的猜测涉及到 Windows,但最终发现和 Windows 的机制没关系。(事实上这个问题干脆不能在 Windows 下复现)
    不过谢谢你的解释了~
    Mitt
        6
    Mitt  
       2018-12-27 18:36:47 +08:00 via iPhone
    @rayhy 可能是有点瞎,看到上面说 windows 以为是在 windows 开发,不过这个 smartdns 确实是存在于 windows 且会发生和这个问题类似的情况
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5225 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 08:19 PVG 16:19 LAX 01:19 JFK 04:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86