Domanda

Introduzione

Nella mia attuale organizzazione, abbiamo molte applicazioni desktop e web che si alimentano a vicenda a un certo punto. Quando si occupano applicazioni precedenti o si creano nuove applicazioni, è molto difficile provare a ricordare quale sistema si basa su altri sistemi per funzionare. Non sto parlando di dipendenze di software come DLL e immagini, sto parlando di interi sistemi come un sistema finanziario dipendente dal sistema HR ecc.

La mia domanda

Qual è il modo migliore per tenere traccia di come un intero sistema dipende da un altro?

La risposta può suggerire un metodo per fare quanto sopra, un pacchetto software o tecniche di documentazione.

Nel mio caso particolare, Molti significa oltre 20 applicazioni Web e desktop su una dozzina di server.

È stato utile?

Soluzione

Direi di affermarlo chiaramente sul documento di progettazione dell'architettura. Ci sono alcuni buoni strumenti per questo tipo Enterprise Architect . Questo strumento consente di creare diagrammi utilizzando lo standard UML per descrivere queste dipendenze in modo chiaro e visivo.

Altri suggerimenti

La migliore fonte di informazioni si trova di solito nei file di configurazione. Questo in genere ha le stringhe di connessione, gli URL dei servizi Web ecc. Che daranno una buona idea sulle dipendenze esterne.

Un'altra tecnica consiste nell'utilizzare la creazione di profili o la traccia e l'applicazione di filtri, in modo da poter tracciare facilmente qualsiasi chiamata esterna. Nella maggior parte dei casi, la dipendenza si trova nel livello del database e il controllo dei server collegati e il monitoraggio delle loro dipendenze possono portare alla luce molte informazioni.

Non sono sicuro che ci sia un modo automatico per ottenere queste informazioni, specialmente se i sistemi sono su più piattaforme. Un sacco di lavoro manuale sarà coinvolto per documentare tutto ciò.

Questo è il tipo di applicazione che produciamo su Tideway Systems , e che molte grandi organizzazioni usano proprio per questo scopo. Puoi utilizzare il prodotto per scoprire la tua proprietà e utilizzare le funzionalità di modellazione per descrivere le tue app aziendali (che in genere sono costituite da più software e server di span).

Sembra che tu abbia i requisiti per utilizzare la Community Edition di Foundation gratuita, che puoi utilizzare su un massimo di 30 server - solo scarica e provalo. Allora facci sapere cosa ne pensi per favore!

Dichiarazione di non responsabilità: gestisco il gruppo di sviluppo su Tideway . Il prodotto è molto bello, anche se non l'ho scritto direttamente da me :)

Spegni ogni macchina una alla volta e vedi cosa si rompe ..; p

Scherzi a parte, non esiste una risposta semplice a questa domanda. Con una raccolta di sistemi potresti creare un diagramma che mostra le dipendenze di base, ma non avrebbe molto significato se non avessi un'idea di quale fosse la dipendenza. Di solito il tuo obiettivo è determinare ciò di cui hai bisogno per "riconvalidare" quando cambi un altro sistema, non quali macchine puoi spegnere casualmente. Ma quel tipo di informazioni richiede una grande quantità di dettagli ed è difficile da accumulare in primo luogo.

Tutto questo alla fine finisce in una situazione in cui i tuoi sistemi sono davanti alla tua automazione. Non troverai mai uno strumento di automazione termoretraibile che tiene il passo. D'altra parte, con così tanti dettagli necessari, tutto ciò che può occuparsi della metà o anche di un terzo del carico di lavoro sarà prezioso.

Questa è una buona domanda - a quanto pare lottiamo ogni volta.

Ciò che abbiamo cercato di fare nell'ultimo anno circa è essere "spietato" su due cose:

  1. automazione: se la automatizzi e la costruisci / esegui spesso, il processo di automazione tenderà a sistemare le cose il più delle volte (impostazioni di configurazione, ecc.)

  2. wiki, wiki, wiki - cerchiamo di essere fondamentali per mantenere aggiornato il team e progettare il wiki.

Curioso di vedere altre risposte.

Sembra un lavoro per una scoperta aziendale automatizzata per quanto può andare. A seconda delle dimensioni dell'organizzazione e dell'ambiente, esistono diverse soluzioni. Per i grandi paesaggi è comunque necessario un CMDB (Configuration Management Database). Prodotti come HP Universal CMDB è in grado di rilevare e tenere traccia delle dipendenze in ambienti di grandi dimensioni.

es. può scoprire le relazioni tra un sistema SAP e i relativi database e gli host su cui sono in esecuzione i sistemi distribuiti e mostrarti le dipendenze. Ancora più importante può avvisarti nel caso in cui vengano apportate modifiche non autorizzate all'ambiente reale.

Quindi la risposta dipende da ciò che consideri "molti".

Due tipi di problemi coinvolti:

a.) per coloro che vogliono sapere come determinare le dipendenze per ciascun componente

b.) per coloro che vogliono tenere traccia delle interdipendenze e delle loro priorità in un sistema di componenti. (come in quale componente viene installato prima in un ambiente di test, ecc ...)

Se hai una serie di componenti, per ognuno dei quali conosci le dipendenze e desideri un ordine di dipendenza per l'intero elenco di componenti, potresti trovare un modulo Perl chiamato Algorithm :: Dependency :: Ordered to be di un certo valore. Esistono altri moduli correlati che possono funzionare con record di database di componenti ecc. O persino con semplici record di file. Ma un avvertimento: ho avuto problemi a farlo funzionare.

In alternativa, uno strumento grafico può essere utile.

Questa è una funzione di " Configuration Management " gruppo. Per iniziare, dovrai parlare con gli "esperti". presso la tua azienda e crea una mappa / grafico delle applicazioni. Usa graphviz / dot per generare un diagramma, non sarà carino, ma ti darà una rappresentazione visiva delle dipendenze.

Ecco un esempio:

digraph g {
 rankdir=LR;
 app1->app2->db1;
 app1->app3;
}

Spero che questo aiuti,

La mappatura delle dipendenze del sistema è una cosa. Le vere impostazioni ambientali, gli uid, le password, le impostazioni di rappresentazione, i nomi dei database e altri dati che cambiano dallo sviluppo al qa in uat alla produzione sono la vera sfida.

Chi li memorizza / ricorda tutti?

Lo sviluppatore non sa su quali server di produzione risiederà la sua applicazione. Documenta solo il nome del suo database di sviluppo, uid, pwd e descrive le sue tabelle del database, le stringhe di connessione, ecc.

Una volta verificato nel repository di codice e migrato nell'ambiente QA, chi è il custode dei dati richiesti per aggiornare quei file di configurazione con i valori corretti?

Di nuovo quando viene migrato in QA e UAT, chi?

Chi ha la responsabilità di informare il prossimo gruppo di migrazione di ciò che deve essere cambiato?

Nella mia azienda, questo è ciò che ci provoca più mal di testa. Quando viene approvato dal processo di controllo interno delle modifiche e viene creata una richiesta di migrazione per migrare l'applicazione nell'ambiente di produzione, è sufficiente un'impostazione di configurazione da dimenticare per rovinare l'intera implementazione, e succede sempre perché non vengono tracciate chiare linee di responsabilità (a mio avviso).

Al di là delle responsabilità, penso che sia un archivio centrale per queste informazioni.

es. Un sistema che memorizza tutte le impostazioni di configurazione per tutti i progetti / applicazioni e basato sul tuo "ruolo" puoi / non puoi vedere i valori effettivi.

Lo sviluppatore termina la sua creazione e crea una richiesta di migrazione nel "sistema". La persona QA riceve la notifica che la build ### è pronta. La persona QA accede al "sistema" e recupera le istruzioni di migrazione. Ora sanno chiaramente cosa deve essere fatto e stanno iniziando il check-out del codice e il processo di migrazione.

Ripeti per UAT e infine prod.

Quando qualcuno costruirà questo sistema di migrazione fammelo sapere, perché QUESTO aiuterà molte persone.

Forse lo costruirò da solo ... Chi vuole contrarmi?

Ero nuovo in un lavoro ed è stato suggerito come primo compito di identificare le dipendenze del sistema. Si scopre che ciò che il mio capo intendeva era andare a parlare con la gente, in quel modo avrei imparato chi era chi. Pensavo che il mio capo volesse che scrivessi un programma per computer per farlo. E così ho fatto. La mia ipotesi era che se un programma fosse un client di un altro programma (un servizio o un server), allora netstat -pant e netstat -panu allora grep per STABILITO ti avrebbe dato quello. È possibile identificare i servizi inserendo l'output in ASCOLTO.

Questa è solo una soluzione parziale. Sì, ti dice quali applicazioni parlano a quali applicazioni, ma ci sono altre dipendenze. Quindi, ad esempio, alcune applicazioni usano DNS per trovare i loro server, mentre altre sono codificate o nei file di configurazione. Tutto ciò che utilizza TCP o UDP dipende dall'IP. Nella maggior parte dei luoghi, l'IP dipende da ARP e da Ethernet o WiFi. Tutto ciò che dipende da un servizio su un'altra LAN dipende da almeno un router.

Se si dispone di un bilanciamento del carico o di una sorta di cluster, il problema diventa più interessante. Se avessi un servizio che proviene da un bilanciamento del carico e che sia "reale" il server dietro il firewall si arresta, quindi il servizio è degradato ma è ancora attivo.

Diventa ancora più interessante perché i servizi (programmi) dipendono dai server (hardware). I server, a loro volta, dipendono dalla potenza e dall'aria condizionata.

Così, mentre il mio modo di pensare andava fuori controllo, le cose sono diventate più orribilmente complicate e ho pensato di creare un linguaggio specifico di dominio (DSL) per catturare tutte queste dipendenze. Ho pensato che, ad esempio, server_1, server_3 e server_5 siano in fase di alimentazione 1; server_2, server_4 e server_6 sono in fase di alimentazione 2. Server_1, Server_3 e server_5 falliscono tutti nello stesso momento: probabilmente la fase 1 è fallita. Non l'ho ancora capito. Ovviamente, la situazione può essere rappresentata da un grafico diretto, non ho ancora elaborato i dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top