web-dev-qa-db-fra.com

différence entre des garanties exactes et au moins une fois

J'étudie les systèmes distribués et je me réfère à cette vieille question: lien stackoverflow

Je ne peux vraiment pas comprendre la différence entre les garanties exactement une fois, au moins une fois et au plus une fois, j'ai lu ces concepts dans Kafka, Flink et Storm et Cassandra aussi. Pour Par exemple, quelqu'un dit que Flink est meilleur parce qu'il a des garanties exactes une seule fois alors que Storm n'en a qu'une au moins une fois.

Je comprends que le mode une seule fois est meilleur pour la latence, mais en même temps, c'est pire pour la tolérance aux pannes, n'est-ce pas? Comment récupérer un flux si je n'ai pas de doublons? et puis ... si c'est un vrai problème, pourquoi une garantie unique est considérée comme meilleure que les autres?

Quelqu'un peut me donner de meilleures définitions?

17
Akinn

Les définitions ci-dessous sont extraites de Akka Documentation

au plus une fois livraison

signifie que pour chaque message remis au mécanisme, ce message est délivré zéro ou une fois; en termes plus décontractés, cela signifie que les messages peuvent être perdus.

au moins une fois livraison

signifie que pour chaque message remis au mécanisme, de multiples tentatives sont faites pour le délivrer, de telle sorte qu'au moins une réussisse; encore une fois, en termes plus décontractés, cela signifie que les messages peuvent être dupliqués mais pas perdus.

livraison unique livraison

signifie que pour chaque message remis au mécanisme, une seule remise est effectuée au destinataire; le message ne peut être ni perdu ni dupliqué.

Le premier est le moins cher — les performances les plus élevées, le moindre surcoût de mise en œuvre — car il peut être effectué de manière incendiaire sans oublier l'état à l'extrémité d'envoi ou dans le mécanisme de transport. Le second nécessite des tentatives pour contrer les pertes de transport, ce qui signifie garder l'état à l'extrémité émettrice et avoir un mécanisme d'accusé de réception à l'extrémité réceptrice. Le troisième est le plus cher - et a par conséquent les plus mauvaises performances - car en plus du second, il nécessite que l'état soit conservé à l'extrémité de réception afin de filtrer les livraisons en double

36
Amit Kumar

Flink utilise ces termes pour parler des effets des événements sur l'état de l'application. Supposons que j'essaie de compter les publications dans stackoverflow avec la balise Apache-flink dans les fenêtres quotidiennes. Si je travaille avec exactement une fois , chaque article sera compté exactement une fois et mes analyses seront correctes à 100%, même en cas d'échec le chemin et certaines données doivent être retraités pour y arriver. Flink y parvient en combinant des instantanés cohérents à l'échelle mondiale et une relecture de flux. Avec au moins une fois , en cas d'échec, certains messages peuvent être comptés deux fois, mais je suis assuré que chaque message sera analysé par le pipeline. Et avec au plus une fois il n'y aura pas d'instantané ni de relecture en cas d'échec, ce qui entraînera un sous-comptage des publications en cas de problème.

Exactement une fois est optimal en termes d'exactitude et de tolérance aux pannes, mais au détriment d'un peu de latence supplémentaire.

Pour un traitement beaucoup plus approfondi de ce sujet, consultez cet article de blog de Data Artisans - Traitement à haut débit, à faible latence et en une seule fois avec Apache Flink ™ - et le documentation des internes de Flink .

3
David Anderson

Ici est un article agressif à lire.

Je vais essayer de répondre à vos questions:

  • Exact-once n'est pas tolérant aux pannes dans les grands systèmes distribués, car il est impossible pour tous les systèmes de se mettre d'accord sur chaque message si certains systèmes tombent en panne. Vous pouvez implémenter exactement une fois, mais il s'ajoutera à au moins une fois avec votre propre coordination coûteuse. Réfléchissez à la façon dont TCP assure un transfert de données fiable lorsque le protocole IP sous-jacent n'est pas fiable.
  • En implémentant exact-once au-dessus d'au moins une fois, vous aurez des doublons (sinon exacts) en cas d'échecs et ce dont vous avez besoin est de dédoublonner.
  • Exact-once n'est pas considéré comme meilleur car il est livré avec un coût élevé, tandis qu'au moins une fois est assez bon dans la plupart des circonstances.
3
volatilevar

J'ai trouvé un excellent site Web où tous (ou la plupart) Cloud Computing Patterns sont brièvement discutées. Je vous le recommande vraiment, jetez un œil: http://www.cloudcomputingpatterns.org

Livraison exacte

Pour de nombreux systèmes critiques, les messages en double sont inacceptables. Le système de messagerie garantit que chaque message est remis exactement une fois en filtrant automatiquement les doublons de messages possibles.

Livraison au moins une fois

En cas d'échecs qui entraînent une perte de message ou prennent trop de temps pour récupérer, les messages sont retransmis pour garantir qu'ils sont remis au moins une fois.

1
Ozkan