我需要检查 200kk(200,000,000)个域的可用性和 CMS 信息。
我正在使用 php 7.1 并模拟多线程检查。
硬件和配置
- 服务器硬件:多核 CPU、64GB RAM、SSD 磁盘、500 Mbits 专用带宽(OVH 服务器)。
- 在 resolv.conf 中有 Google DNS: 8.8.8.8 / 8.8.4.4
- ulimit -n 设置为 655350
- nload 测量带宽负载
测试
我使用不同数量的并行线程检查了数据库中的前 1,000,000 个域。这样做之后,我面临的问题是,随着线程数量的增加,在 30 秒超时内未响应的域数量大幅增加。以下是结果。
1. 1000 个线程
测试:1,000,000 个域,1000 个并行线程,85 Mbits 平均带宽负载,1 小时检查时间。结果:65% 已成功解决其中 35% 未能通过超时解决。
2. 300 个线程
测试:1,000,000 个域,300 个并行线程,70 Mbits 平均带宽负载,2 小时检查时间。结果:85% 已成功解决其中 15% 未能通过超时解决。
概括
我们可以看到,线程数增加了 3 倍,带宽并没有增加 3 倍。我们得到的是未解析/因超时而访问的域数量大幅增加。因此,检查速度提高了 2 倍。
问题
检查的瓶颈在哪里?我如何才能充分利用 500 Mbits 带宽?我应该使用自己的 DNS 服务器吗?如果是,正确的配置是什么?任何想法或帮助都非常感谢。
更新 1
Google DNS 可能正在限制您的速率。使用您自己的递归 DNS 解析器(或其中几个)应该是第一步。
我尝试使用默认配置绑定(DNS 服务器),没有进行调整。我得到了巨大的绑定负载,结果几乎相同。
有没有关于如何调整 bind 以处理每天 20 万到 50 万个请求的想法?我们可以将另一台服务器用作 DNS 服务器。也许我们可以使用备用 DNS 服务器(不是 bind)?