ארכיטקטורת תוכנה מתייחסת למבנה שנוצר בתוך יישום, כלומר כל המודולים והרכיבים של התוכנית והאופן שבו הם מתקשרים. מתכנתים עובדים על ארכיטקטורות טובות כבר הרבה מאוד זמן, אז זה לא מפתיע ששמענו על הרבה דפוסים ארכיטקטוניים. אתה צריך להבין אותם: בעת כתיבת יישום אינטרנט, זה קריטי להגיע עם ארכיטקטורה טובה, כי יישום אינטרנט כולל יותר רכיבים ומודולים מאשר יישום רגיל. דפוס אדריכלי הוא דרך חכמה לפתור בעיה כלשהי בתכנון תוכנה. סביר להניח שנתקלתם בדפוסי עיצוב כמו שיטת המפעל, מפעל מופשט, בונה, אב טיפוס, יחיד, ואולי אחרים. אנו משתמשים בהם בעת כתיבת קוד, יצירת שיעורים ומתכננים כיצד השיעורים יתקשרו. דפוסים אדריכליים משמשים ברמת הפשטה גבוהה יותר, בעת תכנון האינטראקציה של המשתמש עם שרתים, נתונים ורכיבים אחרים. בואו נסתכל במהירות על כמה דפוסים וכיצד להשתמש בהם.
ארכיטקטורת שרת-לקוח
השם יוצר את הרושם שהכל על התבנית הזו פשוט וברור. אבל בואו נבהיר כמה נקודות, כדי שכשתתחיל ללמוד אביב תבין על מה אנחנו מדברים. נניח שכתבת אפליקציית צ'אט, ואתה וחבר מתחילים להשתמש בה. אתה יכול לאמץ גישה פשוטה מאוד, לשלוח הודעות זה לזה ישירות דרך האינטרנט באמצעות כתובות IP ידועות:
בהתחלה, הכל נראה בסדר עד שעוד אחד מחבריך מבקש להצטרף לצ'אט. אז כשאתה מחליט להוסיף את חברך המשותף לצ'אט, אתה עומד בפני בעיה ארכיטקטונית: עבור כל משתתף בצ'אט, עליך לספק מידע עדכני על מספר המשתמשים וכתובת ה-IP של משתמשים חדשים. וכאשר נשלחת הודעה, היא צריכה להימסר לכל המשתתפים. אלו הבעיות הברורות ביותר שיצוצו. חבורה נוספת של בעיות תסתתר בקוד עצמו. כדי להימנע מהם, עליך להשתמש בשרת , אשר יאחסן את כל המידע על המשתמשים, כולל הכתובות שלהם. יש לשלוח הודעות רק לשרת. הוא, בתורו, שולח הודעות לכל אחד מהנמענים. כאשר אתה מחליט להוסיף חלק שרת לאפליקציית הצ'אט שלך, אתה מתחיל לבנות ארכיטקטורת שרת-לקוח.
רכיבים של ארכיטקטורת שרת-לקוח
בוא נראה במה מדובר. ארכיטקטורת שרת-לקוח היא דפוס עיצוב המשמש ליצירת יישומי אינטרנט. ארכיטקטורה זו מורכבת משלושה מרכיבים:
-
לקוח - לפי שמו, אנו יכולים לדעת שרכיב זה משתמש בשירות כלשהו (יישום האינטרנט), יוצר קשר עם שרת כדי לבקש מידע מסוים.
-
שרת - כאן נמצא יישום האינטרנט שלך או חלק השרת שלו. הוא מאחסן את פרטי המשתמש הדרושים או יכול לבקש אותו. בנוסף, כאשר לקוח שולח בקשה, השרת הוא זה שמחזיר את המידע המבוקש.
-
רשת - החלק הזה פשוט. זה מקל על חילופי מידע בין הלקוח לשרת.
-
מודול לקוח — מכיל ממשק גרפי לכניסה ושליחה/קבלה של הודעות
-
מודול שרת - יישום אינטרנט שמתארח בשרת ומקבל הודעות ממשתמשים, מעבד אותן ואז שולח אותן לנמענים
כאשר אנו רוצים להסתכל על מידע שימושי (או לא מאוד שימושי) באינטרנט, אנו פותחים דפדפן, מכניסים שאילתה בשורת החיפוש ומקבלים מידע ממנוע החיפוש בתגובה. בשרשרת זו, הדפדפן הוא הלקוח. זה שולח בקשה עם מידע על מה שאנחנו מחפשים לשרת. השרת מעבד את הבקשה, מוצא את התוצאות הרלוונטיות ביותר, אורז אותן בפורמט שהדפדפן (הלקוח) יכול להבין ושולח אותן בחזרה. שירותים מורכבים כמו מנועי חיפוש יכולים לכלול הרבה שרתים. למשל, שרת הרשאות, שרת למציאת מידע, שרת להפקת התגובה וכו'. אבל הלקוח אינו מודע ואינו מודאג מכל זה: עבור הלקוח, השרת הוא ישות מאוחדת. הלקוח יודע רק על נקודת הכניסה, כלומר כתובת השרת שאליו יש לשלוח בקשות. זכור את היישום שבדקנו בחלק הקודם של סדרה זו
. זה נועד לניטור טמפרטורת האוויר הממוצעת בכל המדינות בזמן אמת. הארכיטקטורה שלו נראית בערך כך:
האפליקציה שלנו ממוקמת בשרת. נניח שכל חמש שניות הוא שולח בקשות לשרתים המופעלים על ידי תחנות מטאורולוגיות מקומיות, מקבל מהשרתים מידע על טמפרטורה עבור מדינה מסוימת ומאחסן את המידע הזה. כאשר הלקוח מבקש מאיתנו "לראות את טמפרטורת האוויר הנוכחית בעולם", אנו מחזירים את המידע האחרון שנאגר, ממוין לפי מדינה. לפיכך, האפליקציה שלנו פועלת גם כשרת (כאשר היא מעבדת בקשות משתמשים) וגם כלקוח (כאשר היא מקבלת מידע משרתים אחרים).
| הנה נקודה חשובה: הרעיון של שרת אינו קשור למחשב ספציפי, אלא ביחסים בין ישויות רשת . |
ארכיטקטורה תלת-שכבתית
זהו דפוס ארכיטקטוני שמציג מודול שלישי - אחסון נתונים . בדפוס זה, שלוש הרמות נקראות בדרך כלל שכבות או שכבות:
-
שכבת הלקוח היא ממשק המשתמש, הנקרא גם שכבת המצגת. זה יכול להיות דפדפן אינטרנט שמקבל דפי HTML, או ממשק משתמש גרפי שנכתב באמצעות JavaFX. העיקר שהשכבה הזו מאפשרת למשתמש לשלוח בקשות לשרת ולעבד את התגובות שלו.
-
שכבת הלוגיקה היא השרת שמעבד בקשות/תגובות. לעתים קרובות זה נקרא גם שכבת השרת. כאן גם מתרחשות כל הפעולות הלוגיות: חישובים מתמטיים, פעולות נתונים, קריאות לשירותים אחרים או אחסון נתונים וכו'.
-
שכבת הנתונים היא שרת מסד הנתונים: השרת שלנו מקיים איתו אינטראקציה. שכבה זו מאחסנת את כל המידע הדרוש להפעלת האפליקציה.
היתרונות של ארכיטקטורה תלת-שכבתית
ארכיטקטורה כזו מעניקה לנו יתרונות רבים, כולל:-
היכולת להגן מפני הזרקת SQL (זוהי התקפה על שרת; היא כרוכה בשליחת קוד SQL שכאשר הוא מופעל, מאפשר לתוקף להשפיע על מסד הנתונים שלנו).
-
הפרדת הנתונים אליהם אנו רוצים לשלוט על גישת המשתמש.
-
היכולת לשנות נתונים לפני שליחתם ללקוח.
-
מדרגיות (היכולת להרחיב את האפליקציה שלנו למספר שרתים שישתמשו באותו מסד נתונים.
-
דרישות פחות מחמירות על איכות חיבורי המשתמש. כשיוצרים תגובה בשרת, אנחנו מקבלים הרבה מידע שונה ממסד נתונים ומעצבים אותו, ומשאירים רק את מה שהמשתמש צריך. פעולה זו מפחיתה את כמות המידע שאנו שולחים בתגובה שלנו ללקוח.
GO TO FULL VERSION