Ho scritto un bot Slack che deve connettersi ai team Slack tramite connessioni websocket. Poiché il bot potrebbe essere utilizzato da migliaia di team, alla fine dovrò distribuire i team su più server. I nuovi team vengono aggiunti tramite un server HTTP che gestisce l'autenticazione OAuth iniziale.
Sto cercando soluzioni che mi consentano di ottenere quanto segue:
-
Quando un server si arresta o si riavvia, tutti i team a cui è stato assegnato devono essere nuovamente assegnati ai server rimanenti. Va bene se la connessione al team Slack si interrompe temporaneamente finché il team viene prelevato rapidamente da un server.
-
Quando una squadra viene aggiunta, viene assegnata al server meno "occupato". Occupato potrebbe essere semplicemente definito dalla quantità di team che gestisce attualmente.
-
Mi piacerebbe fare tutto questo con un codice personalizzato minimo per scrivere.
Finora, ho considerato le seguenti soluzioni:
1) Coda di lavoro con RabbitMQ. I server Bot competono per ricevere team. Questa è una soluzione OK anche se ho bisogno di un modo affidabile per rimettere i team in coda quando un server si ferma.
2) Scrivi un servizio personalizzato di "orchestrazione". Il servizio di orchestrazione riceverà i team dal server http e li invierà a un cluster di server. Dovrebbe tenere traccia di quando i server vanno giù e quali team devono essere riassegnati. Non sono sicuro di come scrivere in modo affidabile un servizio del genere e questo diventerebbe un singolo punto di errore.
3) I tuoi suggerimenti!