Ho bisogno di progettare un sistema in cui ci sono molti micro-servizi che possiamo pensare come crawler che interrogano le risorse di terze parti e se trovano nuove informazioni lo passano a qualche altro servizio che elabora i dati e li salva in qualche DB.
Credo di aver bisogno di avere un po 'più di componenti - Un coordinatore. Per generare i lavoratori, per verificare se i servizi sono vivi e funzionanti ecc.
Quindi abbiamo tre componenti principali:
- Worker
- Coordinator
- Processor
A questo punto del progetto, non sono sicuro di quanto sia intenso il lavoro dei lavoratori (cioè l'intervallo di polling, la quantità di nuove informazioni). Tuttavia, mi piacerebbe che il sistema fosse in grado di scalare.
Ora per la parte tecnica:
- In che modo i lavoratori devono notificare al processore nuovi dati? Devo utilizzare un semplice server REST (ad esempio Apache Tomcat) o un altro Message Broker per consegnare i dati a qualche servizio di back-end?
- Esiste un quadro o uno strumento adeguato per il coordinatore? Non voglio reinventare la ruota e voglio seguire le migliori pratiche.
- Ovviamente, è inutile utilizzare un server diverso per ogni lavoro. Come decidere quanti server sono necessari? Può essere determinato dinamicamente? Tutti i lavoratori possono vivere sullo stesso server?
- Mentre scrivo questo, mi rendo conto che concettualmente, dobbiamo distinguere tra posti di lavoro e lavoratori. Quindi penso che il coordinatore debba impostare un lavoratore per ogni nuovo lavoro. È sensato?
Come ho detto, non ho intenzione di inventare la ruota, quindi mi piacerebbe usare gli strumenti giusti per il lavoro (ma non cerco la soluzione più elaborata, voglio mantenerla relativamente semplice)
Inoltre, come ho detto, non ho i numeri per determinare quanto sia intenso il lavoro, ma ho bisogno di ricordare che il sistema sarà in grado di scalare facilmente. Sto usando Java.