Open pmkol opened 1 year ago
首先赞一下mosdns的性能,在单台服务器每日几千万的查询量的压力下,性能依旧稳定没任何报错,且资源占用极少。
随着日查询量直奔亿级,一些新的诉求诞生了:
由于查询量变高,参考了作者之前提过的unbound缓存方案,将unbound前置,但这里出现了一个新的问题,虽然unbound已经支持doh功能,但却并不支持http3,所以需要前置nginx,但unbound并没有通过X-Forwarded-For对客户端真实IP进行获取,这将导致如果前置nginx或CDN的情况下ECS功能失效,而mosdns却很好的解决了这点。
目前套娃结构为: mosdns(分流) -> unbound(缓存) -> mosdns(转发) -> nginx(出口)
mosdns(转发) 这里的替代品,有尝试多种方案
a、使用caddy/haproxy直连unbound,ECS失效
b、使用 doh-server中间件,不支持ECS传输,ECS失效
c、使用 dns-over-https中间件,支持ECS,但性能太差,我的503报错占比达到了约2%,而mosdns一次503都没出现过
综上所属,我目前只能单独再开个mosdns进程做中间件转发,因为mosdns性能真的太强了
对于mosdns现有的代码而言,理论上只要提取已有功能,应该就可以单独搞个中间件出来,对作者而言应该比我们任何人都容易做到。主要需要几个功能:
1、将udp/tcp转为dot/doh,doh支持http无ssl模式,也就是把现有的部分提取出来
2、增加unix domain socket,让nginx可以更好的无缝连接这个中间件
3、限制单IP并发数,这个插件里已经有了
4、简化版的日志,格式可以类似unbound的,包含日期、端口、客户端IP、请求域名、请求类型等,例如: Apr 04 04:30:11 [port 5353] info: 1.2.3.4 time.apple.com. AAAA IN
5、ECS功能支持,向后端传输ECS
上述功能除了第二条外,应该都是已有的插件,不知道作者是否能支持一下,至少目前看来这个中间件对高访问量的用户非常有意义,感谢作者的贡献
unix domain socket 可以实现,其他暂不考虑。
如果配置中不写某个插件,那么这个插件就不会运行。如果觉得可执行文件过大,可以选择不编译不用的插件。没必要再另实现一个中间件。
简化版的日志
这个每个人都有不一样的需求。支持自定义太难了。建议编写自己的插件。
希望添加的功能
首先赞一下mosdns的性能,在单台服务器每日几千万的查询量的压力下,性能依旧稳定没任何报错,且资源占用极少。
随着日查询量直奔亿级,一些新的诉求诞生了:
由于查询量变高,参考了作者之前提过的unbound缓存方案,将unbound前置,但这里出现了一个新的问题,虽然unbound已经支持doh功能,但却并不支持http3,所以需要前置nginx,但unbound并没有通过X-Forwarded-For对客户端真实IP进行获取,这将导致如果前置nginx或CDN的情况下ECS功能失效,而mosdns却很好的解决了这点。
目前套娃结构为: mosdns(分流) -> unbound(缓存) -> mosdns(转发) -> nginx(出口)
mosdns(转发) 这里的替代品,有尝试多种方案
a、使用caddy/haproxy直连unbound,ECS失效
b、使用 doh-server中间件,不支持ECS传输,ECS失效
c、使用 dns-over-https中间件,支持ECS,但性能太差,我的503报错占比达到了约2%,而mosdns一次503都没出现过
综上所属,我目前只能单独再开个mosdns进程做中间件转发,因为mosdns性能真的太强了
对于mosdns现有的代码而言,理论上只要提取已有功能,应该就可以单独搞个中间件出来,对作者而言应该比我们任何人都容易做到。主要需要几个功能:
1、将udp/tcp转为dot/doh,doh支持http无ssl模式,也就是把现有的部分提取出来
2、增加unix domain socket,让nginx可以更好的无缝连接这个中间件
3、限制单IP并发数,这个插件里已经有了
4、简化版的日志,格式可以类似unbound的,包含日期、端口、客户端IP、请求域名、请求类型等,例如: Apr 04 04:30:11 [port 5353] info: 1.2.3.4 time.apple.com. AAAA IN
5、ECS功能支持,向后端传输ECS
上述功能除了第二条外,应该都是已有的插件,不知道作者是否能支持一下,至少目前看来这个中间件对高访问量的用户非常有意义,感谢作者的贡献