Lavoro in un'azienda che utilizza i microservizi. Abbiamo un servizio particolare (chiamiamolo servizio di carrelli per esempio) che gestisce un po 'di logica (memorizzazione di carrelli, consentendo ad altri servizi di aggiungere e rimuovere oggetti dal carrello di un determinato utente, ecc.). Il mio team possiede questo servizio e molti altri percorsi critici (come la ricerca articoli) parlano regolarmente con oltre 1000 QPS.
Ora è necessario aggiungere un front-end Web che consenta alle persone dell'assistenza clienti di rimuovere / aggiungere articoli al carrello manualmente. Questo frontend ha fondamentalmente bisogno di fare tutto ciò che il nostro servizio espone al momento, oltre ad alcune cose più specifiche (cambiare il proprietario di un carrello, per esempio). Abbiamo due scelte:
- Rendi il servizio di carrello al servizio del frontend. Il frontend può parlare con Cart Service per cambiare i proprietari del carrello.
- Crea un nuovo servizio di amministrazione carrello che serve solo il frontend e che parla al servizio di carrello per eseguire le azioni del carrello. Questo servizio non memorizzerebbe alcun nuovo dato (probabilmente) ma dovrebbe parlare con altri servizi (come l'autenticazione del servizio clienti, ecc.)
Penso che dovremmo andare con l'opzione 2 per evitare il gonfiarsi del servizio di vendita (che già fa un sacco di cose) e in questo modo possiamo scalare il nuovo servizio in modo indipendente. Separa anche l'interesse del servizio clienti dalle preoccupazioni del core business: il servizio di Amministrazione carrello e il servizio di consegna hanno diversi requisiti di disponibilità e potremmo abbattere inavvertitamente il servizio di consegna se introduciamo un errore nel tentativo di modificare il frontend.
Tuttavia, il mio collaboratore pensa che dovremmo optare per l'opzione 1 perché scrivere le nuove API che il servizio Cart dovrebbe esporre sarebbe tempo meglio speso a fare altre cose, e poiché il carico di Amministrazione carrello sarebbe così insignificante rispetto a il carico attuale del carrello, i problemi di caricamento non contano molto.
Quali sono i pro e i contro di ciascun metodo oltre a quello che ho descritto? C'è un motivo per cui un metodo è chiaramente migliore dell'altro?