Attualmente sto lavorando a un progetto che coinvolge diversi componenti discreti che hanno alcune funzionalità comuni e ho bisogno di qualche consiglio.
Al momento ho un componente centrale responsabile della distribuzione delle richieste a diversi componenti che traducono le richieste in particolari formati per particolari fonti di dati. I componenti sono in esecuzione come applicazioni Web separate dietro un server Nginx. La comunicazione tra tutti i componenti avviene tramite REST.
Un problema che sto incontrando è il fatto che molti componenti devono eseguire attività simili, che richiedono la duplicazione del codice, che voglio evitare.
Ad esempio, i componenti specifici dell'origine dati utilizzano le credenziali per l'autenticazione alle rispettive origini dati, ma il componente centrale ha anche bisogno di accedere a questo negozio per aggiungere nuove credenziali e aggiornare quelle esistenti (le credenziali sono memorizzate in un database comune).
In questo momento ogni componente è il proprio progetto / app, nella propria cartella separata.
Se si trattasse di un progetto Java, estrarre immediatamente la funzionalità comune, creare un JAR di libreria e far riferimento a tutti i componenti.
Tuttavia, non sono abbastanza sicuro di come farlo in Python. Non riesco davvero a combinare i componenti in un'unità monolitica perché ho bisogno della flessibilità per aggiungere nuovi componenti per nuove origini dati (a meno che qualcuno non conosca un modo semplice per gestirli). Inoltre, alla fine voglio componenti ridondanti per gestire carichi pesanti.
In primo luogo, dovrei eliminare le funzionalità comuni e inserirle nel proprio progetto / libreria? Ne vale la pena? Se è così, come si fa di solito in Python (sto usando la versione 2.7)?
Devo creare un oggetto distribuibile, (usando pip per esempio) oppure esiste un modo per definire una libreria comune senza passare attraverso questo problema?