image

È tanto che non parliamo di Services Composition e mi sono appena reso conto che abbiamo lasciato il discorso in sospeso. L’ultima volta che abbiamo toccato l’argomento abbiamo delineato cosa succede quando componiamo informazioni che provengono da più servizi e lo scopo è visualizzare un singolo elemento, come ad esempio 1 prodotto. Cosa succede se dobbiamo visualizzare una lista?

Sia nello screenshot di cui sopra, che nel seguente, stiamo visualizzando un insieme di elementi, tutti a loro volta frutto di un processo di composizione.

image

Salta probabilmente subito all’occhio il potenziale problema in cui possiamo incappare: SELECT N+1 over HTTP. Il rischio è, se applicassimo un processo di composizione come quello che applichiamo al singolo elemento, di produrre un tornado di richieste verso i servizi. Data una lista di 10 elementi dove ogni elemento è composto da 5 servizi avremmo 50 richieste. Inaccettabile.

Se guardiamo entrambi gli screenshot di cui sopra ci rendiamo però conto che in entrambi gli scenari (e direi in tutti gli scenari) c’è un owner, nel primo è il prodotto selezionato, nel secondo il carrello.

Possiamo quindi dire che la composizione di una lista è un processo in 2 passaggi:

  • L’owner intercetta la richiesta (ad esempio /shopping-cart)
    • va dal suo back-end
    • recupera la lista di id che devono essere visualizzati (gli ID dei prodotti in questo momento aggiunti al carrello)

image

  • recuperati gli ID si limita a comunicarlo a tutti gli “attori” potenzialmente interessati

image

  • Utilizzando in soldoni un “evento” in-memory e sincrono alla richiesta HTTP (del resto altro non potrebbe essere, forse… ;-P )
    • L’evento porta con se la lista degli ID caricati
  • Gli interessati gestiscono l’evento…

image

  • …e altro non fanno che andare dai loro servizi di back-end e recuperare le informazioni relative agli ID da “comporre”…

image

  • e il cerchio si chiude, abbiamo composto una lista garantendo che il numero di chiamate ai servizi di back-end sia sempre limitato al numero di servizi coinvolti, quindi 5 servizi, 5 chiamate a prescindere da quanti elementi visualizziamo

Per approfondire potete consultare e giocare con l’esempio disponibile online.

Post in questa serie: