2009-03-09 8 views
3

Quels changements dans une base de données (MySQL dans ce cas) survit Hibernate (data, schema, ...)?Zero Downtime avec Hibernate

Je demande cela en raison de zéro temps d'arrêt avec Hibernate.

Modifier la base de données, répartir les serveurs d'applications en deux clusters, redéployer l'application sur l'un des clusters et changer d'application.

Merci Stephan

Répondre

1

Je vais répondre par expérience personnelle et non d'une connaissance particulière mise en veille prolongée. Alors, prenez ceci avec un grain de sel. Aussi un peu d'une question vague, il semble ajouter des commentaires si approprié. :)

Tout d'abord, le changement/ajout/suppression des choses au schéma qui est mis en correspondance en veille prolongée ne sera jamais de problème. Tout ce que fait hibernate est de générer des requêtes, car cela traduit beaucoup de choses à SQL votre application continuera simplement à fonctionner tant que ces requêtes continueront à fonctionner. Cela signifie que l'ajout de colonnes à une table ou l'ajout de tables ne pose pas de problème, la suppression de colonnes non mappées n'est pas un problème, etc.

Ce qui est plus problématique, ce sont les modifications apportées aux éléments mappés. Supposons que vous changiez un nombre (10,0) en nombre (11,0), cela fonctionnera généralement. Si vous commencez à faire des choses comme changer un CHAR (1) champ à un champ BIT ou quelque chose de similaire, vous aurez besoin de certaines modifications dans vos applications de mise en veille prolongée, ce qui fera un déploiement existant sûr. C'est du bon sens. Si vous devez effectuer des modifications de ce type, l'exécution de la commande ALTER TABLE sur un serveur db normal verrouillera probablement la table de toute façon, donc redémarrer l'application n'est pas votre plus gros problème.

Faire face à des changements majeurs de schéma sous haute disponibilité ne sont pas quelque chose de veille prolongée est destiné à traiter directement. Hibernate suppose une base de données relationnelle traditionnelle où les changements de schéma sont souvent très coûteux.

Les trois autres problèmes que vous mentionnez:

  • changer les sources de données: nécessite probablement une application restart
  • serveur d'applications de partage: si vous voulez dire ce que je pense que vous voulez dire, vous pouvez simplement déployer sur différents serveurs d'applications . Si les permutations sont requises, utilisez quelque chose entre votre application Web et le client pour les gérer, c'est-à-dire un équilibreur de charge au niveau IP ou similaire.
  • données changeantes: les problèmes normaux avec les bases de données transactionnelles et plusieurs auteurs appliquent. Hibernate peut se retrouver avec une vue incohérente de la base de données. Il peut remplacer les modifications par d'autres utilisateurs et, dans certains cas, cela pourrait générer quelques exceptions, mais vous devriez être possible d'anticiper et d'agir sur des situations comme celles-ci AFAICT.