Quelle est la meilleure politique de nouvelle tentative dans un tel scénario:meilleure politique de nouvelle tentative sur délai de réponse de création de données
Database
réussit à créer l'entrée de données, mais la réponse prend trop de temps pour atteindre Application
. Donc, pour effectuer le travail, Application
réessaie la création, et bien sûr Database
renvoie une erreur "existe déjà". Donc, à la fin du point de vue de Application
, il semble que la création a échoué, alors qu'en fait, il a réussi. Et pire encore, si c'est au milieu d'une série d'étapes, alors il n'y a aucun moyen pour Application
de décider s'il faut déclencher une restauration sur les étapes précédentes.
L'augmentation de la longueur du délai sur Application
n'est pas une solution acceptable car le réseau IP ne peut jamais être fiable à 100% et il y a toujours une petite chance que la réponse puisse se perdre dans le réseau.
Ajouter une vérification de l'existence de <data>
avant de créer pourrait fonctionner. Mais c'est seulement quand la concurrence est prise en compte. Dans mon cas, il peut y avoir plusieurs clients à Database
et je ne suis pas certain de la chance de conditions de course.
+-------------+ +-----------+
| Application | | Database |
+-------------+ +-----------+
| |
| CREATE <data> |
|--------------------------------------------------------->|
| |
| | creating
| |---------
| | |
| |<--------
| -------------------------------\ |
|-| timeout waiting for response | |
| |------------------------------| |
| |
| SUCCESS |
|<---------------------------------------------------------|
| -----------------------------------------------\ |
|-| response from a timed out session is ignored | |
| |----------------------------------------------| |
| |
| retry CREATE <data> |
|--------------------------------------------------------->|
| |
| ERROR: <data> ALREADY EXISTS |
|<---------------------------------------------------------|
| ---------------------------------------------------\ |
|-| no idea whether the creation actually took place | |
| |--------------------------------------------------| |
| |
Votre application n'obtient-elle pas une erreur de "connexion réseau expirée"? –
@NevilleK oui c'est le cas. Et c'est ce qui déclenche la nouvelle tentative. – Sah