Cet article explique en détails comment éviter les accès concurrents sur des ressources partagées dans un système distribué (plusieurs serveurs).
C'est une problématique assez rare mais épineuse. Ça requiert une grande rigueur pour aboutir à une solution fiable et totalement automatisée.
Gestion des accès concurrents en Node.js à l'aide d'un mutex, entre autres.
Et oui, le fait que Node tourne sur un seul thread n'empêche pas les race conditions.
La gestion de l'accès concurrent à une ressource unique par les différents noeuds d'un cluster est toujours un problème épineux.
Concrètement la seule solution possible consiste souvent à introduire un système transverse (Hazelcast dans cet exemple, mais j'imagine qu'on peut faire de même avec un Redis par exemple) qui coordonne les accès et bloque un noeud si la ressource est en cours d'utilisation.