Architettura guidata dai messaggi e ridimensionamento orizzontale

4

Durante il lavoro su un progetto per animali domestici nell'architettura basata su eventi di microservice, ho riscontrato un problema nel fornire risposte a un cliente.

Ognimicroservizio(gatewayAPIecc.)hamoltereplicheehailproprioloadbalancer(servizioKubernetes).

Casodiutilizzo:

  1. 20client(JSApp)invia"Registra richiesta account"

  2. 10 client si connettono a "API Gateway 1" e 10 - "API Gateway 2 ". I gateway mantengono la connessione (polling lungo)

  3. Ciascun gateway API delega l'elaborazione delle richieste ai Data Processor tramite Apache Kafka, argomento "registerAccount"

  4. I processori dati sono iscritti all'argomento "registerAccount". onMessage () registra l'account e inserisce nuovamente l'ID del nuovo account Kafka, argomento "newAccountId"

  5. I gateway API ricevono newAccountId (quale? tutti?)

  6. I gateway API inviano newAccountId al client appropriato (come può l'API Il gateway decide quale client deve ricevere questo nuovo account Account?)

L'unica soluzione che ho trovato è quella di aggiungere l'id del client a ciascun messaggio e quindi filtrare i messaggi.

Qualcuno ha avuto questo problema?

    
posta ovnia 18.11.2016 - 13:18
fonte

1 risposta

3

Il modo in cui bilanciate in modo efficace un consumatore in Kafka è che registrate ciascuno dei vostri nodi / processi client in un singolo gruppo di consumatori.

Consumers label themselves with a consumer group name, and each record published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.

If all the consumer instances have the same consumer group, then the records will effectively be load balanced over the consumer instances.

If all the consumer instances have different consumer groups, then each record will be broadcast to all the consumer processes.

[Fonte] link

Questa è una configurazione client di base. In Kafka non esiste un concetto di "Message Queue", tuttavia in questo modo puoi gestire in modo affidabile gli eventi basati sui messaggi basati sulle transazioni.

    
risposta data 18.11.2016 - 14:01
fonte

Leggi altre domande sui tag