Synchronisation de Discourse pour plusieurs instances

J’ai un serveur maître et je vais avoir plus de 100 à 200 instances esclaves. Les instances esclaves peuvent être en ligne ou hors ligne, mais seront utilisées par des utilisateurs. Cependant, chaque fois qu’une instance hors ligne revient en ligne, elle doit pouvoir se synchroniser avec le serveur maître sans créer de conflits et mettre à jour toutes les données les plus récentes. Je ne souhaite apporter aucune modification au code, car Discourse se met à jour très fréquemment et je ne veux pas casser une instance à cause de changements de code.

Je pense à ajuster PostgreSQL dans une certaine mesure. Les autres fichiers de données peuvent être synchronisés à l’aide de syncthing. Cependant, la mise à jour des données PostgreSQL m’inquiète car, si je synchronise directement les données du maître, le travail effectué par l’utilisateur hors ligne sera effacé après la synchronisation.

Je pense à essayer de modifier la séquence d’auto-incrémentation de chaque table pour utiliser des UUID dans la base de données.

Existe-t-il une solution simple et possible pour cela ?

Discourse n’est pas conçu pour une application de ce type. Il est extrêmement improbable que vous puissiez mettre en place une synchronisation bidirectionnelle PostgreSQL sans casser Discourse.

Changer cela nécessiterait des modifications importantes dans le code de Discourse.

Si vous rendez les esclaves en lecture seule et que vous synchronisez PostgreSQL dans un seul sens, cela pourrait être possible… mais ce sera difficile.

Salut, je prévois d’avoir une utilisation similaire à la vôtre. J’ai trouvé un article sur la fusion de 2 sites Discourse. Si les étapes de fusion peuvent être automatisées, peut-être pourrions-nous configurer un cron job pour fusionner constamment la base de données entre le serveur maître et les instances esclaves ?