2009-08-15 8 views
0

J'ai une application qui parle à plusieurs sources internes et externes en utilisant des services SOAP, REST ou simplement en utilisant des procédures stockées de base de données. Évidemment, la performance et la stabilité sont un problème majeur auquel je suis confronté. Même lorsque les points de terminaison fonctionnent à leur meilleur niveau, pour les grands ensembles de données, je vois facilement les appels qui prennent 10 secondes. Par conséquent, j'essaie d'améliorer les performances de mon application en effectuant une lecture anticipée des données et en les stockant localement, afin que les opérations de lecture soient au moins rapides.Problèmes de performances avec les dépendances de données externes

Alors que mon application est le principal consommateur et producteur de données, certaines données peuvent également changer de l'extérieur de mon application que je n'ai aucun contrôle. Si j'utilise la mise en cache, je ne saurais jamais quand invalider le cache lorsque de telles données changent de l'extérieur de mon application. Je pense donc que ma seule option est d'avoir un programmateur de travail en cours d'exécution qui met régulièrement à jour la base de données. Je pourrais hiérarchiser les utilisateurs en fonction de la fréquence à laquelle ils se connectent et utilisent l'application. Je parle de 50 000 utilisateurs, et d'au moins 10 points de terminaison qui sont terriblement lents et peuvent parfois prendre une minute pour un seul appel. Est-ce que quelque chose comme Quartz me donnerait l'échelle dont j'ai besoin? Et comment pourrais-je contourner le cédulaire devenant un point d'échec unique?

Je ne cherche que quelque chose qui ne nécessite pas de maintenance élevée et qui accélère au moins certains des sous-systèmes les moins compliqués, sinon la plupart. Aucune suggestion?

+0

S'il vous plaît préciser ce que ces 50.000 utilisateurs font. Comment interagissent-ils avec ces données provenant de sources multiples? Cherchez-vous activement toutes ces données à la demande? –

+0

Considérez-le comme un portail où un utilisateur peut commander des produits, effectuer des paiements, configurer le produit, afficher des rapports sur l'utilisation, recevoir des alertes, mettre à niveau/rétrograder, utiliser la billetterie, etc.C'est une application J2EE typique, un peu comme un portail bancaire mais très diversifié. Actuellement, tout est récupéré à la demande. – Langali

+0

Ok, voir ma réponse ci-dessous, et laissez-moi savoir si vous avez d'autres questions. –

Répondre

0

Cela peut sembler être un entrepôt de données. Vous mettriez à jour l'entrepôt de données à partir des différentes sources, selon le calendrier nécessaire. Cependant, toutes les transactions en lecture seule proviendraient de l'entrepôt de données et ne nécessiteraient pas d'appels immédiats aux diverses sources externes.

Ceci suppose que vous n'avez pas besoin d'un accès en temps réel aux données les plus à jour. Même si vous avez besoin de données précises au cours de la dernière heure par rapport à une source particulière, cela signifie seulement que vous devrez mettre à jour à partir de cette source toutes les heures.

Vous n'avez pas indiqué les plates-formes que vous utilisez. Si vous utilisiez SQL Server 2005 ou une version ultérieure, je recommanderais SQL Server Integration Services (SSIS) pour la mise à jour de l'entrepôt de données. C'est fait pour ce genre de chose. Bien sûr, en fonction des choix de votre plate-forme, il peut y avoir des alternatives plus appropriées.


Voici quelques ressources sur SSIS et les entrepôts de données. Je sais que vous avez déclaré que vous n'utiliserez pas les produits Microsoft. J'inclus ces liens comme point de référence: ce sont les produits dont je parlais plus haut.

+0

On dirait qu'il peut faire ce que je cherche, mais les produits Microsoft ne sont pas une option. Est-ce qu'un ESB comme ServiceMix ou même RabbitMQ serait approprié? – Langali

+0

Je ne suis pas familier avec ceux-ci. Je recommande que vous appreniez le genre de choses que SSIS peut faire - ce sont les caractéristiques que vous devriez rechercher, en partie. Certains de vos problèmes actuels seront d'obtenir les données et de les nettoyer. SSIS est un outil ETL qui peut le faire. Vous pourriez alors demander à vos 50 000 utilisateurs de récupérer leurs données depuis le DW, optimisées pour l'accès en lecture et en requête, mises à jour aussi souvent que nécessaire. –

Questions connexes