תוכן העניינים[להתחבא][הופעה]
- 1. למה אתה מתכוון בעיצוב מערכת?
- 2. מהם המאפיינים החשובים ביותר של מעצב מערכת?
- 3. מהו בעצם משפט CAP?
- 4. מה אתה מבין באיזון עומסים?
- 5. מה ההבדל בין תכנות אסינכרוני לתכנות מקבילי?
- 6. מה ההבדל בין קנה מידה אופקי ואנכי?
- 7. למה בדיוק אתה מתכוון ב-latency, תפוקה וזמינות מערכת?
- 8. מהן תכונות ה-ACID?
- 9. מה זה בעצם ריסוק?
- 10. מהו CDN?
- 11. למה להשתמש ב-CDN?
- 12. מה ההבדל בין ריסוק לחלוקה?
- 13. מה זה בעצם מטמון?
- 14. מהם שרתי CDN Edge?
- 15. מהם דפוסי העקביות השונים לתכנון מערכת?
- 16. למה אתה מתכוון בנעילה אופטימית?
- 17. למה בדיוק אתה מתכוון ב"בחירת מנהיג"?
- 18. מהי הגישה שלך לעיצוב שירות קיצור כתובת URL דמוי TinyURL?
- 19. מה הגישה שלך לעיצוב טוויטר?
- 20. צור את מערכת הניוזפיד לפייסבוק
- 21. מהו מאפיין BASE של מערכת?
- 22. מהי איזון עומסים עם טכניקת זיקה של כתובות IP?
- 23. מה הם בעצם אלגוריתמים של החלפת מטמון (או מדיניות פינוי)?
- 24. למה בדיוק אתה מתכוון בעסקה מבוזרת?
- 25. מה זה בעצם הרעבה?
- סיכום
לפני שתתחיל, אנו ממליצים לקרוא את שלנו מדריך מבוא על עיצוב מערכת כדי לרענן את הידע הבסיסי שלך.
כאשר מתראיינים למשרה הדורשת ידע בתכנון מערכת, יש לך הזדמנות לדבר על הרקע שלך ולהפגין את יכולתך לפתח מערכות מסובכות.
כשאתה מדבר עם מעסיק פוטנציאלי, האופן שבו אתה מביע את המומחיות שלך עשוי לסייע לך להוכיח שאתה מועמד כשיר לתפקיד.
אתה יכול להתכונן לראיון העבודה שלך על ידי לימוד מושגי עיצוב בסיסיים וחשיבה כיצד תגיב לפניות לגביהם. נעבור על כמה שאלות ותשובות טיפוסיות לראיונות עיצוב מערכת בפוסט זה כדי לעזור לך להתכונן לראיון הבא שלך.
1. למה אתה מתכוון בעיצוב מערכת?
תהליך ביסוס מאפייני המערכת הכוללים מודולים, ארכיטקטורה, רכיבים והממשקים שלהם ונתונים המבוססים על קריטריונים שנקבעו מראש מכונה עיצוב מערכת.
זהו תהליך של הגדרה, יצירה ועיצוב של מערכות כדי לעמוד ביעדים וביעדים הספציפיים של חברה או ארגון. עיצוב מערכת עוסק יותר בניתוח מערכת, דפוסים ארכיטקטוניים, ממשקי API, דפוסי עיצוב והדבקה של הכל יחד מאשר בקידוד.
2. מהם המאפיינים החשובים ביותר של מעצב מערכת?
- אינטראקציה של המשתמש
- קריאת API חיצונית
- תהליכים לא מקוונים
3. מהו בעצם משפט CAP?
לפי משפט CAP (Consistency-Availability-Partition Tolerance), מערכת מבוזרת לא יכולה להבטיח את C, A ו-P כולן בו זמנית. זה יכול לספק רק שניים מתוך שלוש הבטחות לכל היותר. בואו נשתמש במערכת מסד נתונים מבוזרת כדי לעזור לנו להבין זאת.
- עקביות: זה מציין שהנתונים חייבים להישאר עקביים לאחר השלמת עסקת מסד נתונים. לדוגמה, כל השאילתות צריכות להחזיר את אותה תגובה לאחר עדכון מסד הנתונים.
- זמינות: מאגרי המידע חייבים להיות זמינים ומגיבים בכל עת.
- סובלנות למחיצות: גם אם התקשורת הופכת לבעייתית, מערכת מסד הנתונים צריכה להמשיך לעבוד.
4. מה אתה מבין באיזון עומסים?
איזון עומסים הוא תהליך של פיזור יעיל של תעבורה נכנסת בין קבוצה של שרתי קצה. אלה מכונים בריכות שרתים. אתרים מודרניים בנויים לטפל במיליוני שאילתות מלקוחות ולהגיב להן במהירות ובאמינות. יהיה צורך בשרתים נוספים כדי להתמודד עם הדרישות הללו.
במקרה זה, חיוני לחלק את תעבורת הבקשות ביעילות בין כל שרת כדי למנוע עומס יתר. מאזן העומס מתפקד כשוטר תעבורה, מיירט בקשות ומנתב אותן בין שרתים זמינים כך שאף שרת לא יעומס יתר על המידה, מה שעלול לפגוע בביצועי האפליקציה.
5. מה ההבדל בין תכנות אסינכרוני לתכנות מקבילי?
כאשר אתה מריץ משהו באופן אסינכרוני, זה מרמז שאתה לא צריך לחכות עד שהוא יסתיים לפני שאתה יכול להמשיך למשהו אחר. מקביליות מתייחסת לביצוע בו-זמנית של משימות רבות.
כאשר אתה יכול לחלק עבודות לחלקים שונים של עבודה, מקביליות עובדת ביעילות. Async ו-Callbacks הם אמצעי (כלי או מנגנון) לייצוג במקביליות, כלומר קבוצה של ישויות שיכולות לתקשר ולשתף משאבים.
6. מה ההבדל בין קנה מידה אופקי ואנכי?
התוספת של ציוד מחשוב חדש לרשת המפזרת את דרישת העיבוד והזיכרון על פני רשת מפוזרת של מכשירים מכונה קנה מידה אופקי. במילים פשוטות, מופעי שרת חדשים מתווספים למאגר הנוכחי, ועומס התעבורה מתפזר ביעילות בין המכשירים הללו.
קנה מידה אנכי מתייחס לרעיון של הרחבת קיבולת המשאבים של מחשב בודד על ידי הוספת זיכרון RAM, מעבדים יעילים או מעבר למכונה חדשה בעלת קיבולת גבוהה יותר. ניתן להגדיל את הפונקציונליות של השרת ללא צורך בשינויי תכנות.
7. למה בדיוק אתה מתכוון ב-latency, תפוקה וזמינות מערכת?
ביצועים הם היבט חיוני בתכנון המערכת מכיוון שהם תורמים למהירות ולאמינות השירותים שלנו. שלושת מדדי הביצוע החשובים ביותר הם כדלקמן:
- הזמן שלוקח להעביר הודעה בודדת באלפיות שניות נקרא חביון.
- כמות הנתונים שהועברה בהצלחה דרך מערכת בפרק זמן מסוים מכונה תפוקה. סיביות לשנייה משמשות למדידתו.
- משך הזמן שמערכת זמינה להגיב לשאילתות מוגדר על פי הזמינות שלה. זמן פעילות מערכת / (זמן פעילות+זמן השבתה) היא הנוסחה לחישובו.
8. מהן תכונות ה-ACID?
- אטומיות: זה מבטיח ששינויים במסד הנתונים הם כולם או לא.
- עקביות: ערכי הנתונים במסד הנתונים עקביים.
- בידוד: זה מתייחס להפרדה של שתי עסקאות.
- עמידות: הנתונים נשמרים גם אם השרת נכשל.
9. מה זה בעצם ריסוק?
Sharding היא הטכניקה של חלוקת מערך נתונים לוגי ענק למסדי נתונים רבים. זה מתייחס גם לפיצול נתונים אופקי מכיוון שהנתונים יאוחסנו במספר מחשבים. כתוצאה מכך, מסד נתונים משותף יכול להתמודד עם יותר שאילתות ממחשב ענק בודד.
10. מהו CDN?
רשת מסירת תוכן היא רשת עולמית של מחשבים המשתפת פעולה כדי לספק מידע אינטרנט במהירות. זה מאפשר אספקה מהירה של אלמנטים כמו דפי HTML, קובצי JavaScript, גיליונות סגנונות, תמונות וסרטוני וידאו הדרושים לטעינת תוכן אינטרנט.
11. למה להשתמש ב-CDN?
- בהתחשב במשאבים סטטיים מהווים כ-80% מאתר אינטרנט, אימוץ CDN מפחית באופן משמעותי את העומס על שרת המקור.
- מכיוון שיש פחות מרחק לנסיעה, המידע יסופק מהר יותר לבעלי אתרים שיש להם מבקרים מאזורים גיאוגרפיים רבים.
- משתמשי CDN גם נהנים מהיכולת להגדיל ולהקטין במהירות בתגובה לעליות התעבורה.
12. מה ההבדל בין ריסוק לחלוקה?
פיצול מסדי נתונים - פיצול מסדי נתונים היא שיטה לחלוקת מערך נתונים בודד למספר רב של מסדי נתונים, כך שניתן לאחסן אותו בתחנות עבודה שונות. ניתן לחלק מערכי נתונים גדולים יותר לנתחים קטנים יותר ולאחסן במספר צמתי נתונים, מה שמגדיל את קיבולת האחסון הכוללת של המערכת.
על ידי הפצת הנתונים על פני מכונות רבות, מסד נתונים משותף יכול להתמודד עם יותר שאילתות ממערכת אחת.
חלוקת מסד נתונים היא תהליך של חלוקת אובייקטי מסד נתונים מאוחסנים (טבלאות, אינדקסים ותצוגות) לחלקים נפרדים. כדי להגביר את יכולת השליטה, הביצועים והזמינות, אובייקטי מסד נתונים גדולים מחולקים למחיצות.
במקרים מסוימים, חלוקה למחיצות יכולה לשפר את המהירות בעת גישה לנתונים מחולקים. חלוקה יכולה להקטין את גודל האינדקס ולהגדיל את הסיכוי לאתר את האינדקסים הנחוצים ביותר בזיכרון על ידי פעולה כעמודה מובילה באינדקסים.
13. מה זה בעצם מטמון?
מטמון הוא הטכניקה של שמירת עותקי קבצים באזור אחסון זמני המכונה מטמון, מה שמאיץ את הגישה לנתונים ומפחית את זמן האחזור לאתר. ניתן לאחסן רק כמות מסוימת של נתונים במטמון.
כתוצאה מכך, קביעת טכניקות עדכון המטמון המתאימות ביותר למטרות העסקיות היא קריטית.
14. מהם שרתי CDN Edge?
שרתי ה-CDN המאחסנים חומר שנרכש משרת המקור או מאשכול האחסון שלך ידועים בתור שרתי קצה. נקודת נוכחות היא מונח המשמש לעתים קרובות לתיאור שרתי קצה (POP).
שרתי הקצה ממוקמים פיזית ב-POP. באותו POP, מידע עשוי להיות מאוחסן במטמון על ידי שרתי קצה רבים.
היכולת לספק קטעים באתר מכמה מקומות מקטינה את המרחק בין המבקר לשרת האינטרנט, וכתוצאה מכך חביון נמוך יותר. שרתי CDN Edge משיגים את המטרה המדויקת הזו.
15. מהם דפוסי העקביות השונים לתכנון מערכת?
כל בקשת קריאה צריכה לאחזר את הנתונים שנכתבו לאחרונה, על פי משפט CAP. כאשר עותקי נתונים רבים נגישים, סנכרון שלהם כך שלקוחות יקבלו נתונים טריים על בסיס רציף הופך לקושי. להלן דפוסי העקביות האפשריים:
- עקביות חלשה: בעקבות כתיבת נתונים, ייתכן שבקשת הקריאה תוכל לקבל את הנתונים המעודכנים או לא. רמת יציבות זו אידיאלית עבור יישומים בזמן אמת כגון VoIP, וידאו צ'אט ומשחקים מרובי משתתפים.
- עקביות בסופו של דבר: קריאה תציג בסופו של דבר את הנתונים העדכניים ביותר תוך אלפיות שניות לאחר כתיבת הנתונים. הנתונים משוכפלים באופן אסינכרוני במקרה זה. מערכות DNS ודוא"ל הן דוגמאות לכך. זה עובד ביעילות במערכות עם זמינות גבוהה.
- עקביות חזקה: בעקבות כתיבת נתונים, קוראים עתידיים יראו את הנתונים העדכניים ביותר. הנתונים מועתקים באופן סינכרוני במקרה זה. ניתן לראות זאת ב-RDBMS ובמערכות קבצים, המתאימות להעברת נתונים.
16. למה אתה מתכוון בנעילה אופטימית?
נעילה אופטימית היא מנגנון שבו אתה קורא רשומה, מציין מספר גרסה (דרכים חלופיות כוללות תאריכים, חותמות זמן או סכומי בדיקה/גיבושים), ולאחר מכן בודקים שוב שהגרסה לא השתנתה לפני כתיבתה בחזרה.
כשאתה כותב את הרשומה בחזרה, אתה משתמש בגרסה כדי לסנן את העדכון כדי לוודא שהוא אטומי. (כלומר, לא השתנה בין בדיקת הגרסה לבין כתיבת הרשומה לדיסק) ועדכן את הכל בבת אחת.
17. למה בדיוק אתה מתכוון ב"בחירת מנהיג"?
במערכת מבוזרת עם שרתים רבים התורמים לזמינות האפליקציה, יכולים להיות מקרים שבהם רק שרת אחד אחראי על עדכון ממשקי API של צד שלישי, מכיוון ששרתים מרובים עלולים לגרום לבעיות בעת שימוש בממשקי API.
שרת זה ידוע בתור השרת הראשי, וההליך לבחירתו מכונה בחירת מנהיג. כאשר שרת המנהיג נכשל במערכת מבוזרת, על השרתים לשים לב לכשל ולבחור מנהיג חדש. באמצעות טכניקת קונצנזוס, גישה זו מתאימה ביותר עבור יישומי זמינות גבוהה ועקביות חזקה.
18. מהי הגישה שלך לעיצוב שירות קיצור כתובת URL דמוי TinyURL?
TinyURL הופך כתובת URL ארוכה לכתובת URL קצרה יחידה וייחודית. טכנולוגיות אלו יכולות גם לקבל כתובת URL קצרה ולהחזיר את כתובת האתר המלאה.
מהן כמה מהתכונות המכריעות?
- צור כתובת אתר קצרה יותר מהמקור.
- שמור את כתובת האתר הארוכה יותר והחלף אותה באחת הקצרה יותר.
- אפשר הפנייה בכתובות URL קצרות.
- כתובות URL קצרות עם שמות מותאמים אישית נתמכות.
- לטפל במספר פניות בבת אחת.
מהן הבעיות הנפוצות ביותר?
- איך עוקבים אחר אחסון מסדי הנתונים?
- מה קורה אם עומס המשתמש עולה על הציפיות?
- מה אם שני אנשים משתמשים באותה כתובת אתר מותאמת אישית?
שקול את ההצעות הבאות:
- Hashing הוא רעיון שניתן להשתמש בו כדי לחבר כתובות URL ישנות וחדשות.
- REST API יכול לשמש לטיפול בתקשורת חזיתית ולאזן את העומס הרב.
- ריבוי פתילים הוא רעיון המאפשר לך לטפל במספר בקשות בו זמנית.
- כתובות URL מקוריות מאוחסנות במסדי נתונים של NoSQL.
19. מה הגישה שלך לעיצוב טוויטר?
הדרישות שניתנו:
- שולח ציוצים
- עוקב אחר משתמשים אחרים
- עדכון ציוץ/ניוזפיד
- המערכת ניתנת להרחבה
- עומס במהירות
- המערכת אמינה
אתה יכול להתחיל לחשוב על עיצוב ה-API שלך של Twitter לאחר שתקבע את הקריטריונים. כך זה ייראה:
כדי להתחיל, נשרטט את נקודות הקצה העיקריות של ה-API. הנה כמה דוגמאות:
- sendTweet(הודעה)
- followUser(UserID)
- unfollowUser(UserID)
- getFeed(עמוד)
לאחר מכן ניתן לשרטט את הארכיטקטורה שתאפשר את המאפיינים הללו. אנחנו יכולים להתחיל עם המשתמש ששולח בקשת שרת. אנו יכולים להתקין שרתי API נוספים מאחורי מאזן עומסים כדי לסייע בנתיב רמות תעבורה גדולות יותר כדי למלא את הצורך המדרגיות. נצטרך להוסיף מסד נתונים כדי לאחסן את הציוצים שלנו עכשיו.
חשוב לזכור שה-API שאנו מספקים צריך להיות ניתן להרחבה. כדי להפוך את השירות הזה למדרגי, אנחנו יכולים לקרוא לאחד משרתי ה-API שלנו ממטמון נפרד עבור ה-newsfeed שלנו. תוך כדי כך, עלינו להשתמש גם בספק עדכון כדי לשמור על מטמון העדכון שלנו מעודכן.
20. צור את מערכת הניוזפיד לפייסבוק
הניוזפיד בפייסבוק מאפשר למשתמשים לראות מה קורה במעגלי החברים שלהם, בדפים המועדפים ובארגונים שהם עקבו אחריהם.
מהם כמה מהמאפיינים החיוניים?
- צור ניוזפיד המבוסס על פוסטים של ישויות מערכת אחרות שהמשתמש עוקב אחריהן.
- ניתן להשתמש בטקסט, תמונות, אודיו ווידאו בפוסטים בניוזפיד.
- בזמן אמת, הוסף תוכן חדש לניוזפיד של המשתמש.
מהן כמה מהבעיות הנפוצות ביותר?
- מה אם לפוסט החדש לוקח הרבה זמן להופיע בפיד החדשות?
- האם האלגוריתם יכול לנהל עלייה בפעילות המשתמש?
- אילו פוסטים צריכים להיות מוצגים תחילה בפיד החדשות?
שקול את ההצעות הבאות:
- בדוק את מנגנון ה-fanout להפצת פוסטים לעוקבים.
- בדוק כיצד ניתן להשתמש בריסוק כדי להתמודד ביעילות עם עומסי משתמשים גבוהים.
- אין לשכפל נתוני עדכון של משתמש במספר שרתים. במקום זאת ניתן לבצע חלוקה על סמך מזהי משתמש.
21. מהו מאפיין BASE של מערכת?
תכונות BASE נמצאות בכל מקום במסדי נתונים של NoSQL שהופיעו לאחרונה. מערכת BASE אינה מספקת עקביות, לפי משפט CAP. זהו ראשי תיבות מורכב התואם את התכונה הבאה של משפט CAP של מערכת:
- המונח "זמינה באופן בסיסי" פירושו שהמערכת תהיה זמינה בכל עת.
- מצב רך פירושו שמצב המערכת יכול להשתנות לאורך זמן, גם אם לא מסופק קלט. זה נובע בעיקר מהעקביות הסופית של הדגם.
- בהתחשב בכך שהמערכת לא מקבלת קלט במהלך אותה תקופה, עקביות בסופו של דבר פירושה שהמערכת תהפוך לעקבית לאורך זמן.
22. מהי איזון עומסים עם טכניקת זיקה של כתובות IP?
שיטה בולטת נוספת לאיזון עומסים היא זיקת כתובת IP. כתובת ה-IP של הלקוח מחוברת לצומת שרת בשיטה זו. צומת שרת אחד מטפל בכל הבקשות מכתובת IP של לקוח.
שיטה זו פשוטה ליישום מכיוון שכתובת ה-IP תמיד נגישה בכותרת בקשת ה-HTTP ואין צורך בהגדרות נוספות. אם סביר להניח שללקוחות שלך ישביתו קובצי Cookie, צורה זו של איזון עומסים יכולה להיות מועילה.
23. מה הם בעצם אלגוריתמים של החלפת מטמון (או מדיניות פינוי)?
אלגוריתמי מטמון (הידועים גם כאלגוריתמים להחלפת מטמון, מדיניות החלפת מטמון או מדיניות פינוי מטמון) הם הוראות אופטימיזציה, או אלגוריתמים, שתוכנית מחשב או מבנה מתוחזק בחומרה יכולים להשתמש בהם כדי לנהל מטמון של נתונים המאוחסנים במחשב.
אחסון במטמון מגביר את המהירות על ידי אחסון נתונים שנעשה בהם שימוש לאחרונה או שאליו ניגשו אליהם לעתים קרובות באזורי זיכרון שהגישה אליהם מהירה או זולה יותר מאחסון זיכרון מסורתי. כאשר המטמון מלא, האלגוריתם חייב להחליט אילו פריטים להסיר כדי ליצור מקום לחדשים.
24. למה בדיוק אתה מתכוון בעסקה מבוזרת?
עסקה מבוזרת היא כל נסיבות שבה אירוע בודד גורם לשינוי של שני מקורות נתונים נפרדים או יותר שאינם ניתנים לביצוע באופן אטומי.
זה הופך להיות הרבה יותר מסובך בעולם המיקרו-שירותים שכן כל שירות הוא יחידת עבודה, ורוב הזמן שירותים רבים חייבים לשתף פעולה כדי להצליח בעסק.
25. מה זה בעצם הרעבה?
כאשר שרשור אינו מסוגל להשיג גישה קבועה למשאבים משותפים, אומרים שהוא מורעב. זה קורה כאשר שרשורים "חמדנים" או שרשורים בעלי "עדיפות גבוהה יותר" הופכים משאבים משותפים ללא נגישים לפרקי זמן ארוכים.
שקול אובייקט המספק שיטה מסונכרנת שחוזרת לעתים קרובות מאוחר. אם שרשור אחד קורא לשיטה זו שוב ושוב, שרשורים אחרים הדורשים גישה מסונכרנת תכופה לאותו אובייקט ייחסמו לעתים קרובות.
סיכום
סיעור מוחות הוא כל מה שכרוך בראיון עיצוב המערכת. התייחסנו לשאלות הראיונות הנפוצות ביותר של עיצוב מערכת בפוסט זה.
הבנה מקיפה של השיטה שאתה נוקט בעת יצירת מערכת ספציפית היא קריטית למעבר ראיון לעיצוב מערכת.
השאירו תגובה