Operações de E/S Escaláveis: Acesso a Bases de Dados
Aplicações para web que precisam acessar bases de dados também apresentam, potencialmente, problemas de escalabilidade. Mesmo se o banco de dados está localizado no mesmo computador que hospeda o servidor web, o tempo necessário para executar uma operação de leitura ou escrita nos arquivos do banco de dados é muito grande se comparado com o tempo de execução de instruções em memória.
O acesso a um banco de dados é feito por meio de um protocolo que é específico para cada banco. Em geral, somente o "fabricante" conhece o protocolo. Ele, naturalmente, tem todo o interesse do mundo que os desenvolvedores de aplicação utilizem o seu banco.
É por isso que os frabricantes criam drivers de acesso ao banco, um driver para cada linguagem de programação.
O grande problema, em termos de escalabilidade, é que por muito tempo os fabricantes só disponibilizavam drivers cujas operações de leitura e escrita eram bloqueantes. Pouco a pouco drivers assíncronos começam a surgir.
Se para um determinado banco de dados não há driver assíncrono o melhor que se pode fazer é criar um pool de threads dedicado exclusivamente para executar algoritmos que acessam o banco. Assim, a aplicação conterá dois pools de threads: um para atender as requisições HTTP e mensagens Websocket e outro para atenderos pedidos de leitura/gravação no banco de dados.