Quando si costruisce un Apis web standard nel mondo Java ci sono due modi che potrei fare oggigiorno
- Utilizza SpringMVC (non reattivo)
- Usa SpringWebFlux (Reattivo)
Ci sono alcuni vantaggi dell'utilizzo di Reactive a cui posso pensare
- Utilizza meno risorse di memoria in quanto c'è meno thread in esecuzione (forse meglio per una distribuzione basata su container)
- È meglio per lo scenario in cui la tua API potrebbe dover chiamare altri apis e non vuoi pensare al problema della concorrenza (questo può essere fatto anche nel webmvc tradizionale, ma poi devi usare
completableFuture
etc mentre in reattivo lasci che il framework lo gestisca)
Ci sono pochi svantaggi che posso pensare quando si utilizza Reactive
- Complessità del codice, poiché ora tutto è incatenato e devi occuparti di non bloccare il thread e devi essere consapevole del fatto che non esiste
ThreadLocal
in quanto tali operazioni come la registrazione usando MDC sono più complicate ora - Aumento della latenza in quanto ora ci sono meno thread
Uno dei punti di forza del modo reattivo di fare le cose è il concetto di backpressure ma quando si arriva alla normale richiesta / risposta in web apis non viene usato come o lo si elabora o lo si fa non c'è nessun processo lungo la catena che ridurrà la produzione di dati.
Non sono sicuro che il vantaggio di cui sopra possa valere la complessità di un web apis. Mi piacerebbe sentire pensieri su questo. Se web apis non è il posto giusto per usare reattivo dove penseresti sia il posto giusto per usarlo. O se il modo reattivo è il modo per farlo, allora non significa che non c'è più posto per il modo tradizionale di fare webmvc?