
As latências de rede têm um impacto significativo no desempenho de aplicativos ou serviços que interagem com a rede. Quanto menos latência, maior o desempenho. Isso vale para qualquer serviço de rede, iniciando em um site comum e terminando em um banco de dados ou armazenamento em rede.
Um bom exemplo é o sistema de nomes de domínio (DNS). O DNS é inerentemente um sistema distribuído, cujos nós raiz estão espalhados por todo o planeta. Para acessar qualquer site, primeiro é necessário obter o endereço IP.
Não descreverei todo o processo de passagem recursiva pela "árvore" das zonas de domínio, mas me limitarei ao fato de que para converter um domínio em um endereço IP, precisamos de um resolvedor de DNS que faça todo esse trabalho por nós.
Então, onde obter o endereço DNS do resolvedor?
- O ISP fornece o endereço do seu resolvedor DNS.
- Encontre o endereço de um resolvedor público na Internet.
- Crie o seu próprio ou use o roteador embutido em sua casa.
Qualquer uma dessas opções permitirá que você desfrute de uma navegação despreocupada na World Wide Web, mas se precisar converter um grande número de domínios em IP, a escolha do resolvedor deve ser abordada com mais cuidado.
Como já escrevi, além do resolvedor do provedor de Internet, existem muitos endereços públicos, por exemplo, você pode encontrar esta lista aqui. Alguns deles podem ser muito mais preferíveis porque têm melhor conectividade de rede do que o resolvedor padrão.
Quando a lista é pequena, você pode facilmente fazer ping com as mãos e comparar o tempo de atraso, mas mesmo se você seguir a lista mencionada acima, esta lição já se torna desagradável.
Portanto, para facilitar essa tarefa, eu, cheio de síndrome do impostor, desenhei uma prova de conceito da minha ideia no Go chamada
aproximar-se .
Como exemplo, não vou verificar a lista inteira de resolvedores, mas me restringir aos mais populares.
$ get-closer ping -f dnsresolver.txt -b=0 --count=10 Closest hosts: 1.0.0.1 [3.4582ms] 8.8.8.8 [6.7545ms] 1.1.1.1 [12.6773ms] 8.8.4.4 [16.6361ms] 9.9.9.9 [40.0525ms]
Ao mesmo tempo, quando escolhi um resolvedor para mim, me limitei a verificar os endereços principais (1.1.1.1, 8.8.8.8, 9.9.9.9), porque eles são muito bonitos e o que esperar de reservar endereços feios.
Mas como havia uma maneira automatizada de comparar atrasos, por que não expandir a lista ...
Como o teste mostrou, o endereço do Cloudflare de "backup" é mais adequado para mim, pois está preso no spb-ix, que é muito mais próximo de mim do que no msk-ix, no qual o lindo 1.1.1.1 está preso
A diferença, como você vê, é significativa, porque mesmo o raio de luz mais rápido não consegue correr de São Petersburgo a Moscou em menos de 10 ms.
Além do ping simples, o PoC também pode comparar atrasos usando outros protocolos como http e tcp, bem como o tempo necessário para converter domínios em IP por meio de um resolvedor específico.
Os planos têm a tarefa de comparar o número de nós entre hosts usando o traceroute, para que seja mais fácil encontrar hosts para os quais há um caminho mais curto.
O código é bruto, não há muitas verificações, mas funciona razoavelmente bem em dados limpos. Ficaria grato por qualquer feedback, estrelas no
github e, se alguém gostasse da ideia do projeto, bem-vindo aos colaboradores.