ארכיטקטורה רב-שכבתית

בהנדסת תוכנה, ארכיטקטורה רב-שכבתית או ארכיטקטורת n-שכבות (באנגלית: multi-tier architecture או n-tier architecture) היא ארכיטקטורת שרת–לקוח שבה הפרזנטציה (הצגה), עיבוד היישום, וניהול הנתונים (data) הם תהליכים נפרדים מבחינה לוגית. לדוגמה, יישום המשתמש בתווכה לצורך טיפול בהעברת נתונים בין משתמש לבסיס נתונים, יעבוד בארכיטקטורה רב-שכבתית. השימוש הנפוץ ביותר בארכיטקטורה רב-שכבתית הוא בצורה של ארכיטקטורת שלוש שכבות (three-tier architecture).
ארכיטקטורת n-שכבות מספקת למפתחים מודל ליצירת יישומים גמישים וניתנים לשימוש חוזר. על ידי פירוק היישום לשכבות, כאשר רוצים להכניס שינוי כלשהו בתוכנה, על המפתחים לשנות או להוסיף רק שכבה מסוימת, במקום לשכתב את כל התוכנה מחדש. במודל כזה צריכה להיות שכבת פרזנטציה (ממשק משתמש), שכבה עסקית או שכבת גישה לנתונים, ושכבת נתונים.
באנגלית, כאשר עוסקים בנושא זה משתמשים לסירוגין במושגים layer (שכבה) ו-tier (נדבך). עם זאת, יש הטוענים כי אכן קיים הבדל בין המושגים בהקשר הנ"ל: "שכבה" היא מכניזם ליצירת מבנה לוגי עבור האלמנטים שמרכיבים את התוכנה, ואילו "נדבך" הוא מכניזם ליצירת המבנה הפיזי עבור תשתית המערכת.

ארכיטקטורת שלוש שכבות

מודל שלוש השכבות היא ארכיטקטורת שרת–לקוח שבה ממשק המשתמש, הלוגיקה העסקית של היישום והגישה אל הנתונים מפותחים ומתוחזקים כמודולים נפרדים, בדרך כלל על גבי פלטפורמות שונות. מודל שלוש השכבות היא ארכיטקטורת תוכנה ותבנית עיצוב.
מלבד היתרונות הרגילים של תוכנה מודולרית בעלת ממשקים מוגדרים היטב, ארכיטקטורת שלוש השכבות מאפשרת גם החלפה או שדרוג של כל אחת מהשכבות באופן בלתי תלוי בשכבות האחרות, בהתאם לדרישות או לשינויים בטכנולוגיה. לדוגמה, החלפת מערכת ההפעלה בשכבת התצוגה תשפיע רק על הקוד של ממשק המשתמש.
בדרך כלל ממשק המשתמש רץ על גבי מחשב אישי או תחנת עבודה, ועושה שימוש בממשק משתמש גרפי סטנדרטי. עיבוד הלוגיקה העסקית של היישום יכול להתבצע על גבי מודול אחד או יותר שרצים על גבי תחנת עבודה או שרת יישומים. מערכת לניהול בסיס נתונים טבלאי (RDBMS) על גבי שרת בסיס נתונים (database server) או מחשב מרכזי, מכילה את הנתונים ואת הלוגיקה לאחסון הנתונים. השכבה האמצעית (שכבת עיבוד הנתונים) יכולה להיות מורכבת ממספר שכבות בעצמה, ובמקרה כזה הארכיטקטורה הכוללת נקראת "ארכיטקטורת n-שכבות").
ארכיטקטורת שלוש שכבות מורכבת מהשכבות הבאות:
שכבת תצוגה (presentation tier)

זוהי השכבה העליונה של היישום. שכבת התצוגה מציגה מידע הקשור לשירותים כדוגמת דפדוף בין מוצרים, מידע אודות הקנייה ותוכן עגלת הקניות. השכבה מתקשרת עם שכבות אחרות באמצעות העברת פלט התוצאות לדפדפן או לתוכנת לקוח אחרת, ולכל יתר השכבות ברשת.
שכבת היישום (application tier)

נקראת גם "שכבת הלוגיקה העסקית", "שכבת הגישה לנתונים" או "השכבה האמצעית". שכבה זו שולטת בפונקציונליות של היישום על ידי ביצוע עיבוד הנתונים הפרטני.
שכבת הנתונים (data tier)

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

השוואה עם מודל ה-MVC

ממבט ראשון, מודל שלוש השכבות נראה דומה לתבנית העיצוב Model-View-Controller. עם זאת, מבחינה טופולוגית הם שונים. כלל יסוד בארכיטקטורת שלוש השכבות הוא שהלקוח לעולם אינו מתקשר ישירות עם שכבת הנתונים; במודל שלוש השכבות כל התקשורת חייבת לעבור דרך השכבה האמצעית, ולכן מבחינה רעיונית, ארכיטקטורת שלוש השכבות היא ליניארית. לעומת זאת, ארכיטקטורת MVC היא משולשת: המבט (view) שולח עדכונים לבקר (controller), הבקר מעדכן את המודל (model), והמבט מתעדכן ישירות מהמודל.
מנקודת מבט היסטורית, ארכיטקטורת שלוש השכבות התפתחה בשנות ה-90 של המאה ה-20 מתצפיות על מערכות מבוזרות (כגון יישומי ווב), שבהן שכבות הלקוח, התווכה והנתונים רצו על גבי פלטפורמות נפרדות פיזית. לעומת זאת, מודל ה-MVC פותח עשור קודם לכן (עבודה ב-Xerox PARC  בשנות ה-70 המאוחרות ותחילת שנות ה-80 של המאה ה-20), והפיתוח התבסס על תצפיות על יישומים שרצו על גבי תחנת עבודה גרפית יחידה. תבנית ה-MVC יושמה ליישומים מבוזרים בשלב מאוחר יותר בהיסטוריה שלה.

שיקולים נוספים

העברת הנתונים בין השכבות היא חלק מהארכיטקטורה. לצורך כך יכול להיות שיהיה שימוש באחד או יותר מהפרוטוקולים הבאים:
SNMP, CORBA, Java RMI, .NET Remoting, Windows Communication Foundation, sockets, UDP, Web services
או פרוטוקול סטנדרטי או קנייני אחר. לעיתים קרובות משתמשים בתווכה כדי לחבר בין השכבות הנפרדות. השכבות הנפרדות לעיתים קרובות רצות על גבי שרתים פיזיים נפרדים, וכל שכבה יכולה בעצמה לרוץ על גבי אשכול מחשבים.