Skip to main content

0006 — Η φιλοξενία αντιγράφων συντονίζεται από ένα ατομικό μίσθωμα DB

Πλαίσιο​

Ένα τρέχον προφίλ αντιγράφου πρέπει να φιλοξενηθεί από ακριβώς έναν κόμβο — δύο κεντρικοί υπολογιστές στο ίδιο προφίλ σημαίνει κάθε πηγή κOperation αντανακλάται δύο φορές (πραγματικό χρήμα χαμένο). Οι κόμβοι έρχονται και φεύγουν (κλιμάκωση, συντρίμμια, έλασης ενημερώσεων), και δεν θέλουμε έναν αποκλειστικό υπηρεσία συντονιστή για τρέξιμο και διατήρηση.

Απόφαση​

Κάθε CopyEngineSupervisor διεκδικεί προφίλ με ένα ατομικό μίσθωμα DB στον πίνακα CopyProfiles:

  • Διεκδίκηση — ένα ατομικό ExecuteUpdate (ή FOR UPDATE SKIP LOCKED κατά την κατάταξη ανά κόμβο) παίρνει προφίλ που είναι αδιευθυντή ή των οποίων το μίσθωμα έχει λήξει. Η ατομικότητα σημαίνει δύο επιφορτίσεις επιβλέποντες ποτέ αμφότερα διεκδικούν την ίδια σειρά.
  • Ανανέωση — ένας ζωντανός κόμβος ανανεώνει το μίσθωμα του κάθε κύκλο, οπότε κρατάει τη διεκδίκησή του.
  • Επανάκτηση — ένας σπασμένος κόμβος μίσθωμα λήγει, και ένας επιζών επιλέγει το προφίλ στον επόμενο κύκλό του (αυτο-θεραπεία). Σε ομαλή τερματισμό ο κόμβος απελευθερώνει τα μισθώματα του αμέσως για ταχεία αποτυχία.
  • Σκυλί φρουρός — ένας κεντρικός υπολογιστής του οποίου το καθήκον έχει εξέλθει ενώ το προφίλ είναι ακόμα δικό μας επανεκκινήθηκε.
  • Συμφωνία είναι αγκυρώθηκε για αποφυγή ενός κοπαδιού UPDATEs στην κλίμακα.

Συνέπειες​

  • Κανένας αυτόνομος συντονιστής για ανάπτυξη ή διατήρηση υγιούς — Postgres είναι η ενιαία πηγή αλήθειας.
  • Το διπλό αντιγραφή αποτρέπεται από ατομικότητα επιπέδου σειράς, όχι αμοιβαίος κλείδωμα επιπέδου εφαρμογής.
  • Η αποτυχία latency φράχτης από τη φόρμουλα TTL (μείον το ταχύ-μονοπάτι ομαλή απελευθέρωση).
  • Αυτό είναι το μονοπάτι χρημάτων. περιφρούρηται από την ντετερμινιστική σουίτα καταπόνησης (DST) — ποτέ αποδυναμώνουν ένα DST σενάριο για να το περάσει.