מאחורי הקלעים
שני אנשים, משבצת אחת, אותה שנייה: איך אין תור כפול
נשארה משבצת אחת פנויה. שני לקוחות מחייגים בדיוק באותו רגע. מה קורה? זו הסיטואציה שהורסת יומנים.
תארו לעצמכם: נשארה משבצת אחת פנויה ביום חמישי בחמש. שני לקוחות מחייגים בדיוק באותו רגע, שניהם רוצים אותה. מה קורה?
זו בדיוק הסיטואציה שהורסת יומנים. תור כפול הוא לא רק תקלה טכנית — הוא שני לקוחות שמגיעים לאותה שעה, אחד מהם נשלח הביתה, ובושה גדולה לעסק. לכן "אפס תורים כפולים" הוא לא סיסמה אצלנו. הוא דרישה.
איך מבטיחים את זה? הדרך הנאיבית היא לבדוק "האם המשבצת פנויה?" ואז לרשום. הבעיה: בין הבדיקה לרישום עוברות אלפיות שנייה, ובדיוק שם שתי שיחות יכולות להשתחל, ושתיהן "לראות" פנוי.
הפתרון שלנו לא נשען על תזמון ולא על מזל. הוא יושב עמוק, בשכבת מסד הנתונים עצמה. המשבצת ננעלת ברמה שבה פשוט אי אפשר לכתוב אותה פעמיים. הראשון שמגיע — תופס. השני, גם אם פספס בהפרש של רגע, נדחה מיד. זו לא הבטחה של "ננסה לא לעשות כפול", זו מניעה ודאית: המבנה של הנתונים לא מאפשר לשתי הזמנות לחיות באותו מקום.
והכי יפה — הלקוח השני לא נשאר תקוע. באותה שיחה ממש הוא שומע: "המשבצת הזו כרגע נתפסה, אבל יש לי חמש עשרה או חמש וחצי". הוא בוחר, סוגר, וממשיך הלאה. הוא אפילו לא יודע שהתחולל מרוץ מאחורי הקלעים.
הרבה מהעבודה הכי חשובה במערכת כזו היא בדיוק זה: דברים שהמשתמש לעולם לא רואה, כי הם עובדים. תור כפול שלא קרה הוא ההישג — ופשוט אין לו איך להופיע בסוף החודש, כי הוא נמנע מראש.