smartdns
smartdns copied to clipboard
[Feature Request] 多上游结果合并
需求应用场景
上下文: https://github.com/pymumu/smartdns/issues/975#issuecomment-1175053848
当前设计就是关闭测速后,仅会使用响应最快的DNS结果,并不会将所有结果合并。
目前看来,将所有结果合并没有太多意义。
当前我们将 smartdns 用于某广域网优化产品中;我们的广域网优化中的 TCP 栈会自动与上游 DNS 返回的所有结果 IP 同时并发进行握手,然后使用最先返回 ACK 的连接(其余连接发送 FIN),因此不需要由 smartdns 异步测速(并发 TCP 握手并使用最早握手成功的连接一定是延时最低的)。在当前技术栈下,我们希望 smartdns 能够从多个上游尽可能获得并返回尽可能多的 IP(供我们的 TCP 客户端进行并发握手)
建议的方案
- 当首次请求(缓存未命中),smartdns 向多个上游发起并发查询
- smartdns 使用最快返回的上游的结果、覆盖 TTL 为 10
- smartdns 异步收到后续剩余上游的结果,进行去重合并
- 10 秒过去后、smartdns 返回经过去重和合并后的所有 IP
你可以暂时修改验证:把下面的行删掉: https://github.com/pymumu/smartdns/blob/9390a49a72d2a2fbab19972f45553742ad271e2f/src/dns_server.c#L630-L634
另外开启缓存和过期缓存功能,ip数量可以通过max-reply-ip-num设置。
这个功能是否合入主干还要看具体的应用场景是否有一定通用性。
关闭测速的情况下,会做合并。