המאמר הבא הוא תמצית מהסעיף 1 של ביצועי מסד נתונים בקנה מידה (ספר גישה פתוחה זמין בחינם) עקבו אחר הרפתקאותיו של ג'ואן עם כמה אתגרים של ביצועי מסד נתונים אמיתיים מדי.הייתם צוחקים.הייתם בוכים.הייתם תוהים איך עבדנו את "הסיפור המזין" הזה בספר טכני עמוק. ביצועי מסד נתונים בקנה מידה מושכת על ידי מילים מרשימות כגון "ענן היברידי", "ללא שרת" ו"קצה ראשון", ג'ואן הצטרפה בקלות לחברה חדשה והחלה לתפוס את קערת הטכנולוגיה שלה.הפרויקט הראשון שלה החל לאחרונה את המעבר מהיישום הפנימי שלהם של מערכת מסדי נתונים, אשר התברר לא להגדיל באותו קצב כמו מספר הלקוחות, לאחד פתרונות ניהול מסדי נתונים הסטנדרטיים בתעשייה. הבטחות ידועות בעולם SQL. חומצה בשל מספר חוקים חדשים להגנה על נתונים המופיעים מדי שנה כיום, הועדה החליטה כי החברה תשמור על מרכז הנתונים שלה, במקום להשתמש באחד ספקי הענן הפופולריים לאחסון מידע רגיש. ברמה גבוהה מאוד, המוצר העיקרי של החברה מורכב משני שכבות בלבד: החזית, נקודת הכניסה למשתמשים, אשר למעשה פועלת בדפדפנים שלהם ותתקשר עם שאר המערכת כדי להחליף ולשמור על מידע. הכל-לכן, הידוע בדרך כלל בשם "בסקנד", אבל למעשה כולל איזון עומס, אימות, אישור, שכבות קח מרובות, מסדי נתונים, גיבוי וכדומה. המשימה הראשונה של ג'ואן הייתה ליישם שירות פשוט מאוד לאיסוף וסיכום סטטיסטיקות שונות ממסד הנתונים, ולשלב את השירות הזה עם כל האקולוגיה, כך שהוא לוקח נתונים ממסד הנתונים בזמן אמת ומאפשר לצוותים של DevOps לבדוק את הסטטיסטיקות באופן חי. כדי להרשים את ההנהלה ולהבטיח להם כי שכירת ג'ואן הייתה ההחלטה הטובה ביותר שלהם ברבעון הזה, ג'ואן החליטה לספק יישום מוכח של מושג ביום הראשון שלה! היום עבר בצורה מאוד חלקה, עם מערכת האקולוגיה המתמקדת באורגנומיה של רוסט המספקת חוויה מעולה למפתחים.אבל אז ג'ואן ביצעה את בדיקות העשן הראשונות שלה על מערכת אמיתית.החוסר אמון הפך לאכזבה וחוסר אונים כאשר היא הבינה כי כל בקשה שלישית (בממוצע) הסתיימה בטעות, למרות שכל קבוצת הנתונים דיווחה להיות במצב בריא ומפעיל. למרבה הצער, נהג ג'ואן בחר במהירות את היסוד של עבודתה, אף על פי שהקוד הפתוח בעצמו, היה רק חבילה רזה על קוד C מורכב מראש, עם שום מקור לא נמצא. והיא עשתה ציפייה חינוכית כי במסד הנתונים המשמש על-ידי החברה, מפתחות מאוחסנות לבקשות מסלול מאוחרות יותר לקוטות מתאימות.אם ערך hash מחושב לא נכון, בקשה עשויה להיות מועברת לקוטה הלא נכונה שיכולה לסרב לה ולהחזיר שגיאה במקום. Wiresharkעריכה באג חייב להיות ביישום המפתח hashing לא הצליחה לאמת את הטענה בשל היעדר קוד מקור, ג'ואן החליטה בדרכה פשוטה יותר - לוותר על מנהל התקן שנבחר במקור וליישם מחדש את הפתרון באחד מנהלי התקן המומלצים באופן רשמי, קוד פתוח נתמך על ידי ספקית הנתונים, עם בסיס משתמשים מוצק ותזמון שחרור מעודכן באופן קבוע. יומן השיעורים של ג'ואן, חלק I השיעורים הראשונים כוללים: בחר מנהל התקן בקפידה.זה בבסיס הביצועים, העמידות והאמינות של הקוד שלך. גם לנהגים יש פגמים, ואי אפשר להימנע מהם. אלא אם כן יש סיבה טובה, העדיפו את הנהג המומלץ באופן רשמי (אם קיים); לנהגי קוד פתוח יש יתרונות: הם לא רק נבדקים על ידי הקהילה, אלא גם מאפשרים בדיקה עמוקה של הקוד שלה, ואפילו שינוי של קוד הנהג כדי לקבל יותר תובנות עבור דיבוג; עדיף להסתמך על נהגים עם לוח זמנים שנקבע היטב משום שהם צפויים לקבל תיקונים של שגיאות (כולל עבור פגיעות אבטחה) בתוך תקופה סבירה של זמן. Wireshark הוא כלי קוד פתוח נהדר לתרגם חבילות רשת; לנסות את זה אם אתה רוצה להסתכל מתחת לכובע של התוכנית שלך. המשימה המובילה הושלמה בסופו של דבר בהצלחה, מה שהכין את ג'ואן מוכנה לקבל את המשימה הראשונה שלה. הטונינג חמושים עם הניסיון שנרכש בעבודה על המשימה המובילה, ג'ואן החלה לתכנן כיצד להתקרב למשימה החדשה שלה: אפליקציית התנהגות לא נכונה.אחת מהאפליקציות גרמה לבעיות יציבות עבור המערכת כולה, הפרת עומסי עבודה אחרים בכל פעם שהיא נתקלת בבעיות.האפליקציית הונאה כבר הייתה מבוססת על נהג נתמך רשמית, כך שג'ואן יכלה לחצות את זה מתוך הרשימה של גורמים שורשיים פוטנציאליים. שירות מסוים זה היה אחראי על הזרקת נתונים מאוחסנים מהמערכת העתיקה לתוך מסד הנתונים החדש. מכיוון שהחברה לא הייתה בהמהרה רבה, היישום נכתב עם תואם נמוך במוח כדי להיות בעל עדיפות נמוכה ולא להפריע עומסי העבודה של המשתמשים. למרבה הצער, פעם בכל כמה ימים משהו המשיך להפעיל פגיעה. יישום רגיל שקט נראה מנסה לבצע התקפה דחיית שירות על מסד הנתונים שלו, מדליף אותו עם בקשות עד שהקצה האחורי היה מוגזם מספיק כדי לגרום לבעיות עבור חלקים אחרים של האקולוגיה. כשג'ואן ראתה את המדידות המוצגות בדפדפן של Grafana, שהצביעו בבירור על כך שהשיעור של בקשות שנוצרו על-ידי יישום זה התחיל לעלות בסביבות הזמן של ההפרעה, היא תוהה איך על כדור הארץ עומס העבודה הזה יכול להתנהג כך. מאז שיתוף הפעולה היה מפורסם כאחד "הבסיסים הרוחניים והתרבותיים" של החברה במהלך הפגישות עם מאמן במקום, היא החליטה שזה הכי טוב לדון בעניין עם עמיתה, טוני. "תראו, טוני, אני לא יכולה לסובב את הראש סביב זה," היא הסבירה. "השירות הזה לא שולח בקשות חדשות כאשר 100 מהם כבר בטיסה. "בסדר, תודה טוני, אתה יקר - הטוב ביותר תמיד!", היא הסתיימה וחזרה לתקן את הקוד. דוב גומי התצפית שהובילה לגלות את הגורם השורש היתה פשוטה למדי: הבקשה לא באמת *חזירה* שגיאה בזמן כי שרת הנתונים מעולם לא שלח בחזרה תשובה כזו. הבקשה הייתה פשוט מוסמכת כמתוכננת על-ידי הנהג, והושמדה. אבל העובדה היחידה שהנהג כבר לא מחכה לתשובה על בקשה מסוימת אינה אומרת שהבסיס מעבד אותה! עם הידע הזה, קל לדמיין שכאשר 100 בקשות עברו את הזמן בצד הלקוח, ייתכן שהאפליקציה חושבת בטעות כי הן אינן מתקדמות יותר, ומשלחת בשמחה 100 בקשות נוספות למסד הנתונים, הגדילה את המספר הכולל של בקשות בטיסה (כלומר, תרומה) ל-200. יומניו של ג'ואן של השיעורים שלמד, חלק 2 השיעורים ממשיכים : לוחות זמנים בצד הלקוח נוחים עבור מתכנתים, אבל הם יכולים לקיים אינטראקציה גרועה עם זמני זמנים בצד השרת. חוק האצבע: להפוך את זמני זמני זמני בצד הלקוח כפול מאשר זמני זמני בצד השרת, אלא אם יש לך סיבה טובה מאוד לעשות אחרת. מטלות עם תדירות קבועה לכאורה יכולות למעשה לגרום לשיאים בתנאים בלתי צפויים מסוימים.בדיקה של יומנים וטרינרים מועיל בחקירת מקרים כאלה, לכן ודא כי כלים תצפיות זמינים הן בקבוצת מסדי הנתונים והן עבור כל יישומי הלקוח. עם התאריכים בצד הלקוח ששינו כראוי, היישום נסחף הרבה פחות לעתים קרובות במידה קטנה יותר, אבל הוא עדיין לא היה אזרח מושלם במערכת המופצה. הוא בחר מדי פעם כפתור מסד נתונים של קורבן וממשיך להטריד אותו עם בקשות רבות מדי, תוך התעלמות מהעובדה שבעה כפתורים אחרים היו מטופלים באופן משמעותי פחות ויכולים לעזור להתמודד עם עומס העבודה גם כן. בזמנים אחרים, ההתאמה שלו דווחה להיות בדיוק 200% גדול יותר ממה שציפיתי על ידי התצורה. בכל פעם שהשני הבדלים התכנסו בזמן, הכפתור הרע לא היה מסוגל להתמודד עם כל הבקשות שהוא היה פוצץ, והיה צריך לוותר על חלק הוגן מהם. פורמט ושמר עדכניים באופן סביר, עזר ג'ואן להקל על הכאבים האלה גם. mdbook הבעיה הראשונה הייתה פשוט תצורה שגויה של מדיניות איזון עומס שאינה מותאמת כברירת מחדל, אשר ניסתה קשה מדי כדי לבחור את "הנקודה הנמוכה ביותר" של מסד הנתונים מתוך כל אלה זמינים, בהתבסס על heuristics וסטטיסטיקה מעת לעת עדכון על ידי מסד הנתונים עצמו. למרבה הצער, מדיניות זו הייתה גם "המאמץ הטוב ביותר", והסתמך על העובדה כי הסטטיסטיקות שמגיעות מהבסיס הנתונים היו תמיד חוקיות - אבל כף מסד נתונים מתוחכמת עלולה להיות כל כך מוגזמת שהיא לא שלחה חזרה סטטיסטיקות מעודכנות בזמן! הבעיה השנייה (הכפילת זמנית של המטבע המשותף) נגרמת על ידי טעות נוספת: מדיניות חזרה ספציפית מוגזמת. לאחר שמחכים לתקופה מוקדמת של זמן מבלי לקבל אישור מהבסיס הנתונים, נהגים היו שולחים מחדש בקשה כדי למקסם את סיכויי ההצלחה שלה. מנגנון זה שימושי מאוד כדי להגדיל את שיעור ההצלחה של בקשות. עם זאת, אם הבקשה המקורית גם מצליחה, זה אומר שהבקשה המקורית נשלחה לשווא. על מנת לאזן את היתרונות והחסרונות, יש להגדיר את חזרה ספציפית כדי לממן בקשות רק אם זה מאוד סביר כי הבקשה המקורית נכשלה. אחרת, כמו במקרה של ג'ואן, חזרה ספציפית עשויה לפעול Whew, שום דבר לא נותן זריזות אנדורפין דופמין בו זמנית כמו ישיבה חיתוך איכות שמסתיימת בהצלחה מדהימה (למעט כתיבת סיפור חריף בספר טכני עמוק, כמובן). את הסוף אם עשיתם את זה עד כה ואינכם יכולים להשיג מספיק סיפורי ביצועי מסד נתונים, ראו מה קרה לפטריק העני ב" ואם אתה מעריך את חוש ההומור הזה, ראה את פיוטר. . Editor’s note: סיפור על ביצועי מסד הנתונים: פטריק's Unlucky Green Fedoras ספר חדש על כתיבת פוסטים בלוג הנדסה