Dans un environnement avec un cluster ou un miroir de basculement SQL Server, comment préférez-vous gérer les erreurs? Il semble qu'il y ait deux options:Gestion des requêtes de base de données qui échouent en raison d'un basculement de serveur
- Fail toute demande du client en cours, et que l'utilisateur puisse retenter
- Catch l'erreur dans votre DAL, et essayez de nouveau il
Chaque approche a ses avantages et contre. La plupart des magasins avec lesquels j'ai travaillé font # 1, mais beaucoup d'entre eux ne respectent pas non plus les strictes limites transactionnelles, et me paraissent se montrer ouverts aux problèmes en cas d'échec. Malgré tout, j'ai de la difficulté à les mettre en # 2, ce qui devrait aussi améliorer l'expérience utilisateur (un retard est potentiellement long pendant le basculement).
Tout argument dans un sens ou dans l'autre serait apprécié. Si vous utilisez la seconde approche, avez-vous un wrapper standard qui aide à simplifier la mise en œuvre? Dans un cas comme dans l'autre, comment structurez-vous votre code pour éviter des problèmes tels que ceux liés au manque d'idempotence dans la commande qui a échoué?
Si vos failovers ne prennent que quelques secondes, vous avez de la chance. La plupart des systèmes basés sur des clusters SQL Server avec lesquels j'ai travaillé mettent au moins 30 secondes pour tout restaurer, plus des retards supplémentaires lorsque le cache du serveur de secours se remplit - et peut durer jusqu'à 2 minutes. Les miroirs ne sont que quelques secondes, mais la plupart des magasins avec lesquels je travaille ne les utilisent pas (encore). – RickNZ
Par quelques-uns, je veux dire 20-30 secondes: les utilisateurs ne remarquent pas. Quel serait un nombre de tentatives valide? Est-ce qu'il gère les délais d'attente, les blocages? Va-t-il réessayer seulement pour les déconnexions forcées? etc etc – gbn
J'utilise normalement un nombre de tentatives de 2, avec un retard entre les deux. L'idée n'est pas d'empêcher l'utilisateur de voir une erreur; juste pour minimiser les chances que cela se produise. Comment vous assurez-vous que les insertions qui ont réussi juste avant une commande qui a échoué sur la même page ne sont pas émises une seconde fois après un échec? Rien de plus que juste une conception de transaction minutieuse? – RickNZ