English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Concetti da considerare nello sviluppo Java

1. Scrivi alcune configurazioni che devono essere modificate nei file di proprietà

Ad esempio, non è stato impostato un numero di thread utilizzabile per la configurazione del file di proprietà per l'esecuzione concorrente. Quindi il tuo programma può funzionare senza problemi sia nell'ambiente DEV che in TEST, ma una volta implementato in PROD, quando viene utilizzato come programma multithreading per gestire set di dati più grandi, potrebbe generare un IOException, il motivo potrebbe essere la concorrenza online o altri motivi. Se il numero di thread può essere configurato nel file di proprietà, diventa molto facile renderlo un'applicazione a singolo thread. Non dovremo più ri-deployare e testare l'applicazione per risolvere problemi. Questo metodo è applicabile anche alla configurazione di URL, server e porta.

Ecco alcune raccomandazioni per esternalizzare queste configurazioni utilizzando file di proprietà, con formati come properties, yaml, hocon, json. I seguenti classi implementano il supporto per questi formati di file, inclusi i sostituti dei segnaposto.

https://github.com/superhj1987/awesome-libs/blob/master/src/main/java/me/rowkey/libs/spring/config/AwesomePropertyPlaceholderConfigurer.java

2. Nella simulazione dei test, cercare di imitare l'ambiente online il più possibile

Un'immagine tipica nel processo di produzione è l'uso di soli 1 a 3 account per il test, mentre il numero dovrebbe essere tra 1000 e 2000. Durante i test di prestazioni, i dati utilizzati devono essere reali e non ridotti. I test di prestazioni non aderenti all'ambiente reale possono portare a problemi inaspettati di prestazioni, espansione e multithreading. È anche possibile risolvere parte dei problemi utilizzando un ambiente di pre-pubblicazione.

3. Per tutte le chiamate esterne e i servizi interni, è necessario fare il handling degli errori

Non si può supporre a priori che la disponibilità sia del 100% sia per le chiamate RPC che per le chiamate ai servizi di terze parti. Non è permesso che ci siano timeout e retry nelle chiamate ai servizi, il che può avere un impatto negativo sulla stabilità e sulle prestazioni dell'applicazione.

4. Il design della sicurezza di un sistema deve seguire il principio di 'minima autorizzazione'

I servizi di rete sono ovunque, il che permette agli hacker di utilizzarli facilmente per attacchi di denegazione di servizio. Pertanto, quando si progettano sistemi, è necessario seguire il principio di 'minima autorizzazione', utilizzare metodi come whitelist.

5. È necessario fornire i seguenti documenti

Scrivere documenti di test unitari e garantire una buona copertura del codice.
Disegni di progettazione a livello alto: descrivono tutti i componenti, le interazioni e la struttura.
Disegni dettagliati: specifici per la progettazione a livello di codice, e alcuni flussi di logica chiave.
Documentazione della composizione del sistema: spiegare tutti i file di composizione del sistema, i file di configurazione ecc.
I documenti a livello di database DML e DDL, in particolare le query SQL, devono essere revisionati da DBA o sviluppatori chiave prima di essere messi in linea.
Non solo per i flussi di lavoro di sviluppo tradizionali, ma anche per lo sviluppo agile, questi documenti sono indispensabili, altrimenti sarà molto difficile nel mantenimento e nella transizione successiva.

6. Fare una buona sorveglianza, recupero degli errori e backup per le funzioni chiave del sistema

Per alcuni moduli funzionali cruciali del sistema, è necessario fare una buona sorveglianza su di loro, prevenire che influenzino il funzionamento del sistema, causando perdite incalcolabili. Inoltre, se possibile, cercare di ripristinare dopo aver monitorato il guasto, inviare un allarme se il ripristino fallisce. Per alcuni file di dati molto importanti, è necessario fare una copia di backup redundante, prevenire che alcune improvvisi guasti causino la perdita di dati.

7. Durante la progettazione del database, progettare alcune colonne facili da tracciare e organizzare la storia

Ad esempio, 'create_time', 'update_time' possono spiegare il tempo di creazione e aggiornamento dei record. 'create_by', 'update_by' possono spiegare chi ha creato e aggiornato i record.

Inoltre, la cancellazione dei record non è sempre una cancellazione reale, in questo caso è necessario progettare una colonna che rappresenta lo stato di questo record, come ad esempio la colonna 'status' che può essere 'Active' o 'Inactive'.

8. Pianificare bene il piano di rollback del progetto

Quando una nuova funzione viene lanciata, se si verifica un guasto, senza un piano di rollback, potrebbe causare confusione e rendere il servizio in linea inutilizzabile per un periodo di tempo. Un buon piano di rollback ti permette di eseguire le operazioni in modo ordinato, ripristinando il sistema a uno stato di esecuzione controllato entro un tempo ragionevole.

9. Fare un'analisi quantitativa prima del lancio del progetto

Per i memoria, database, file, cache e altri utilizzati nel progetto, è necessario fare un'analisi quantitativa. Prevedere l'occupazione spaziale per un periodo di tempo futuro, fornire una riferimento per l'operatore di manutenzione. Prevenire che, a causa della crescita rapida dei dati, la memoria di archiviazione non sia sufficiente. Questo è molto importante, altrimenti è facile causare l'inalidità del servizio in linea.

10. Pianificare bene la distribuzione del sistema.

La piattaforma di distribuzione del sistema è una parte cruciale. La descrizione della piattaforma di distribuzione non dovrebbe essere limitata a un server, due database, almeno dovrebbe includere

  1. Versione specifica del sistema operativo, JVM, ecc.
  2. Quanta memoria (inclusa la memoria fisica, la memoria heap JVM, la memoria stack JVM e lo spazio della memoria永久代).
  3. CPU (numero di core).
  4. Load balancer, numero di nodi necessari, tipo di nodo, ad esempio Active-Standby o Active-Active.
  5. Requisiti del file system, ad esempio, il tuo applicazione potrebbe raccogliere log generati e conservarli per un lungo periodo prima di archiviarli. In questo caso, avrai bisogno di sufficiente spazio su disco.

11. Scegliere lo strumento/tecnologia più adatto

In molti casi, gli sviluppatori utilizzano un linguaggio di programmazione o un'attrezzatura in un sistema di produzione che desiderano imparare. Questo non è sempre la scelta migliore. Ad esempio, utilizzare un database NoSQL per dati che sono effettivamente relazionali. Sia il linguaggio che l'attrezzatura hanno i loro scenari di applicazione. Non cercare solo la novità e non basarti sul 'me stesso'.

12. Ha una solida preparazione di conoscenze in alcune aree chiave della tecnologia.

Design pattern
Ottimizzazione JVM
Problemi di concorrenza multithreading
Problemi di transazione, inclusi le transazioni distribuite
Problemi di prestazioni, inclusi GC e calcolo
Cache

 Spero che questo articolo possa aiutare chi desidera sviluppare programmi Java, grazie per il supporto della nostra community!

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare