Serviços de diretório

Um diretório é um repositório de informações sobre objetos, organizados segundo um critério que facilite a sua consulta. Dois exemplos práticos de diretórios que usamos no nosso cotidiano são: uma lista telefônica e um dicionário. Ambos armazenam informações para consulta, ordenadas para facilitar a busca por uma entrada: a lista telefônica organiza as entradas em ordem alfabética pelo nome da pessoa e o dicionário organiza as entradas também em ordem alfabética, por verbete.

O modo como o diretório é usado pode ser descrito como white pages ou yellow pages. Se o nome do objeto é conhecido, é possível recuperar suas características. Isso é semelhante a procurar um nome de uma pessoa em uma lista telefônica residencial (white pages). Se o nome de um objeto em particular não é conhecido, é possível fazer uma busca no diretório em busca de objetos que cumpram certos requerimentos. Isso é semelhante a procurar um dentista em uma lista telefônica comercial (yellow pages).

Serviço de diretório é um serviço de armazenamento de informações otimizado para busca e leitura. Eles tendem a conter informações descritivas baseadas em atributos, para assim suportarem algum mecanismo de filtragem. Por exemplo, buscar em um serviço de diretório da cidade de São Paulo, mulheres entre 18 e 25 anos e que sejam solteiras. Além disso, eles têm que ser extensíveis, para servirem a uma gama maior de aplicações e propósitos. Um serviço de diretório pode armazenar os telefones de bares e casas noturnas de São Paulo. Se ele aceitar também endereços como atributos, o serviço pode ser estendido, acoplando-o a um guia de ruas.

Serviços de diretório e bancos de dados compartilham várias características importantes, como buscas rápidas e um esquema extensível. A diferença é que um serviço de diretório é projetado mais para leitura do que para escrita, enquanto que em um banco de dados assumimos que as operações de leitura e de escrita ocorrem mais ou menos com a mesma freqüência. Portanto, para os serviços de diretório não são essenciais certas características que são a bancos de dados, que permitem lidar com um grande volume de atualizações complexas. Dentre elas estão suporte a transações[1] (transactions) e travas de escrita (write locks).

A maioria dos bancos de dados suportam um método de acesso padrão e muito poderoso chamado SQL (Structured Query Language). Os serviços de diretório usam um protocolo de acesso simplificado. Já que eles não fornecem todas as funções que um banco de dados, eles podem ser otimizados para fornecer economicamente dados para leitura a um maior número de aplicações, em um ambiente distribuído. As atualizações dos diretórios são tipicamente simples.

Os serviços de diretórios são ajustados para dar resposta rápida a operações de busca em grande volume. Assim sendo, eles podem ter a habilidade de replicar informação com o objetivo de aumentar a disponibilidade e a confiabilidade, além de reduzir o tempo de resposta. Quando a informação do diretório é replicada, é aceitável que aconteçam inconsistências temporárias entre as réplicas, desde que elas se sincronizem eventualmente.

Alguns serviços de diretório são locais, fornecendo serviço a um contexto restrito como, por exemplo, o programa finger em uma máquina Linux/Unix. Outros serviços são globais, fornecendo serviço para um contexto mais abrangente, como por exemplo, o DNS (Domain Name System) da Internet. Os serviços globais são geralmente distribuídos, os dados que eles contêm estão espalhados em várias máquinas, cada uma cooperando para fornecer o serviço de diretório final. Tipicamente um serviço global define um espaço de nomes que dá a mesma visão dos dados, não importando onde você está. Por exemplo, uma pesquisa no DNS deve retornar o mesmo resultado, independente de em qual computador foi realizada a busca.



[1] Transações são operações all-or-nothing, ou seja, que só devem ser realizadas totalmente, não podendo ser concluídas parcialmente.