Operações de E/S Escaláveis

O algoritmo fundamental de toda aplicação para web pode ser definido da seguinte forma:

  1. O usuário da aplicação envia uma requisição HTTP ou uma mensagem Websocket para o lado servidor da aplicação.

  2. A requisição ou mensagem, ao chegar no lado servidor, precisa ser atendida mediante a execução de algum algoritmo.

  3. Uma thread é alocada para uma CPU e o algoritmo apropriado é executado.

  4. No protocolo HTTP, o resultado do algoritmo será uma resposta HTTP a ser enviada para o usuário.

  5. A thread que executou o algoritmo é liberada e fica disponível para ser realocada e atender uma nova requisição HTTP ou mensagem Websocket.

Frequentemente o número de usuários que está usando simultaneamente a aplicação é muito maior à quantidade de CPUs do servidor. Assim, para um servidor com N CPUs só pode haver N usuários atendidos simultaneamente.

Cabe ao sistema operacional a tarefa de garantir que todas as threads sejam executadas "ao mesmo tempo", fazendo um escalonamento (cada thread usa um pouquinho a CPU).

O problema de escalabilidade está relacionada a etapa 3 do algoritmo acima. Para entender o por quê é preciso definir os conceitos de operação de entrada/saída e de escalabilidade.

Operações de Entrada e Saída (E/S) são aquelas onde é necessário obter (entrada) ou enviar (saída) dados fora da memória principal do computador que executa o algoritmo.

Escalabilidade é uma propriedade da aplicação que assegura que o tempo de resposta permanece dentro de uma faixa aceitável mesmo quando há uma variação muito grande de algoritmos sendo executados ao mesmo tempo.

Operações de E/S tem o potencial de afetar a escalabilidade de uma aplicação pois sua execução é extremamente mais lenta que as demais e, principalmente, porque envovlem recursos computacionais que não são gerenciados diretamente pela aplicação.

No contexto das aplilcações para web, as duas operações de E/S que mais afetam a escalabilidade são o acesso a webservices e a bases de dados.

results matching ""

    No results matching ""