מפתחי תוכנה, רוצים להעמיק את הידע שלכם ב- Backend? במאמר הזה נסקור את רכיבי המפתח השונים של ה-Backend, נסביר איך האינטרנט עובד וננסה להבין מהם סוגי השרתים השונים הקיימים.
המאמר הזה הוא הראשון מסדרת מאמרים שתעסוק ב- Backend ו- Node.js. החלק הבא יפורסם בימים הקרובים.
תוכן עניינים
מה זה Backend בכלל?
ה- Backend הוא החלק של יישום אינטרנט הפועל על השרת ואחראי על עיבוד נתונים, ביצוע חישובים ותקשורת עם שרתים אחרים. הוא מורכב בדרך כלל ממסד נתונים, שרת אינטרנט ושרת יישומים המקיים אינטראקציה עם מסד הנתונים ומבצע את הלוגיקה העסקית של היישום. נרחיב על שרתים בהמשך המאמר.
ה-Backend הוא מרכיב חיוני בפיתוח אתרי אינטרנט ואפליקציות WEB. זאת מכיוון שהוא מאפשר אחסון ואחזור נתונים, עיבוד נתונים וביצוע לוגיקה בצד השרת. ללא backend, יישומי אינטרנט לא יוכלו לספק תוכן דינמי או לבצע חישובים מורכבים.
החשיבות של הלוגיקה העסקית ב-Backend
בעוד שמשימות צד-שרת כגון פעולות CRUD ואימות משתמשים הן חיוניות, המטרה העיקרית של backend היא ליישם את הלוגיקה העסקית של יישום אינטרנט. לוגיקה עסקית היא מערכת הכללים והתהליכים המגדירים כיצד יש לעבד נתונים וכיצד האפליקציה צריכה להגיב לקלט של משתמשים או במילים אחרות, האלגוריתמים שמאחורי האפליקציה.
הלוגיקה העסקית היא מה שמייחד את האפליקציה ומה שנותן לה את הערך שלה. זה יכול לכלול אלגוריתמים מורכבים, בינה מלאכותית, למידת מכונה, עיבוד Big Data, ארכיטקטורה מורכבת וסקיילביליות.
לדוגמה, ה-backend של פייסבוק כולל אלגוריתמים מסובכים שמנתחים נתוני משתמשים וממליצים על תוכן מותאם אישית על סמך תחומי העניין של המשתמש. ה-backend של נטפליקס משתמש בלמידת מכונה כדי לחזות אילו סרטים ותוכניות טלוויזיה המשתמשים עשויים לאהוב וממליץ עליהם בהתאם. ה-backend של YouTube משתמש בעיבוד Big data כדי לנתח את התנהגות המשתמש ולהתאים אישית את חוויית המשתמש.
מרכיבי המפתח של ה-Backend
ה-backend מורכב משני מרכיבים מרכזיים: השרת ומסד הנתונים. השרת ומסד הנתונים הם שני מרכיבים מרכזיים של ה-backend הפועלים יחד כדי לספק את הפונקציונליות ואת אחסון הנתונים הנדרשים על ידי יישום אינטרנט.
שרתי היישומים והאינטרנט
שרת היישומים הוא מרכיב מרכזי ב-back end המשמש כממשק בין הלקוח הלוגיקה העסקית של האפליקציה. שרת היישומים אחראי לטיפול בבקשות נכנסות מלקוחות, ביצוע הלוגיקה המתאימה של האפליקציה והחזרת תגובה חזרה ללקוח.
ביישום אינטרנט מבוסס Node.js, שרת היישומים מיושם בדרך כלל באמצעות מודול אקספרס או מודול HTTP המובנה, המספק דרך פשוטה ויעילה ליצור שרת אינטרנט. שרת האינטרנט עשוי להיות מתוגבר גם בתוכנת ביניים נוספת (Middleware), כגון אימות משתמשים, כדי לספק פונקציונליות ואבטחה נוספים.
בנוסף ללוגיקה העסקית של האפליקציה, עלול להיות בנוסף שרת אינטרנט האחראי גם על הגשת קבצים סטטיים, כגון קבצי HTML, CSS ו-JavaScript, וכן כל נכס אחר הנדרש על ידי האפליקציה.
מסד הנתונים (Database)
מסד הנתונים הוא מרכיב מרכזי נוסף ב-back end שאחראי על אחסון וניהול נתוני האפליקציה. מסד הנתונים משמש בדרך כלל לאחסון נתונים שנוצרים או נצרכים על ידי האפליקציה, כגון פרופילי משתמשים, רשימות מוצרים או רשומות של עסקאות.
ביישום אינטרנט מבוסס Node.js, מסד הנתונים מיושם בדרך כלל באמצעות מערכת ניהול מסד נתונים (Database Management System – DBMS) כגון MongoDB, MySQL או PostgreSQL. ה-DBMS מספק דרך לאחסן ולשלוף נתונים באמצעות פורמט מובנה, כגון SQL או JSON.
ניתן גם להגביר את יכולות מסד הנתונים עם כלים נוספים, כגון מסגרות מיפוי יחסי אובייקט (Object-Relational-Mapping – ORM) כדי לספק פונקציונליות וביצועים נוספים.
איך האינטרנט עובד
לפני שנצלול לפרטים של Node.js, חשוב להבין איך האינטרנט עובד.
האינטרנט מבוסס על ארכיטקטורת שרת-לקוח, כאשר הלקוח (בדרך כלל דפדפן אינטרנט) שולח בקשות לשרת, והשרת מגיב בנתונים המוצגים בדפדפן. כאשר משתמש מקליד כתובת URL בדפדפן אינטרנט ולוחצים על אנטר, הדפדפן שולח בקשת HTTP לשרת, אשר מגיב במסמך HTML שמעובד בדפדפן. הדפדפן יכול גם לשלוח בקשות נוספות לשרת כדי לאחזר תמונות, גיליונות CSS, קובצי JavaScript ומשאבים אחרים הדרושים לעיבוד הדף.
אתרים סטטיים מול דינמיים
ישנם שני סוגים של אתרים: סטטיים ודינמיים ושני סוגים של גישות לעיבוד תוכן HTML באינטרנט: עיבוד בצד השרת ועיבוד בצד הלקוח. נרחיב על שתי הגישות הללו בהמשך מאמר זה.
אתר סטטי הוא אתר שמורכב מקובצי HTML, CSS ו-JavaScript המוגשים ישירות לדפדפן המשתמש. התוכן באתר סטטי אינו משתנה בתדירות גבוהה והוא בדרך כלל מקודד בקובצי HTML קבועים שאינם משתנים כלל.
אתר דינמי, לעומת זאת, הוא אתר שמשתמש בסקריפטים בצד השרת כדי ליצור דפי HTML באופן דינמי על סמך קלט המשתמש או גורמים אחרים. אתרים דינמיים משתמשים בדרך כלל בשרת backend כדי לאחסן ולאחזר נתונים, והם משתמשים בשפות סקריפטים בצד השרת כמו PHP, Python או Ruby כדי ליצור דפי HTML.
עיבוד צד שרת לעומת עיבוד צד לקוח
עיבוד בצד השרת (server-Side Rendering) ועיבוד בצד הלקוח (Client-Side Rendering) הן שתי גישות לעיבוד תוכן HTML באינטרנט.
עיבוד בצד השרת הוא תהליך יצירת תוכן HTML בשרת ושליחתו לדפדפן של הלקוח. עיבוד בצד הלקוח, לעומת זאת, הוא תהליך של יצירת תוכן HTML בדפדפן של הלקוח באמצעות JavaScript. גישה זו משמשת בדרך כלל לאתרים הדורשים רמה גבוהה של אינטראקטיביות ותוכן דינמי. צד הלקוח של אתרים אלו בנוי בדרך כלל עם ספריות צד לקוח או פריימוורקים כגון React, Vue או Angular.
יתרונות וחסרונות של שתי הגישות באפליקציות אינטרנט
עיבוד בצד השרת ועיבוד בצד הלקוח הן שתי גישות שונות לעיבוד דפי אינטרנט ביישום אינטרנט, כל אחת עם היתרונות והחסרונות שלה.
עיבוד בצד השרת (Server Side Rendering – SSR)
יתרונות:
- זמן טעינה ראשוני משופר: מכיוון שהשרת שולח HTML מעובד במלואו ללקוח, הלקוח אינו צריך להמתין לטעינת JavaScript ולהוצאתו לפועל לפני הצגת התוכן.
- קידום אתרים (SEO) טוב יותר: מנועי חיפוש יכולים להוסיף לאינדקס שלהם בקלות רבה יותר דפי HTML המעובדים במלואם מאשר דפים המסתמכים על עיבוד בצד הלקוח.
- נגישות משופרת: עיבוד בצד השרת יכול לשפר את הנגישות עבור משתמשים עם חיבורי אינטרנט איטיים או לא אמינים, כמו גם עבור משתמשים המסתמכים על טכנולוגיות מסייעות כגון קוראי מסך.
חסרונות:
- עומס רב על השרת: מכיוון שהשרת אחראי על רינדור HTML עבור כל בקשת עמוד, עיבוד בצד השרת יכול להפעיל עומס גבוה יותר על השרת, מה שעשוי להכביד מאוד על השרת בעת הצורך לשרת משתמשים רבים.
- אינטראקטיביות מוגבלת: מכיוון שהלקוח מקבל דף HTML מעובד במלואו, ייתכן שהדף לא יהיה אינטראקטיבי כמו דף המעובד באמצעות עיבוד בצד הלקוח, מכיוון שהוא עשוי לדרוש קריאות נוספות לשרת כדי להציג תוכן מעודכן.
עיבוד בצד הלקוח (Client Side Rendering – CSR)
יתרונות:
- אינטראקטיביות משופרת: מכיוון שהלקוח מקבל חבילת JavaScript שיכולה לעדכן את הדף באופן דינמי, דפים המעובדים באמצעות עיבוד בצד הלקוח הם אינטראקטיביים ודינמיים ביותר.
- העומס על השרת מופחת: מכיוון שהשרת אחראי רק לספק את חבילת ה-HTML וה-JavaScript הראשונית, רינדור בצד הלקוח יכול להפחית את העומס על השרת ולשפר את הסקיילביליות.
- חווית מפתח טובה יותר: עיבוד בצד הלקוח יכול לספק חווית פיתוח מודרנית יותר, מכיוון שהוא מאפשר למפתחים להשתמש במסגרות וספריות JavaScript מודרניות כדי לבנות ממשקי משתמש אינטראקטיביים במיוחד.
חסרונות:
- זמן טעינה ראשוני איטי יותר: מכיוון שהלקוח חייב להוריד ולהפעיל חבילת JavaScript לפני שניתן להציג את התוכן, לדפים המעובדים באמצעות רינדור בצד הלקוח עשויים להיות זמני טעינה ראשוניים איטיים יותר, במיוחד בחיבורים איטיים יותר.
- קידום אתרים (SEO) לוקה בחסר: מכיוון שמנועי חיפוש לא יוכלו להוסיף לאינדקס שלהם בקלות תוכן שנוצר באופן דינמי, ייתכן שדפים המעובדים באמצעות עיבוד בצד הלקוח לא יהיו ידידותיים ל-SEO כמו דפים המעובדים באמצעות עיבוד בצד השרת.
- אתגרי נגישות: דפים המעובדים באמצעות עיבוד בצד הלקוח עשויים להציב אתגרי נגישות עבור משתמשים עם חיבורי אינטרנט איטיים יותר או בעלי טכנולוגיות מסייעות.
בסך הכל, הבחירה בין רינדור בצד השרת לבין רינדור בצד הלקוח תלויה בדרישות הספציפיות של האפליקציה ושיקול היתרונות והחסרונות בין אינטראקטיביות, זמן טעינה ראשוני, SEO וגורמים נוספים. יישומי אינטרנט מודרניים רבים משתמשים בגישה היברידית, שבה דפים או רכיבים מסוימים מעובדים באמצעות רינדור בצד השרת, בעוד שאחרים מעובדים באמצעות רינדור בצד הלקוח כדי לספק חווית משתמש אינטראקטיבית ורספונסיבית יותר.
שרתי API
ראינו שיש שרתים שאחראים על עיבוד בצד השרת והם יוצרים דפי HTML שיצרכו על ידי הדפדפן של הלקוח. אבל עם התקדמות צד הלקוח, כפי שהוזכר, שבו התצוגות נוצרות ישירות בצד הלקוח, השרתים לא צריכים לספק יותר תוכן HTML. כעת הם יכולים לחשוף רק את הנתונים שיצרכו על ידי הלקוח בצד הלקוח בכל דרך אפשרית.
עם עלייתן של ספריות צד לקוח ומסגרות כגון React, Angular ו-Vue.js, העיבוד בצד הלקוח הפך לנפוץ יותר. בגישה זו, השרת אחראי רק לספק את הנתונים ללקוח בפורמט שניתן לצרוך בקלות על ידי קוד JavaScript, כגון JSON.
שרתי API הם סוג של שרתים שתוכננו במיוחד לספק נתונים ליישומי לקוח בצורה עקבית ואמינה. הם משמשים בדרך כלל בפיתוח אתרים כדי לספק גישה לבסיסי נתונים או לשירותי אינטרנט.
אחד היתרונות העיקריים של שימוש בשרת API הוא בכך שהוא מאפשר גמישות וסקלביליות רבה יותר בפיתוח אפליקציות. על ידי ניתוק הרכיבים בצד הלקוח מאלה שבצד השרת של האפליקציה, מפתחים יכולים לשנות ולעדכן כל רכיב בקלות רבה יותר מבלי להשפיע אחד על השני.
יתרון נוסף בשימוש בשרת API הוא בכך שהוא מאפשר יכולת התממשקות גמישה יותר בין יישומים ופלטפורמות שונות. על ידי מתן API סטנדרטי לגישה לנתונים בלבד, שרתי API יכולים לשרת הן יישומי אינטרנט, הן יישומים של טלפונים ניידים והן יישומי שולחן עבודה בצורה אחידה, עקבית ואמינה.
כמה מילים לסיום
לסיכום, backend הוא מרכיב קריטי בפיתוח אתרים, והוא כולל הרבה יותר מסתם פעולות CRUD ואימות משתמשים. הלוגיקה העסקית של אפליקציית אינטרנט הוא המקום בו נמצא הערך האמיתי, והוא יכול לכלול אלגוריתמים מורכבים, בינה מלאכותית, למידת מכונה, עיבוד ביג דאטה, ארכיטקטורה מורכבת וסקיילביליות.
המאמר הזה הוא הראשון מסדרת מאמרים שתעסוק ב- Backend ו- Node.js. החלק הבא יפורסם בימים הקרובים.