Eu desenvolvi uma WebAPI REST usando o módulo Serviços. Funciona bem. Eu tenho um cliente dessa API com uso projetado, exigindo que eu dimensione horizontalmente minha instância do Drupal. Observe que, devido à natureza da minha API, exigindo recursos significativos de CPU e GPU, não posso usar servidores em nuvem. Além disso, devido à natureza da minha API, as instâncias do Drupal precisam ser executadas no sistema operacional Windows. (Meu aplicativo requer software disponível apenas no Win64.) Agora, tenho um servidor bastante robusto em uma co-localização e, para esse cliente ambicioso, planejo dimensionar horizontalmente meu hardware da seguinte maneira:
- Um servidor CentOS executando o HaProxy como balanceador de carga de front-end,
- Dois para iniciar, com mais adicionados, conforme necessário, servidores Windows Server 2008 R2 que hospedam o Drupal,
- Um servidor de banco de dados do CentOS que fornece um único banco de dados para as várias instâncias do Drupal,
- Um servidor de banco de dados do CentOS em execução no modo de replicação, caso o servidor de banco de dados 1 morra.
Minhas perguntas têm a ver com o funcionamento do balanceador de carga HaProxy. Estou assumindo que os sessionIds criados pelas instâncias do Drupal serão únicos um do outro. O balanceador de carga examina o sessionId e roteia todas as solicitações para o mesmo servidor que produziu esse sessionId? Como uma comunicação RAP WebAPI funcionaria se o balanceamento de carga fizesse com que cada solicitação de API fosse para um servidor diferente? Todos e quaisquer dados referenciados pela WebAPI precisam ser armazenados no banco de dados porque não posso garantir que várias solicitações de API para o mesmo recurso sejam roteadas para a mesma instância do Drupal?