Ok, parece que agora posso dar uma resposta aproximada à minha própria pergunta. Anurag Bhatia diz que existem dois métodos como um CDN funciona:
DNS
Have DNS to do the magic i.e when users from network ISP A lookup for cdn.website.com, they should get a unicast IP address of Cache A in return, similarly for users coming from ISP B network, Cache B’s unicast IP should return.
Digamos que temos um servidor com o IP 1.2.3.4
localizado nos EUA e um servidor de cache com o IP 2.3.4.5
localizado na Alemanha. Agora, um visitante tenta resolver o domínio example.org
. Se ele não mudou suas configurações de rede, ele usa o servidor DNS de seu provedor de serviços de Internet (ISP). E este ISP pede agora dns1.example.com
(o servidor de nomes do domínio) para o IP. Agora depende da localização do ISP. Se estiver localizado na Alemanha, o dns1.example.com
retornará 2.3.4.5
e, se estiver localizado nos EUA, ele retornará 1.2.3.4
.
Mas pode haver uma desvantagem com esse método: Toda vez que um usuário altera suas configurações de rede e usa um EDNS0 (veja IETF draft) provedor de DNS incompatível (por exemplo, um servidor DNS central da empresa) o dns1.example.com
irá responder novamente com o IP mais próximo desses locais DNS, mas desta vez o visitante é provavelmente em um local diferente, causando uma latência maior.
Os provedores de DNS estão transmitindo informações sobre o usuário para o servidor DNS autoritativo. Assim, o servidor DNS autoritativo pode responder com o IP ao lado do local do usuário:
Today, if you’re using OpenDNS or Google Public DNS and visiting a website or using a service provided by one of the participating networks or CDNs in the Global Internet Speedup then a truncated version of your IP address will be added into the DNS request. The Internet service or CDN will use this truncated IP address to make a more informed decision in how it responds so that you can be connected to the most optimal server.
...
; EDNS: version: 0, flags:; udp: 512 ; CLIENT-SUBNET: 130.89.89.0/24/21
Anycast
Have routing to route to nearest cache node based on “anycast routing” concept. Here Cache A, Cache B and Cache C will use same identical IP address and routing will take care of reaching the closest one.
Eu realmente não entendo o Anycast por causa do BGP, etc., mas eu acho que a explicação adicional do Anurag Bhatia dá uma idéia de como isso funciona:
- Optimization is based on BGP routing and announcement with little role of DNS.
- This setup is very hard to build up and scale since for anycast to work perfectly at global level, one needs lot’s and lot’s of peering and consistent transit providers at each location. If any of peers leaks a route to upstream or other peers, there can be lot of unexpected traffic on a given cluster due to break of anycast.
- This setup has no dependency on DNS recursor and hence Google DNS or OpenDNS works just fine.
- This saves a significant amount of IP addresses since same pools are used at multiple locations.
Anycast também tem uma desvantagem: o roteamento é flexível. Enquanto no início de uma sessão TCP o nó de destino pode estar localizado na rede A, ele pode mudar para a rede B. Portanto, Anycast será usado na prática apenas para UDP. O UDP é um protocolo sem sessão.
A maioria dos CDNs está usando DNS para tráfego HTTP / HTTPS e Anycast para solicitações DNS.