J'ai développé une WebAPI REST à l'aide du module Services. Ça fonctionne bien. J'ai un client de cette API avec une utilisation projetée nécessitant une mise à l'échelle horizontale de mon instance Drupal. Notez qu'en raison de la nature de mon API, nécessitant des ressources CPU et GPU importantes, je ne peux pas utiliser de serveurs cloud. De plus, en raison de la nature de mon API, les instances Drupal doivent s'exécuter sur le système d'exploitation Windows. (Mon application nécessite un logiciel uniquement disponible sur Win64.) J'ai maintenant un serveur assez costaud dans une colocalisation, et pour ce client ambitieux, je prévois de faire évoluer horizontalement mon matériel de la manière suivante:
- Un serveur CentOS exécutant HaProxy comme équilibreur de charge frontal,
- Deux pour commencer, avec plus si nécessaire, des serveurs Windows Server 2008 R2 hébergeant Drupal,
- Un serveur de base de données CentOS fournissant une base de données unique pour les multiples instances Drupal,
- Un serveur de base de données CentOS fonctionnant en mode de réplication en cas de décès du serveur DB 1.
Mes questions concernent le fonctionnement de l'équilibreur de charge HaProxy. Je suppose que les sessionIds créés par les instances Drupal seront uniques les uns des autres. L'équilibreur de charge examine-t-il l'ID de session et achemine-t-il toutes les demandes vers le même serveur qui a produit cet ID de session? Comment une communication REST WebAPI fonctionnerait-elle si l'équilibrage de charge entraînait le transfert de chaque demande d'API vers un serveur différent? Est-ce que toutes les données référencées par WebAPI doivent être stockées dans la base de données parce que je ne peux pas garantir que plusieurs demandes d'API pour la même ressource seront routées vers la même instance Drupal?