MIT 18.996 – Tópico da Teoria da Ciência da Computação: Problemas de Pesquisa na
Internet – Segundo Trimestre 2002
Aula 4 | 27de fevereiro de 2002
Palestrantes: T. Leighton, D. Shaw, R. Sudaran Redatores: K. Battochi e M. Monteleone
4.1. Introdução
Seria possível dizer simplesmente que o DNS é usado para encontrar algo na Internet. O
design tradicional (antigo) do DNS funciona essencialmente como um diretório de nomes e
números em que um usuário poderia digitar um nome e ter um número retornado (ou viceversa) de um arquivo de texto. Como se pode imaginar, esse sistema não era muito eficiente
e não funcionava muito bem na prática. Em vez de servir como um verdadeiro sistema de
nomes, ele era mais uma espécie de catálogo de placas.
O design atual do DNS não funciona exatamente como um catálogo de placas; em vez disso,
ele pode ser comparado a um diretório grande e distribuído. Há quatro termos importantes
que descrevem o layout básico do DNS:
1.
2.
3.
4.
Nome – inclui “.edu”, “.com”, “.org” etc.
Tipo – refere -se aos tipos de dados que estão sendo armazenados; os dados podem
ser de qualquer tipo, e não somente endereços.
Classe – com a exceção de algumas classes internas, classe simplesmente se refere
à Internet.
Dados – há vários tipos de dados. Exemplos: A (Endereço IP), CNAME (Alias), H-Info
(Informações de Host). É interessante observar que, por questões de segurança, não
há tanta divulgação a esse respeito como no passado, pois os usuários seriam
capazes de identificar informações sobre determinado computador e sua
localização.
4.2. Layout do DNS
Há 13 servidores raiz, cada qual com uma zona que define nomes de alto nível. Tome como
exemplo o diagrama a seguir, que ilustra a estrutura hierárquica do DNS:
RAIZ
4-1
Deve-se observar que o cache pesado é realizado em todas as etapas da árvore. Além disso,
as informações contidas em cada nó possuem um tempo de vida (TTL) associado a ele. Em
muitos casos, é de um dia mais ou menos, mas pode ser menos ou mais. Por questões
óbvias de eficiência, é útil para os servidores de nome economizar em largura de banda e,
essencialmente, em custo.
O proprietário de uma zona específica mantém um registro de todos as novas subzonas. Por
exemplo, veja o diagrama a seguir:
Math.mit.edu foi criado na rede do MIT; além disso, há três servidores de nome – x, y e z –
que pertencem ao departamento de matemática. O conceito de glue record descreve esse
tipo de delegação. Se uma zona é delegada a um servidor de nome cujo nome de host seja
descendente dessa zona específica, um glue record desse nome de host deve ser incluído
na delegação. Por exemplo, o Administrador do MIT mantém as informações sobre os
servidores de nome de matemática (isto é, as informações são mantidas como mit.edu em
oposição a math.mit.edu).
Vamos definir também alguns outros termos relevantes. Um registro PTR, ou registro de
ponteiro, também é conhecido como um registro inverso. Um registro PTR associa um
endereço IP a um nome canônico (o verdadeiro nome de um host). Os registros PTR devem
apontar para um nome que possa ser resolvido de volta para o endereço IP. O nome do
registro de ponteiro não é o próprio endereço IP, mas quatro octetos IP do endereço IP em
ordem inversa à seguida por IN-ADDR.ARPA. Por exemplo, 192.168.0.1 passa a ser
1.0.168.192.IN-ADDR.ARPA.
Antes de nos aprofundarmos no uso do DNS na prática, devemos analisar brevemente a
lame delegation (delegação imperfeita). Ocorre uma lame delegation quando um registro de
servidor de nome aponta para um host incorreto. Isso pode ocorrer quando uma zona é
delegada a um servidor que não foi corretamente configurado como de autoridade para a
zona. Da mesma forma, a lame delegation também pode ocorrer quando um servidor que
tem autoridade para a zona possui um registro de servidor de nome que aponta para outro
servidor que não tem autoridade para a zona. Isso faz com que os servidores não
respondam ou que não respondam de forma autoritária, o que resulta em tráfego na rede ou
em desnecessária carga de trabalho do servidor.
4.3 Usando o DNS na prática
Explicaremos como o DNS é usado na prática para baixar um site da Web. Também
detalharemos o processo de uma pesquisa de DNS quando ela ocorrer nesse contexto. É
útil saber que há duas formas de usar o DNS para baixar um site da Web: da maneira
tradicional e da maneira da Akamai. Descreveremos cada método em detalhes a seguir.
4-2
4.3.1 A Maneira Tradicional
Suponhamos que o usuário deseje visitar o web.mit.edu. Após inserir [1]http://web.mit.edu,
o navegador procurará resolver o endereço IP do site. O DNS tem seu papel aqui, visto que
mapeia o endereço web.mit.edu para o endereço IP 18.7.21.77. O DNS retorna o endereço IP
e o navegador entra em contato com o servidor nesse endereço. O servidor retorna, então, o
HTML (incluindo os links incorporados). Para cada objeto incorporado, o processo se
repete. Agora descreveremos o processo de pesquisa de DNS em mais detalhes.
Mencionamos anteriormente que o cache desempenha um papel importante nas pesquisas
de DNS. Dessa forma, quando o web.mit.edu é inserido no navegador, este consulta seu
próprio cache primeiro para ver se o nome em questão foi resolvido anteriormente. Se não
for encontrado no cache do navegador, o cache do sistema operacional será consultado. Se
não for encontrado, o navegador fará a conexão com seu servidor de nome local.
Novamente, o servidor de nome local retornará o endereço se ele tiver sido resolvido
anteriormente; caso contrário, ele consultará autoridades superiores. Na pior das hipóteses,
as consultas acabarão por alcançar um servidor DNS raiz. Depois que o endereço for
resolvido, o servidor DNS local entrará em contato com o servidor DNS do mit.edu para
obter a resolução para o web.mit.edu. Um endereço IP é recebido (e armazenado em cache)
e é passado de volta para o navegador dos usuários. Em seguida, a solicitação de HTML
tem início, conforme descrito no parágrafo anterior.
4.3.2 A Maneira da Akamai
É mais fácil baixar um site da Web que utilize tecnologia. O princípio básico de resolver um
endereço IP usando o DNS continua valendo, mas o endereço que é retornado da pesquisa é
de um servidor Akamai ótimo. O navegador entra em contato com o servidor Akamai para
solicitar HTML. O servidor Akamai é responsável por montar o site da Web e entregar o
conteúdo para o navegador dos usuários. Os servidores Akamai ótimos também seriam
responsáveis por entregar todos os objetos incorporados ao navegador. Agora
descreveremos o processo de pesquisa de DNS conforme aplicada à maneira da Akamai.
Como estamos modificando o procedimento de pesquisa de DNS para retornar o endereço
de um servidor Akamai ótimo, devemos desenvolver uma maneira de garantir que esse
servidor ótimo seja encontrado (em oposição à maneira tradicional pela qual o endereço IP
seria retornado para o site da Web solicitado). Um alias (nome alternativo) é então usado
para garantir que o endereço seja resolvido para o servidor ótimo apropriado. O processo
de pesquisa começa, então, com o servidor de nome local sendo direcionado para o
servidor DNS do site solicitado (seria o mit.edu do exemplo anterior; por questões de
consistência, partiremos do pressuposto que o site da Web do MIT utiliza a maneira da
Akamai para que possamos continuar a utilizá-lo como exemplo do caso da Akamai). Porém,
quando o servidor DNS do mit.edu é contatado, um alias chamado CNAME é fornecido ao
servidor de nome local. Esse é um nome de DNS intermediário (e não um endereço IP) que
depois será resolvido para o endereço IP do web.mit.edu. Por ora, o servidor de nome local
deverá resolver esse endereço de DNS. Vamos supor que o CNAME seja a123.b.akamai.net.
O servidor de nome local consultaria então o akami.net e receberia um endereço IP para um
servidor DNS Akamai de alto nível. Esse servidor resolveria o b.akamai.net. Agora, vamos
começar a perceber os benefícios da maneira da Akamai. O servidor DNS de alto nível agora
determina qual ende reço IP deve ser resolvido a partir do b.akamai.net, levando em
consideração questões geográficas. O endereço IP estabelecido é o endereço de um
servidor DNS da Akamai de nível baixo. O servidor DNS de nível baixo executa algoritmos
para otimizar o desempenho em tempo real, considerando fatores como congestionamento
da rede, cargas do servidor e condições da rede. Ele determina então o servidor da Web
ótimo para o usuário. No final, o servidor de nome local recebe o endereço IP de um
servidor Akamai ótimo que hospeda o conteúdo do site da Web solicitado. Como se pode
ver, a Akamai otimizou a maneira de entregar conteúdo pela Web por meio do
4-3
desenvolvimento de métodos engenhosos para downloads de sites da Web ótimos e
pesquisas de DNS.
4.4. Algoritmos BIND – Visão Geral
O objetivo geral dos algoritmos BIND é decidir qual o melhor servidor para respostas
rápidas e confiáveis (precisas). Começaremos com o algoritmo BIND 4. Vale a pena ilustrar
o algoritmo BIND 4 com um exemplo. Digamos que haja dois servidores de nome para
math.mit.edu: 1.2.3.4 e 1.2.3.5. Começamos consultando um, por exemplo, 1.2.3.4, e o
penalizamos toda vez que é consultado. A penalidade é proporcional ao tempo que ele leva
para fazer a consulta. Assim, 1,2,3.5 será consultado e penalizado da mesma maneira. O
processo continuará de forma que o servidor com a menor penalidade total seja o que é
consultado.
O algoritmo BIND 8 incorpora princípios semelhantes, mas introduz três fatores: a, ß e ?. O
fator a reflete o tempo de consulta. Ele é baseado 70% no tempo de consulta anterior e 30%
no tempo de consulta atual. Assim, a ajuda a determinar qual servidor dará a resposta mais
rápida. O fator ß trata da precisão. Ele penaliza os servidores que não respondem
corretamente, incluindo os servidores que são imperfeitos (lame). Por fim, o fator ? é
introduzido para garantir que todas as máquinas foram testadas. Ele diminui o tempo de
consulta de toda máquina que não tenha sido consultada. Dessa forma, ajuda a garantir que
servidores potencialmente rápidos e/ou precisos não serão rejeitados pelo algoritmo. Esses
três fatores devem permitir que o algoritmo BIND 8 tenha a expectativa de convergir no
servidor que responde rápida e precisamente. Agora trataremos dos algoritmos BIND e de
seu desempenho em mais detalhes.
4.5. Algoritmo BIND 4
O algoritmo BIND 4 tenta selecionar o servidor mais rápido, mas sem usar um servidor
exclusivamente, para que, se os padrões do tráfego mudarem, o servidor ótimo possa ser
encontrado. Ele procura fazer isso mantendo um total atualizado, o que inclui o tempo total
de todas as respostas até então. Para garantir que não será selecionado sempre o mesmo
servidor, o total também incluirá uma penalidade pelo fato de o servidor ter sido o
selecionado daquela vez.
Agora introduziremos uma notação para tornar as idéias mais precisas. Que N seja o
número de recursos que podemos consultar. Ri (t) será o total atualizado do recurso i antes
da etapa t e definiremos S i (t) como o tempo que o recurso i levaria para completar a
solicitação de t. Se definimos i*(t) como o recurso que nosso algoritmo escolherá para
consultar na etapa t, poderemos minimizar o desempenho médio
O algoritmo BIND 4 trabalha da seguinte maneira em cada etapa:
4-4
1.
2.
3.
i*(t) é selecionado para ser o i de forma que Ri(t) seja um mínimo (desfaz vínculos
arbitrariamente).
Ri*(t)(t + 1) ? Ri*(t)(t) + Si*(t)(t)
Todos os outros Ri permanecem inalterados.
Supondo que S i (t) sejam constantes em relação ao tempo, é fácil perceber que o melhor
desempenho possível é sempre selecionar o recurso com o menor S. Agora comprovamos
que BIND 4 é N-competitive.
Teorema 4.1. Supondo que Si seja constante, o algoritmo BIND 4 descrito acima é executado
com tempo médio
Prova: Digamos que ni (i) seja o número de vezes que o recurso i seja selecionado antes da
etapa t. Depois, como S i são constantes, Ri (t) = S i ni (t). Considere dois recursos, i e j. Após t
etapas, o recurso i será escolhido se Ri (t) for inferior a Rj (t), o que implica Si ni (t) < S j nj (t). Se
a desigualdade inversa for mantida, j será escolhido. Assim, a proporção do número de
vezes que i é escolhido em relação ao número de vezes que j é escolhido tenderá a ni (t)/nj (t)
= S j /S i , e o recurso i será escolhido um número de vezes inversamente proporcional a S i .
A probabilidade de um dado recurso ser escolhido é c/S i para alguns c. A probabilidade total
é 1, e ntão
e
. Para calcular T, observe que o recurso i será
selecionado com a probabilidade c/Si e levará S i tempo para ser executado. O tempo de
execução esperado é, portanto,
O fator de N no tempo médio de execução é preocupante, pois o algoritmo ideal selecionaria
o recurso mais rápido todas as vezes, independentemente de quantos recursos há. É
concebível que a soma no denominador possa resolver esse problema. Nós demonstramos
que não é o caso.
Teorema 4.2. Para todo ? maior que zero e todo N, há um conjunto de recursos de forma que
o tempo de execução esperado do algoritmo BIND 4 seja no mínimo N(1 – ?) vezes o
algoritmo ótimo.
Prova: Defina
e
fornecido pelo Teorema 4.1 é
para
. Depois, o desempenho médio
2
Da identidade (1 – ?) (1 + ?) = 1 – ? , deduzimos que (1 – ?) (1 + ?) = 1 e que, para ?, na faixa
(0, 1), 1/(1 + ?) = 1 – ?. Assim, T = N(1 – ?), apesar de que o algoritmo ótimo sempre
escolheria o recurso com o tempo de execução 1.
4-5
Não só é possível o tempo médio do BIND 4 aumentar quando o número de recursos
também aumentar, como é provável que ocorra na prática o exemplo utilizado na prova do
Teorema 4.2. Se houver um recurso próximo e vários na parte oposta, os tempos de
desempenho serão muito mais parecidos com os usados na prova.
Nesse ponto, consideraremos uma alteração mínima no algoritmo BIND 4. Em vez de definir
Ri*(t)(t + 1) = Ri*(t)(t) + S i*(t)(t) como no algoritmo original, o que ocorrerá se definirmos Ri*(t)(t +
1) ? Ri*(t)(t) + ƒ(S i*(t)(t)) para uma função ƒ diferente da identidade? Parece que poderemos
2
obter um algoritmo competitivo se usarmos, por exemplo, ƒ(x) = x ou certamente com ƒ(x) =
x
2 . Para resolver essas questões, precisamos comprovar primeiro o teorema a seguir.
Teorema 4.3. Com R definido como acima, o tempo médio de operação T do algoritmo BIND
4 modificado é
Prova: Esta prova é praticamente igual à prova do Teorema 4.1. A probabilidade de o
recurso ser selecionado agora é proporcional a 1/S i . A constante de proporcionalidade deve
ser 1/ ? i ƒ(S i ) para fazer as probabilidades chegarem a um. Como o recurso i leva S i tempo
para ser executado, o desempenho esperado do algoritmo é
Quanta diferença há entre os algoritmos BIND 4 novo e antigo? Primeiro comprovaremos
que toda função assintoticamente pior que a usada no BIND 4 original é muito ruim.
Teorema 4.4. Se
for uma função de tal forma que lim inf(ƒ(x)/x) = 0, o
desempenho do novo algoritmo poderá ser arbitrariamente ruim.
Prova: É claro que, se ƒ(x) for menor ou igual a zero para alguns x maiores que zero, o
desempenho do algoritmo poderá ser abaixo do ótimo um fator arbitrariamente maior.
Portanto, suponha para o restante da prova que ƒ(x) seja positivo para todos os x positivos.
Suponha que ƒ tenha um propriedade que lim inf(ƒ(x) < 8. Para mostrar que o desempenho
pode ser pior que qualquer número fixo A, considere N como 2. Use Si = 1. Há x
arbitrariamente grandes de forma que ƒ(x) < L, então considere S2 de forma que
com ƒ(S 2) < L. Então
Após algumas contas, obtemos
4-6
Reunindo os termos em A, obtemos
Daí, imediatamente se segue que
então, realmente é possível obter arbitrariamente um desempenho ruim, independentemente
do número de fontes.
Suponha que lim inf ƒ(x) = 8. Então, para um x suficientemente grande, ƒ(x) > 1. Para todo A,
considere novamente N = 2 e defina S 1 = 1. Como lim inf ƒ(x)/x = 0, se ocorrer de qualquer n0
e c ser maior que zero, haverá um x maior que n0 de tal forma que ƒ(x) < cx. Sendo c = 1/C,
isso é equivalente a dizer que, para todo C, há um x > n 0 de forma que x/ƒ(x) > C. Como lim
inf ƒ(x) = 8, há alguns n0 de tal forma que, para todo x maior que n0, ƒ(x) > 1. Então, tome S 2
como um número maior que n0 para o qual S2/ƒ(S2) > (A – 1)/ƒ(1) + A. Então, como ƒ(S2) > 1,
ocorre que
Mas, como
e
Então
Eliminando os denominadores, obtemos
termos em A,
Reunindo os
. Dividindo isso, obtemos
Dividindo o numerador e o denominador por ƒ(1)ƒ(S 2), obtemos
de forma que agora comprovamos nosso resultado em toda a sua generalidade.
4-7
De certa maneira, isso demonstra que o algoritmo realmente usado pelo BIND 4 não é tão
ruim, visto que pelo menos o desempenho de pior caso é limitado por N. Escolher uma
penalidade assintoticamente inferior a S i pode levar a um desempenho extremamente ruim.
O que ocorrerá se escolhermos uma penalidade maior? Conseguiremos obter o
desempenho médio para chegarmos até o resultado ótimo? A resposta é que podemos
chegar muito próximo do desempenho ótimo, mas nunca chegaremos até ele.
2
Para motivar essa discussão, tomemos como exemplo o que ocorre quando ƒ(x) = x . De
forma semelhante ao que fizemos para comprovar o Teorema 4.2, considere S i = 1 e S2 = S3 =
... =
. Então
Assim, o desempenho ainda depende de N, apesar do aumento da penalidade. Podemos
fazer uma análise semelhante para qualquer função com um inverso definido de forma
apropriada.
Teorema 4.5. Dada uma função bijetora
, há um conjunto de Si tal que o novo
algoritmo BIND 4 é executado no tempo médio
competir.
Prova: Considere Si = 1 e
com o qual não há como
para
. Então
Assim, apesar de obtermos um desempenho que cresce arbitrariamente de forma lenta com
N, não podemos obter um desempenho que seja independente de N.
Podemos estender esse resultado a funções que satisfaçam a condições menos rigorosas
que as do Teorema 4.5.
Teorema 4.6. Dada uma função
, há um conjunto de S i tal que o algoritmo é
executado em um tempo arbitrariamente ruim.
Prova: Se lim inf ƒ(x)/x = 0, isso é conseqüência imediata do Teorema 4.4. Então suponha
que lim inf ƒ(x)/x seja positivo. Há alguns c e alguns n0 de forma que, para todo x > n0, ƒ(x) >
cx. Defina
Considere
e
como o maior x de tal forma que
. Então,
e
e
,
4-8
para
.
. Assim, se
Mas
e
. Assim,
Mas, se
para
, então
aumentará até o infinito, e T crescerá até o
infinito com N, como deveria ser comprovado.
4.6 Algoritmo BIND 8
Conforme já mencionado, o algoritmo BIND 8 funciona de forma um tanto semelhante ao
BIND 4. No entanto, ele usa três fatores para determinar o desempenho. As equações que
orientam a atribuição de uma penalidade em t são as seguintes:
1.
Se o recurso i não for selecionado para ser consultado, Ri (t + 1) = ?Ri (t).
2.
Se o recurso i for selecionado para ser consultado e retornar uma resposta correta,
. Lembre-se de que a notação i*(t) indica o
recurso escolhido para ser consultado na etapa t.
3.
Se o recurso i for selecionado, mas não conseguir retornar uma resposta aceitável,
.
Como já mencionado, o código BIND 8 usa a = 0,3, ß = 1,2 e ? = 0,98. Esse algoritmo parece
intuitivamente selecionar o servidor mais rápido na maioria das vezes, mas demonstramos
que, na verdade, seu desempenho pode ser arbitrariamente ruim.
Teorema 4.7. Há um conjunto de dois recursos, de forma que o desempenho do algoritmo
BIND 8 é pior que o N-competitive.
Prova: Suponha que S i = 1 para todo t e S 2 = x para todo t, onde x é um número fixo. Então,
2
suponha que o recurso 2 seja selecionado. R2 será x, ?x, ? x etc. em cada etapa sucessiva,
n
visto que R1 será selecionado todas as vezes. Uma vez que ? x seja inferior a um, x será
n
selecionado novamente. Mas ? x = 1 é igual a
. Então, o tempo de execução
médio do algoritmo é aproximadamente
, que pode claramente aumentar
conforme nossa vontade, bastando para isso que se escolha um x apropriado.
4-9
Bibliografia
[1] Akamai Whitepaper: “Internet Bottlenecks: the Case for Edge Delivery Services”. 2000,
Cambridge, MA. URL disponível:
http://www.akamai.com/em/html/services/white_paper_library.html.
[2] Leighton, Tom; Shaw, David; Sudaran, Ravi. Apresentação: “DNS”. 2002, Cambridge, MA.
4-10
Download

4.1. Introdução Seria possível dizer simplesmente que o DNS