נתוני ליבהתיאום

מנעולים מבוזרים

מוודאים שרק עובד אחד מריץ משימה בכל פעם, עם מנעולים שפגים מעצמם ומשוחררים בבטחה על ידי הבעלים שלהם.

פקודה לתפיסה
1
פקודה לשחרור בטוח
1
סקריפטי Lua
0
צעד 1 מתוך 5
עובד A לוקח את המנעול

NX לוקח אותו רק אם אף אחד לא מחזיק בו. PX 30000 גורם לו לפוג תוך 30 שניות אם A מת.

סשן לדוגמהplaying
# עובד A לוקח את המנעול
hotkv> SET lock:billing-run tok-a81f NX PX 30000
OK

הדגמה מונפשת עם פקודות HotKV אמיתיות ותשובות לדוגמה. לחצו על כל שלב כדי לעבור אליו. הפקודות והתשובות נשארות באנגלית, בדיוק כפי שמקלידים ורואים ב-HotKV.

הבעיה

משימות cron על כמה מכונות, גבייה של תשלומים ובנייה מחדש של מטמון אסור שירוצו פעמיים בו זמנית. מנעול בלי תפוגה נשאר תפוס לנצח כשהבעלים שלו קורס, ושחרור מנעול עם DEL פשוט יכול למחוק את המנעול של מישהו אחר אחרי שהמנעול שלכם פג.

איך HotKV מטפל בזה

SET עם NX ו-PX תופס מנעול רק אם אף אחד לא מחזיק בו, ונותן לו תפוגה כדי שבעלים שקרס לא יוכל להחזיק בו לנצח. כל בעלים שומר אסימון אקראי כערך. DELEX עם IFEQ מוחק את המנעול רק אם הוא עדיין מחזיק את האסימון שלכם, וזה השחרור הבטוח שפעם דרש סקריפט Lua.

צעד אחר צעד

מה קורה, פקודה אחר פקודה

  1. 01

    עובד A לוקח את המנעול

    NX לוקח אותו רק אם אף אחד לא מחזיק בו. PX 30000 גורם לו לפוג תוך 30 שניות אם A מת.

    SET lock:billing-run tok-a81f NX PX 30000
  2. 02

    עובד B נדחה

    המנעול תפוס, ולכן B מקבל nil ומדלג על ההרצה הזו.

    SET lock:billing-run tok-b22c NX PX 30000
  3. 03

    A מבצע את העבודה

    רק עובד אחד מריץ את משימת החיוב.

    PTTL lock:billing-run
  4. 04

    משחררים רק את המנעול שלכם

    DELEX מוחק את המפתח רק אם הערך עדיין האסימון של A.

    DELEX lock:billing-run IFEQ tok-a81f
  5. 05

    אסימון שגוי לא עושה דבר

    אילו A היה איטי מדי ו-B החזיק עכשיו את המנעול, השחרור של A היה משאיר את המנעול של B במקומו.

    DELEX lock:billing-run IFEQ tok-stale
איפה זה מתאים

תרחישים מהעולם האמיתי

משימות מתוזמנות

אותו cron רץ בכל מופע, והמנעול מבטיח שבדיוק אחד מהם מבצע את העבודה.

תשלומים

פעולות גבייה והחזר על הזמנה אחת מסודרות בתור כך שאף פעם לא חופפות.

הגנה מפני cache stampede

רק בקשה אחת בונה מחדש רשומת מטמון יקרה בזמן שהאחרות ממתינות או מגישות את הערך הישן.

מובנה

מה מקבלים

תפיסה עם תפוגה

SET NX PX לוקח את המנעול רק אם הוא פנוי, עם פסק זמן.

SETNXPX

שחרור בטוח

DELEX IFEQ מוחק רק אם הערך תואם לאסימון שלכם.

DELEX

הארכה בזמן עבודה

בודקים את הזמן שנותר ומאריכים אותו למשימות ארוכות.

PTTLPEXPIRE

השוואה לפי תמצית

לערכים גדולים, DELEX IFDEQ משווה תמצית במקום הערך המלא.

DIGESTIFDEQ

שאלות נפוצות

למה לא סתם DEL על המנעול?

אם המנעול שלכם פג ועובד אחר לקח אותו, DEL פשוט היה מוחק את המנעול שלו. DELEX IFEQ מוחק אותו רק כל עוד הוא עדיין מחזיק את האסימון שלכם.

כמה זמן צריכה להיות התפוגה?

יותר ממה שהמשימה לוקחת בדרך כלל. למשימות ארוכות, מאריכים את התפוגה מדי פעם כל עוד מחזיקים במנעול.

האם צריך Lua לשחרור בטוח?

לא. DELEX מבצע את ההשוואה והמחיקה בפקודה אחת.

שימושים קשורים

נסו על עומס העבודה שלכם

HotKV מדבר את פרוטוקול Redis, ולכן אפשר להפנות אליו לקוח קיים ולהריץ את אותן פקודות.