Per quanto mi riguarda, non c'è un'unica definizione concordata di questi termini (quelle esistenti sono molto vaghe o semplicemente ben definite per l'uso aziendale/team).
Ecco come uso questi termini.
Modulo è un pezzo di software che è raggruppato per responsabilità, per esempio, un modulo di registrazione, modulo di autenticazione, modulo HTTP ecc. Incapsula un insieme definito di funzionalità e fornisce un'interfaccia ben definita per utilizzare questo modulo. Il modulo è solitamente materializzato come una libreria statica o dinamica, ma può anche essere un servizio separato come nell'architettura dei microservizi. Inoltre, i moduli possono essere definiti a diversi livelli di vista dell'architettura; dalla vista a volo d'uccello, un modulo può essere in realtà una coppia di servizi che lavorano insieme, fornendo un insieme di funzionalità (come il modulo di accesso ai dati, che può essere un sistema di per sé). In una visione più dettagliata, si potrebbe chiamare una singola classe un modulo.
Componente è più legato alla materializzazione fisica del software. Viene usato quando si parla di distribuzioni o quando si pianifica la topologia dell'installazione del sistema. In questi termini, un componente può essere un singolo servizio, un software che fornisce l'ispezione dei log, un server frontend ecc.
Per semplificare le cose, sto usando modulo quando si discute l'architettura del software in termini funzionali, senza scavare troppo su come esattamente le cose sarebbero implementate o distribuite. Componente è usato quando si discute la decomposizione fisica del software in pezzi distribuibili.
Tieni a mente che la cosa importante è che tu definisca questi termini all'interno del tuo team, così tutti parlano la stessa lingua. Non è molto importante come chiamate le cose, purché tutti abbiano la stessa comprensione del termine. Tuttavia, vale la pena di non deviare troppo dallo "standard" globale (anche se è molto vago), perché rende difficile l'adattamento per i nuovi membri del team.