Verrouillage optimiste ou pessimiste : lequel utiliser pour une réservation ou un paiement ?
Share

In this article
Utilisez le verrouillage pessimiste lorsque de nombreux utilisateurs se disputent la même ligne, comme les derniers billets d'un événement. Utilisez le verrouillage optimiste, avec un champ de version, lorsque la contention est rare, comme pour les réservations ou les paniers répartis sur plusieurs créneaux et produits. Choisissez en fonction de la fréquence à laquelle deux écrivains accèdent réellement à la même ligne.
Quelle est la différence entre le verrouillage optimiste et pessimiste ?
Le verrouillage pessimiste bloque les autres écrivains tant qu'une transaction détient une ligne, donc les conflits attendent. Le verrouillage optimiste laisse tout le monde avancer, puis rejette une écriture si un champ de version a changé en dessous, ce qui entraîne une nouvelle tentative. Le premier échange la latence contre la certitude ; le second échange des tentatives occasionnelles contre l'absence d'attente.
Quand le verrouillage optimiste est-il le meilleur choix ?
Le verrouillage optimiste est préférable lorsque les écritures sont courtes et les collisions rares. Sur les créneaux de réservation de Trexind, un champ de version signifie que l'écriture qui perd une course rencontre un conflit, pas une écriture silencieuse, et retente contre l'état actuel du créneau. Maintenir un verrou pendant toute la requête coûterait plus que ce que cela économise.
Quand le verrouillage pessimiste est-il le meilleur choix ?
Le verrouillage pessimiste est préférable sur une seule ligne très sollicitée que beaucoup d'acheteurs veulent au même moment, comme les derniers billets d'un événement populaire. Là, les tentatives optimistes provoquent des conflits et obligent chaque perdant à refaire tout le paiement. Un verrou court permet au deuxième acheteur d'attendre quelques millisecondes puis de voir que c'est complet.
Comment décider pour votre propre système ?
Demandez-vous à quelle fréquence deux écrivains accèdent à la même ligne, et quel est le coût d'une course perdue pour l'utilisateur. Des collisions rares et des tentatives peu coûteuses indiquent l'optimisme. Des collisions fréquentes sur une ligne, ou des tentatives qui refont un travail coûteux, indiquent le pessimisme. Mesurez la contention avant de vous engager ; la même application peut utiliser les deux.
Beaucoup de lignes, peu de collisions par ligne : optimiste (stock sur des centaines de SKU)
Une ligne, de nombreux écrivains simultanés : pessimiste (derniers billets d'un événement)
Écriture unique par entité : un verrou court suffit (soumission d'examen)
En résumé
Derniers billets d'un événement (FindYourVibe) · Élevé : afflux sur une ligne · Verrou pessimiste sur la ligne · Le perdant attend quelques millisecondes au lieu de refaire tout le paiement
Créneaux de rendez-vous et de tables (Trexind) · Faible : écritures courtes, rarement contestées · Champ de version optimiste · Un verrou tenu pendant toute la requête n'en vaut pas la latence
Stock sur de nombreux SKU (Skyxis) · Faible : les paniers touchent rarement la même ligne · Champ de version optimiste · Un verrou pendant la fenêtre de paiement coûte plus que la rare tentative
Soumission d'une tentative d'examen (PS Classes) · Unique par tentative · Verrou Redis sur l'ID de la tentative · Une soumission se fait une fois, donc quelques millisecondes de verrou sont moins coûteuses qu'un classement corrompu
Publié à l'origine sur sakshamjain.codes/blog/optimistic-vs-pessimistic-locking. Besoin de ce service ? Découvrez mes prestations sur NexoRush ou contactez-moi.