Table of Contents
מבוא
שאלות עיצוב מערכת פתוחות הן מרכיב עיקרי של ראיונות טכניים, במיוחד עבור תפקידים הנדסיים בכירים.בניגוד לבעיות אלגוריתמיות שיש להן תשובה אחת נכונה, שאלות אלה להעריך את היכולת שלך לאדריכל מערכת מורכבת תחת מגבלות מעורפלות. המפתח להצלחה אינו מרתיע פתרון מושלם, אלא בהצגת תהליך מחשבה מובנה וגמיש. זה התרחב באמצעות מסגרת מוכחת שניתן להתאים לכל תרחיש מערכת, מקיצור של כתובת URL אמיתית.
המאסטר גישה זו לא רק יגביר את ביצועי הראיון שלך, אלא גם יחדד את כישורי העיצוב של העולם האמיתי שלך. בואו לצלול לתוך כל צעד עם דוגמאות קונקרטיות ושיטות הטובות ביותר.
להבין את השאלה
לפני שתתחיל לצייר קופסאות וחץ, עליך להבין את הבעיה לעומק.רוב המועמדים ממהרים לפתרון, רק כדי להבין מאוחר יותר כי הם החמצו את ההקשר הקריטי.התחל על ידי הבהרת שאלות כדי להתאים לציפיות של המראיין.
קלמיר את סקוט ואת מטרות
שאל שאלות כמו: מי הם המשתמשים?מה המטרה העיקרית של המערכת? האם אנחנו צריכים להתמקד תכונה מסוימת (למשל, פרסום ציוץ) או את הפלטפורמה כולה? לדוגמה, אם התבקש לעצב אפליקציה לשיתוף אופניים, לאשר אם אתה צריך לכסות הנהג על הסיפון, התאמה בזמן אמת, עיבוד, תמחור, או רק את המנוע המתאים.
זיהוי Constraints
הבנת אילוצים שמעצבים את העיצוב שלך: מספר צפוי של משתמשים (למשל, מיליונים לעומת אלפי), נפח נתונים, הפצה גיאוגרפית, תקציב, ו-Time-to-market. A מערכת עבור סטארט-אפ עם 10,000 משתמשים שונה באופן דרסטי מאחד לרשת חברתית גלובלית.קלף אם אתה צריך להתאים לעקביות נמוכה, גבוה באמצעות חישוב, או עקביות חזקה.
הצלחה
שאל איך נראה הצלחה: האם זה מערכת עד 99.99%), זמן התגובה מתחת ל-200ms, או היכולת להתמודד עם יחס קריאה-טקס ספציפי? זה מבטיח לך עדיפות על ידי המסחר הנכון אחר כך.
לשבור את הבעיה
ברגע שיש לך תמונה ברורה, הניחו את המערכת למודולים שניתן לנהל.זה מונע מכם להיות מומים ומסייע לכם לכסות את כל ההיבטים החשובים.
זיהוי Core Components
רוב המערכות כוללות לקוחות, APIs, שרתי יישומים, מסדי נתונים, צ'יפים, תורים ואחסון.התחל עם רשימה פשוטה: ניהול משתמשים, צלקות תוכן, חיפוש, הזנות, הודעות, וכו ' עבור פלטפורמת הזרמת וידאו, רכיבי ליבה עשויים לכלול צינור, שירות transcoding, רשת משלוח תוכן (CDN), הפעלת API, המלצה ומנוע.
מפה Data Flow
שים לב לזרימת הנתונים העיקרית: מה קורה כאשר משתמש מבצע פעולה מרכזית?לטרו את הנתיב מהלקוח לשרת למסד נתונים ובחזרה.זהה היכן הנתונים נוצרים, מאוחסנים, מעובדים ונצרכים.זה יודיע בהמשך על בחירת מסדי נתונים ודפוסי תקשורת.
זיהוי אינטראקציות ותלויים
שימו לב כיצד רכיבים אינטראקציה - סינכרוני (REST, gRPC) לעומת תורים סינכרוניים (סגיל תורים, זרמי אירועים) תלותיים, כגון שירות הזמנה בהתאם לשירות תשלום, משפיעים על ניהול כשל וחוסנות.
דרישות Define ו-Constraints
באופן אקספונציאלי, הן דרישות פונקציונליות והן לא פונקציונליות.זה מראה שאתה יכול להפריד מה המערכת חייבת לעשות מאיך זה צריך לבצע.
דרישות פונקציונליות
רשימת התכונות שהמערכת חייבת לתמוך.עבור שירות אחסון קבצים כמו Dropbox, אלה כוללים: להעלות, להוריד, לשתף, לסנכרן על מכשירים, והיסטוריית הגירסה.עדיפות של חובה-ישבן על פני יפה-ל-ישים.
דרישות לא מצחיקות
אלה התכונות האיכותיות של המערכת.תכונות נפוצות כוללות:
- (ב) ⁇ :0) ,5 ⁇ : כיצד המערכת מטפלת בצמיחה של משתמשים או בנתונים?
- (ב) ,0) , ⁇ (ב) ,% (בדוגמא: 99.9% ניתן).
- (ב) ,0) , ויקרא: "ב"ה, ב-"ד, ב- 300 מיליון".
- (ב) [15] ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) סודיות (סעיף 1: 1): אישור, הצפנה.
- (ב) ,0) ,4 ,4 ,4 ,4 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
לדוגמה, אפליקציה בנקאית מעדנת את העקביות והביטחון על הסבלנות, בעוד שהזנת מדיה חברתית עשויה לקבל עקביות בסופו של דבר עבור רטיות נמוכה יותר.
תכונות Preitize
לא כל התכונות שוות.דרג אותן בחשיבותן להתמקד במאמצי העיצוב שלך. השתמש במריצה פשוטה:
- (ב) ,0) ,Must-veFLT:1: פונקציונליות הליבה שבלעדיה המערכת אינה מועילה.
- (ב) [ה]ההסברים: [ה] [ה]], [ה], [ה], [ה], [ה], [ה], [ה], [ה]], [ה], [ה], [ה], [ה], [ה], [ה], [ה],], [הההתקבלות], או תשובות], או תקשורות].
במהלך ראיונות, להתחיל עם חובה-ישים.אם הזמן מאפשר, אתה יכול לדון איך אתה להרחיב את העיצוב עבור תכונות נחמד-ל-יש.זה מראה שאתה יכול להתמודד עם עצירות מסחר ומשלוח מצטבר.
עיצוב אדריכלות גבוהה-Level
זה המקום שבו אתה מתרגמת דרישות לתוך מערכת בטון כחול הדפסה.התחל עם תרשים בלוק המציג רכיבים גדולים והקשרים שלהם.
בחרו סגנון אדריכלי
להחליט בין מונוליטי, מיקרו-שירותים, ארכיטקטורה מונחה אירוע או שכבתית.עבור מערכות קלאביליות, מיקרו-שירותים נפוצים אך באים עם מורכבות. עבור יישומים פשוטים יותר, גישה מונוליטית עם גבולות מודול ברורים יכול.
בחר Key Technologies
בעוד אתה לא צריך לבחור מוצרים מדויקים, לציין קטגוריות:
- סיבה לבחירות טכנולוגיות: SQL for Strong Complexency, NoSQL for גמישה Schemas, תורי הודעות עבור decoupling, CDN עבור תוכן סטטי.
- רקג בהתבסס על דרישות.לדוגמה, השתמש ב- PostgreSQL עבור נתונים דחוסים ו- Redis עבור caching כי המערכת זקוקה לעקביות ולמהירות.
עקבו אחרי a Diagram
Verbally מתאר מה היית מצייר: "משתמשים פגעו מאזן עומס, אשר מחכה לשרתי אינטרנט.שרתי האינטרנט קוראים שער API שדרכו לשירות המשתמש, שירות הדואר, שירות הודעות.שירותים מדברים עם מסדי הנתונים שלהם ומפרסמים הודעות לקקא לעיבוד אסימונים".
ניתן להתייחס לדפוסים משותפים מה-FLT:0 (AWS Well-Architected FrameworkFeloLT:1) כדי להראות מודעות לשיטות הטובות ביותר.
אחסון נתונים וניהול
עקשנות נתונים היא לעתים קרובות החלק הקריטי ביותר של עיצוב המערכת.דון כיצד אתה מאחסן, קורא, ושמירה על נתונים.
בחר מסד נתונים
- (הופנה מהדף LT:0)SQL (relational)FLT:1: כאשר נתונים בנויים, מערכות יחסים חשובים, והתאמה ACID נדרשת (למשל, עסקאות פיננסיות).
- (FLT:0) NoSQLveFLT:1; עבור עומסים גבוהים, סמנים גמישים, או נתונים מוכווני מסמך. Types: חנויות מסמכים (MongoDB), ערך מפתח (Redis, DynamoDB), רחב-קומיין (Cassandra), גרף (Neo4j).
In many large systems, you use a hybrid approach: SQL for core entities, NoSQL for fast lookups or analytics. Explain your choice with reasoning like "We store user profiles in PostgreSQL for relational queries, but use DynamoDB for session tokens because we need high availability and low latency."
נתונים שema ומודל
Define טבלאות/collections with שדות ומערכות יחסים.עבור הזנה של מדיה חברתית, ייתכן שיש לך שולחנות: משתמש, פוסט, כמו, לעקוב אחר איך אתה לאחסן רשימות חבר נורמליות לקריאה מהירה לעומת נורמלי עבור עקביות.
Replication, Backup, and Disaster Recovery
כדי להבטיח זמינות, לדון שכפול נתונים על פני אזורים (מנהלים מול מאסטר יחיד) אסטרטגיות גיבוי מניציה (צילום פתאומי, יומני כתיבה) ומטרות נקודת התאוששות (RPO) / מטרות זמן התאוששות (RTO) עבור מערכות קריטיות, השתמש בשכפול פעיל פעיל פעיל פעיל פעיל-אקטיבי כדי להפחית את הזמן.
חלוקת נתונים (Sharding)
כאשר שרת אחד לא יכול להתמודד עם הנתונים, החלוקה בין shards.סביר מבחר מפתח shard (למשל, משתמש id hash) להפיץ באופן שווה נתונים ולהימנע מנקודות חמות. לדון באתגרים כמו צ'רץ'ים וכיצד אתה יכול לפתור אותם (למשל, הצטרפות ברמת אפליקציה או שימוש בשירות אינדקס נפרד).
סקר וביצוע
סקלאלה מבטיחה שהמערכת יכולה להתמודד עם צמיחה ללא השפלה. Cover הן שכבות של נתונים ושכבות.
Horizontal vs. Vertical Scaling
דרוג רציונאלי (שרתים כבדים) הוא פשוט יותר אבל יש לו גבולות. Horizontal מדרגינג (הדברים יותר צומתים) מספק גמישות אבל מציג מורכבות בחלוקת המדינה.עדיף אופקי עבור שירותים חסרי מדינה.
אסטרטגיות Caching
Cache לעתים קרובות גישה לנתונים כדי להפחית את הסבלנות ואת עומס מסד הנתונים.
- (ב) ⁇ :0) ,0 (ב) ,(ב) ,(ב) ,(ב) .
- (ב) [15] ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
לדון בדפוסי הריסה של שפם: TTL, כתיבה באמצעות, כתיבה-בפנייד: "אנחנו מדביקים את המשתמש ב- Redis עם 5 דקות TTL. כאשר נוצר פוסט חדש, אנו מבטלים את ה- cache עבור חסידי הפוסט".
עקבו אחרי Balancing and Horizontal Scaling
השתמש איזון עומסים במספר רב של tiers: הלקוח לשרתי API, שרתי API למקרים שירות, ובין microservices.דון אלגוריתמים (סביב גלימה, לפחות חיבורים, תשואות עקביות עבור קצבה של הפעלה) עבור בקנה מידה עולמי, השתמש איזון מבוסס DNS (כלקציר) או מאזן עומס גלובלי (כמו כביש 53 latency routing).
טכניקות סקריפיות
- (ב) [ה]: [קרא] העתקים (ב]: קריאות קריאה לקריאה לשכפולים.כתבים הולכים לעיקרון, קוראים להעתק (השכפול הסינכרון) שימושיות לעומסי עבודה.
- (ב) ,0) ,התבונן בפרשת ה-[[1924]]: הפחתה מעל לקשרי מסד נתונים על ידי כך שהכניסו אותם ל-Adobe או ל- Proxy (למשל, PgBouncer).
- (ב) ,0) ,Query OptimizationFLT:1: Indexing, שאילתה מספקת, דיסנורמליזציה.
התמודדות עם אתגרים פוטנציאליים
לכל מערכת יש נקודות כשל.לזהות אותם באופן פרואקטיבי ולהציע נטיות.
בקבוקי בקבוק ובעיות דרך
צווארי בקבוק נפוצים כוללים יכולת כתיבה מסד נתונים, סינכרון מעבד יחיד, רוחב פס רשת. Solutions: נתוני חלוקה, השתמש עיבוד סינכרוני (queues), ואופטימיזציה I / O. לדוגמה, אם מהירות הכתיבה של מסד הנתונים אינה מספיקה, buffer כותב עם תור ו אצווה אותם.
דאגות אבטחה
באימות (OAuth2, JWT), אישור (RBAC), הצפנה במנוחה (AES-256) ובמעבר (TLS), והגנה מפני התקפות משותפות (הזרקת ה-SQL, XSS) השתמש ב-FLT:0OWASP הנחיות sFLT:1 כהערה.
כישלון ו Redundancy
תוכנית לכשלים של רכיב:
- (ב) ,0) שירות RedundancyFLT:1: Run עותקים מרובים מאחורי מאזן העומס.
- (FLT:0) Database FailoverFLT:1: השתמש ב-pri-replica עם קידום אוטומטי או ריבוי-region פעיל-אקטיבי.
- (ב) ,0) ,(הפסקה:0) ,(ה) ,(ה) ,(ה) ,התפרקות של ⁇ (ראו:2) , ).
- (ב) ,0) ,5 ,5 , אם שירות ההמלצות נכשל, לשרת תוכן גנרי במקום דפי שגיאה.
מעקב ושקיפות
מנפיק כניסה (לוגים ממובנים), מדדים (עקביות, שיעורי שגיאה, CPU / memory), והמשך (הפצה של מסלול כמו Jaeger או Zipkin) לדוגמה, "אנו משתמשים Prometheus עבור מדדים, Grafana עבור לוחות מחוונים, ואת אלק לניתוח יומן"
תקשורת ברורה וסודיות
העיצוב שלך הוא רק טוב כמו היכולת שלך להסביר את זה.ראיונות להעריך את תהליך המחשבה שלך, לא רק את הדיאגרמה הסופית.
לנטרל את ההגיון שלך
תגידו למה בחרתם בגישה אחת על פני אחרת.לדוגמה: "בחרתי בקאסנדרה על PostgreSQL בחנות ההודעות כי אנו מצפים שכתוב גבוה מאוד ללא תוספות יחסיות, ואנחנו צריכים יכולת מדרגיות ליניארית.עם זאת, אנו מאבדים מדד משני חזק, כך שנוכל ליצור שירות חיפוש נפרד באמצעות אלסטיקווסטוויק".
השתמש באנליסטים ודוגמאות אמיתיות בעולם
"זה דומה לאופן שבו טוויטר מטפל בטוויטר - אנחנו נשתמש בגישה של מעריצים ללא משפט עבור משתמשים פעילים ומעריצים לקריאה עבור פחות פעילים".
הסתגלות ל- Feedback
אם המראיין מציג מעצור חדש (למשל, "המשתמשים שלנו מרוכזים בשני אזורים בלבד), להתאים את העיצוב שלך בחסד.תודה להם על הקלט ומסביר כיצד השינוי משפיע על ההחלטות הקודמות שלך.
שימוש ב-Visual Aids
אם הראיון הוא על לוח לבן או לוח לבן וירטואלי, לצייר דיאגרמות באופן מצטבר.תרכיבי תוויות בבירור.אם זה מילולי, לספק תמונה נפשית: "דמיינו שלושה tiers -web, API והנתונים - כל אחד מהם בקנה מידה אופקי."
תרגול באופן קבוע
עיצוב מערכת הוא מיומנות שמשתפרת עם תרגול מכוון.כאן איך לעצב את התרגול שלך.
בעיות עיצוב נפוצות
עבודה באמצעות בעיות קלאסיות: עיצוב כתובת URL קיצור, הזנה בטוויטר, Uber, YouTube, Dropbox, WhatsApp וכו 'עבור כל אחד, ליישם את המסגרת לעיל. לכתוב את הפתרון שלך ולהשוות עם הפניות ידועות.
ראיונות Mock
תרגול עם שותף או שימוש בפלטפורמות כמו FLT:0 (PramptureFLT) 1:1 (ראיונות לעג עמיתים חינם לעמית) או FLT:2interviewing.ioirFLT 3: Get משוב על הבהירות, הכיסוי והעומק שלך.
תגית: Architecture Case Studies
קראו בלוגים הנדסיים מחברות כמו Netflix, Uber, אמזון ו- Stripe. הם לעתים קרובות חולקים את הבורסות בעולם האמיתי ואת האבולוציה של המערכות שלהם.TheFLT:0.
הזמן בעצמך
בראיונות, בדרך כלל יש לך 40-60 דקות עבור שאלה עיצובית.תרגול השלמת עיצוב מלא (מבהיר דרישות לדון במסחר-offs) בתוך זמן זה. השתמש בזמן כדי לבנות מהירות ללא איכות הקרבה.
מסקנה
שאלות עיצוב מערכת פתוחות פחות על מציאת התשובה "הזכות" ועוד על להפגין גישה מובנת, הסתגלות, ומוסכמת היטב.על ידי ביצוע המסגרת הזאת - להבהיר, להגדיר סדרי עדיפויות, אדריכל, להתמודד עם אתגרים, לתקשר בבירור - אתה יכול להתמודד עם כל דרישה עיצובית באופן קבוע, לחפש משוב, להישאר סקרן לגבי איך מערכות בעולם האמיתי להתפתח עם הזמן, תהליך זה, יהיה הפוך, השני, הגדרתו של מועמד חזק כמו הגדרתו של מציאות.