Progettazione del sistema per più lavoratori

2

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:

  1. Worker
  2. Coordinator
  3. 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:

  1. 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?
  2. Esiste un quadro o uno strumento adeguato per il coordinatore? Non voglio reinventare la ruota e voglio seguire le migliori pratiche.
  3. 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?
  4. 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.

    
posta yaseco 21.08.2018 - 17:34
fonte

1 risposta

1

How should the workers notify the processor about new data? Should I use a simple REST server (i.e. Apache Tomcat) or some Message Broker to deliver the data to some backend service?

È possibile utilizzare le chiamate HTTP (REST) per questo e mantenerlo semplice. La domanda è come si conosce l'host che si desidera chiamare. Potresti considerare di usare qualcosa come Kafka. Questo è progettato per la distribuzione di eventi. Eviterei una soluzione 'message broker' a meno che tu non abbia una buona ragione per farlo.

Is there a proper framework or tool for the coordinator? I don't want to reinvent the wheel and I want to follow best practices.

L'orchestrazione di container come Kubernetes o Docker Swarm sembra un adattamento. Questi non sono scritti in Java, ma puoi eseguire Java nei contenitori.

Obviously, it's wasteful to use a different server for every job. How to decide how many servers are needed? Can it be determined dynamically? Can all workers live on the same server?

Anche in questo caso la containerizzazione è scritta su di essa.

As I'm writing this, I am realising that conceptually, we need to differ between jobs and workers. So I think the coordinator needs to set a worker for every new job. Is that make sense?

Penso di sì. Sembra una soluzione naturale.

    
risposta data 21.08.2018 - 20:53
fonte