2012-02-07 1 views
7

On m'a demandé de transférer une application de traitement des données héritée vers Java.Architecture générale pour un système de traitement de données à long terme en Java?

La version actuelle du système est composée d'un nubmer de feuilles Excel (mal écrites). Les feuilles implémentent une grosse boucle: Un certain nombre de sources de données sont interrogées. Ces sources sont un mélange de services Web CSV et XML.

Le processus est conceptuellement simple:

Il est apatride, cela signifie que les calculs qui fonctionnent sont purement fonction des entrées. Les résultats des calculs sont publiés (actuellement en écrivant un certain nombre de fichiers CSV dans certains emplacements standards sur le réseau).

Après avoir publié les résultats, le cycle d'interrogation recommence.

Le processus n'aura pas besoin d'une interface graphique d'administration, mais il serait intéressant si je pouvais implémenter une sorte de panneau de contrôle basé sur le Web. Ce ne serait rien de joli et purement pour usage interne. Le panneau de contrôle ferait un peu plus que diffuser des statistiques sur les sources et peut-être forcer l'actualisation des flux d'entrée en cas de problème. Ce composant est purement facultatif lors du premier tour de livraison.

Une caractéristique critique de ce système sera la tolérance aux pannes. Certains flux d'entrée sont notoirement buggés. Je voudrais que mon système puisse récupérer dans le cas où certaines des entrées seraient cassées. Dans ce cas, il ne serait pas possible de mettre à jour la sortie - je voudrais qu'elle continue d'interroger jusqu'à ce que le système soit résolu, en générant éventuellement des messages XMPP pour indiquer l'état du système. Dans l'ensemble, le système devrait fonctionner sans intervention pendant de longues périodes.

Les utilisateurs ont actuellement un client personnalisé qui interroge les fichiers CSV qui (espérons-le) n'auront pas besoin d'être réécrits. Si je peux faire ce travail correctement, ils ne remarqueront pas que le moteur qui exécute ce système a été ré-implémenté.

Je ne suis pas un devloper java (je fais principalement Python), mais la JVM est l'exigence dans ce cas. Le directeur m'a donné beaucoup de temps pour apprendre.

Ce que je veux savoir, c'est comment commencer à architecturer ce genre de projet. Je voudrais faire usage de cadres & de bons motifs possibles. Y a-t-il de gros blocs de construction qui pourraient m'aider à faire fonctionner un système de bonne qualité plus rapidement?

UPDATE0: Personne n'a encore mentionné le printemps - Ce framework a-t-il un rôle à jouer dans ce genre d'application?

+0

J'ai mentionné Spring comme commentaire à la réponse de @Martin Spamer. – Rich

Répondre

3

Vous pouvez utiliser beaucoup de grands frameworks complexes pour "vous aider" à le faire. Apprendre cela peut être CV ++.

Dans votre cas, je vous suggère d'essayer de rendre le système aussi simple que possible. Il fonctionnera mieux et sera plus facile à entretenir (il est également plus susceptible de fonctionner)

Donc je prendrais chacune des conditions et me demanderais; Est-ce que je peux faire simple? Ce n'est pas d'être paresseux (vous devez penser plus difficile), mais une bonne pratique à mon humble avis.

1

1) Écrivez le code qui traite les fichiers, gardez-le simple une classe par tâche, vous pourriez trouver les Apache CSV et Apache Commons utiles. 2) Puis regardez Java Thread Pools pour créer un coureur de processus sperate pour ces classes en tant que tâches séparées, si elles l'erreur, il peut les redémarrer. 3) La meilleure approche pour démarrer dépend de la plateforme, mais je suppose que votre mention d'Excel indique qu'il s'agit de Windows PC.La solution la plus simple consisterait donc à exécuter Runner depuis l'élément de menu Windows-> Démarrage. Une solution légèrement meilleure serait d'utiliser un windows service wrapper. Vous pouvez également utiliser ceci sous un angle similaire à Apache ACD

+0

Pour le traitement CSV, je recommande Spring Batch. – Rich

0

Regardez l'outil Pentaho ETL ou Talend OpenStudio.
Ces outils permettent d'accéder à des fichiers, des bases de données, etc. Vous pouvez écrire votre propre plugin ou adaptateur si vous en avez besoin. Talend crée du code Java que vous pouvez compiler et exécuter.

1

Il existe un outil dans l'écosystème Java, qui résout tous (presque) les problèmes d'intégration.

Il est appelé Apache Camel (http://camel.apache.org/). Il repose sur un concept de consommateurs et de producteurs et de modèles d'intégration d'entreprise entre les deux. Il offre des fonctionnalités de tolérance de pannes et de configuration de traitement simultané. Il existe un support pour les sondages périodiques. Il a des composants pour XML, CSV et XMPP. Il est facile de définir des tâches d'arrière-plan déclenchées par le temps et de les intégrer à n'importe quel système de messagerie que vous aimez pour la mise en file d'attente.

Si vous écrivez un tel système à partir de rien, cela prendrait des semaines et des semaines et vous pourriez probablement manquer certaines conditions d'erreur.

Questions connexes