# Efeito Digg

Efeito Digg é o evento em que um determinado site ou blog tem uma de suas páginas publicadas em serviços de indexação de links como o Digg, o Slashdot ou outros do gênero, e esta determinada página então passa a receber milhões de acessos de uma só vez, tornando o site ou blog muito lento ou mesmo derrubando o serviço e tornando o site ou blog indisponível temporariamente.
Quando muitos usuários acessam um determinado servidor simultaneamente, o servidor tende a ficar sobrecarregado, e por este motivo, pode responder lentamente a cada uma das requisições, ou até mesmo entrar em colapso e parar de responder, saindo do ar.

## Como acontece
### Como o Digg Funciona?

O Digg é um serviço de Links Sociais, ou seja, é um serviço onde as pessoas contribuem com links para páginas que acham interessante. Quando uma quantidade razoável de pessoas indicam um único link para o Digg, este percebe que há um certo interesse das pessoas por aquele link, e então, publica-o em suas páginas.
Dependendo do interesse das pessoas, se a quantidade de indicações continuar a subir, então o Digg coloca o link em sua primeira página. Como o Digg é um portal muito acessado e visto por milhões de pessoas e assinantes de RSS todos os dias, existe uma grande chance de um link apresentado pelo serviço seja acessado pelos visitantes.

### Como o Digg pode derrubar um site ou blog?

Dado o volume potencial de acessos que o Digg pode gerar a um único WebSite ou Blog (milhares de visitantes em potencial por hora), este pode ter problemas para responder a todos estes visitantes e entrar em colapso, ficar lento ou mesmo indisponível.
Toda página de Internet funciona hospedada em um servidor conectado a internet. O servidor é responsável por receber as requisições de acesso dos usuários, processa-las e devolver como resposta as páginas, que serão interpretadas pelo Browser dos usuários. Esta troca acontece a cada acesso a um determinado site, e por isso, quanto maior a quantidade de acessos, mais o servidor tem de trabalhar para atender a todos os pedidos.
Se esta quantidade de acessos for maior do que o servidor consegue atender, então, ele tende a atender mais lentamente cada uma das requisições, para que todos sejam atendidos. Porém, em alguns casos, a quantidade de requisições é tão grande que o servidor leva muitos minutos para processar cada uma.
Para evitar que o servidor trabalhe sem-fim, ou seja, receba tantas requisições que chegue ao ponto de não conseguir atender nenhuma, existe um gatilho que determina que nenhum processamento pode levar mais do que N segundos (este tempo varia dependendo da configuração de cada servidor), então, sempre que este tempo é alcançado, o próprio servidor interrompe o processamento e devolve uma resposta de indisponibilidade (Timeout).

## Como evitar que o site saia do ar

Sabendo que o site sai do ar pois o servidor não consegue atender as requisições, fica simples determinar a solução:

### Otimizar a página para que processe mais rapidamente

Para fazer com que as requisições sejam processadas mais rapidamente, você deve diminuir a quantidade de processamento que cada requisição executa. Isso é possível otimizando o código que é executado no servidor, através de técnica de melhoria da lógica, uso de componentes mais leves, uso de bancos de dados mais rápidos ou redução no uso do banco de dados. Técnicas de cacheamento e etc.

### Fazer mais servidores trabalharem com clusterização

É uma forma de atender mais usuários sem modificar muito a programação do sistema do site ou blog. Utilizando vários servidores, ligados entre si em rede, e distribuindo a carga de processamento entre eles. A técnica é chamada de Sistema de processamento distribuído, e é simples de ser implementada, apesar de muitas vezes ser dispendiosa (por necessitar de mais hardware). É possível substituir um único servidor por muitos (o número é praticamente ilimitado), e então, cada servidor fica responsável por atender uma quantidade menor de requisições. Em um sistema de cluster, também é necessário eleger um dos servidores para ficar responsável por distribuir a carga de processamento entre todos os outros servidores do cluster.

### Aumentar a capacidade de processamento do servidor

Se cada processo está levando muito tempo para ser executado, uma solução pode ser aumentar a capacidade de processamento do servidor, tornando o tempo de processamento mais rápido e por conseqüência, atendendo a mais usuários em um mesmo espaço de tempo. Para aumentar a capacidade de um servidor geralmente são adicionados mais processadores (ou substituídos os processadores atuais por outros mais rápidos), adicionada mais memória, substuição dos sistemas de disco por outros mais rápidos.

### Criar um sistema de cache

É um sistema muito utilizado, que elimina quase que completamente o processamento que um servidor deve fazer ao entregar uma página ao usuário. Se as páginas que serão entregues aos usuários serão exatamente iguais sempre, então não há motivo para reprocessa-la a cada requisição. Basta processa-la uma única vez e entregar este resultado a todas as requisições. Alguns sistemas de cache são ligados diretamente ao servidor web (Apache, IIS, etc). Estes são geralmente mais rápidos pois não exigem que o programa do site seja executado. Outros, são definidos junto a programação do site, e exigem uma pequena carga de processamento do servidor (cache em .NET, PHP, etc), mas que ainda assim é mais rápido do que a execução integral do programa. Um sistema muito comum de cache em Blogs é o WP-Cache, para o sistema Wordpress. O funcionamento dele consiste em processar integralmente uma página e salvar um arquivo em HTML puro no servidor. Na próxima requisição de um usuário, o sistema verifica se já existe o arquivo pré-processado, e caso exista, entrega o tal arquivo em vez de processar a requisição totalmente. Com isso, economiza-se processamento no Banco de dados. O plug-in WP-SuperCache, para a mesma plataforma, foi criado a partir do WP-Cache, porém, com a diferença básica de quem passa a tarefa de verificar se o arquivo existe ao servidor web (Apache), senso assim, o servidor web verifica se o arquivo existe e o entrega sem nem mesmo carregar em memória o motor do PHP, que é a base de execução do Wordpress.