דוקטור קוד

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

מבוא לארכיטקטורת Micro services

עודכן לאחרונה: ינואר 20, 2024, מיקרו שרתים, מיקרו שירותים, ללמוד לתכנת, תכנות שרתים, צד שרת
כותב: דוקטור קוד

best couress

מהי ארכיטקטורת מיקרו שירותים ?


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

את האפליקציות הקטנות האלו בונים ברמת תלות נמוכה מאד בין המודולים השונים של המערכת (צימוד רפוי) עד כמה שניתן.

למה הדבר דומה?

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

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

אנשים כועסים זה תמיד דבר שמבשר רעות.

תארו לכם עכשיו, שהיו לוקחים כל קומה בבניין, ובונים עבורה, בניין שלם.

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

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

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

מה זה שרת?


שרת, הוא כל מחשב שמסוגל להריץ תוכנה שמהותה לקבל ולענות לבקשות שנשלחות ממחשבים אחרים.

זה לא הופך בפוטנציה כל מחשב עם אינטרנט לשרת ?

כן, כמעט כל מחשב שמחובר לאינטרנט יכול לשמש כשרת, אם נתקין את מערכת ההפעלה הנדרשת, התוכנות הנדרשות, נפתח פורטים במכשיר התקשורת שברשותינו כמו הראוטר, בעצם, כל מחשב יכול להפוך לשרת שמשרת מחשבים מכל קצוות העולם.

אז, המחשב שלנו יכול לשמש כשרת…המחשב של אבא יכול לשמש כשרת… (לא מומלץ אבא יגלה אבא יכעס). אפילו המחשבים המיושנים בספרייה של האוניברסיטה יכולים לשרת כשרתים, סתם אל תחשבו על זה אפילו זה אסור ואף לא חוקי להתקין תוכנות / שרתים על מחשבים של מוסדות המדינה ללא אישור.

אז, איזו שפות ישר קופצות לכם לראש שאתם מדמיינים שרת? נכון, ג'אווה סקריפט, סי שארפ, ג'אווה, פייתון.

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

בניית שרת באמצעות ארכיטקטורה מונוליטית


ארכיטקטורה מונוליטית היא ארכיטקטורה שבה אנחנו בונים את האפליקציה שלנו משכבות רבות, כל שכבה אמורה לטפל בנושא יחיד, ונקראת, "שירות" ( service ).

ככל שהאפליקציה גדלה כך באופן טבעי גם כמות השירותים שהיא מספקת.

את האפליקציה המונוליטית פורסים על גבי מחשב מרוחק, למה דווקא מחשב מרוחק? כי ישנם חסרונות ענקיים בהרמת שרת על המחשב הביתי שלנו, אז מה עושים?

משתמשים בשירותים של חברות ענק להשכרת משאבים כמו AWS של חברת אמזון או AZURE של חברת מייקרוסופט.

בואו נדמיין רגע, קוד מונוליטי שרץ על שרת:

קוד המסוגל לרשום משתמשים חדשים , להציגמוצרים בחנותולהציג את היסטוריית הרכישות של המשתמש.

best couress

בואו נצפה בסרטון אנימציה, אשר תסביר איך אפליקציה מונוליטית מתפקדת כשורה

אז מה אנחנו רואים פה?

אנחנו רואים פה שרת שמריץ את האפליקציה המונוליטית שלנו, האפליקציה משתמשת בשירותים שונים כדי לענות על בקשות שהמשתמש שולח מהנייד שלו.

תחילה המשתמש לוחץ על כפתור מוצרים, נשלחת בקשה לשרת שלנו, השרת משתמש באפליקצית שרת שכתבנו בנוד או פייתון ווטאבר והאפליקציה משתמשת בשירות המתאים כדי לענות על הבקשה.

בדיוק אותו הדבר קורה כאשר המשתמש לוחץ על כפתור ששולח בקשה הקשורה לתשלומים.

בואו נצפה באנימציה נוספת שמתארת בעיה כלשהיא

מה אנחנו רואים בסרטון? אנחנו יכולים לראות שהמשתמש שולח בקשה שקשורה לשירות "מוצרים", כאשר הבקשה מגיעה לשרת ועוברת לאפליקציה שלנו, מרחשת שגיאה בשירות "מוצרים".

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

בשיא תמימותו המשתמש ממשיך ומנסה לגשת להיסטוריית הרכישות שלו, אבל בגלל שהשירות כשל, והפיל איתו את כל האפליקציה שרצה על השרת, למשתמש אין שום תשובה.

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

וזה בעצם אחד החסרונות הכי גדולים בבניה עם ארכיטקטורה מונוליטית, החיסרון הזה נקרא
SPOF - Single Point Of Failure.

בעברית לא תקניתשמנו את כל הביצים בסל אחד!

בכל זאת מהם היתרונות של ארכיטקטורה מונוליטית?


מהם החסרונות של ארכיטקטורה מונוליטית?


חזרה למיקרו שירותים!


best couress

המונח "מיקרו שירותים" הומצא איי שם בשנת 2005 לא חשוב שמות וגם לא מעניין האמת, אבל! המניע העיקרי היה לבזר את אפליקציית השרת המונוליטי הגדול והשמנמן להמון מיקרו אפליקציות קטנות ועצמאיות, שכל אחת מהן תהיה אחראית רק על נושא אחד (Single Responsibility Principle).

בין היתר לפתור את בעיית הדילוור האיטי, כי עכשיו, כאשר כל יחידה ניתנת לפריסה ולעדכון באופן כזה שלא דורש עדכון של יחידות אחרות, זה נותן את החופש לעדכן רק חלקים ספציפיים בתוך האפליקציה הגדולה שלנו, ובמהירות!

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

בשורה התחתונה, כל שירות באפליקציה המונוליטית, הופך לאפליקציה מונוליטית בפני עצמה, בכך יש לנו בעצם המון אפליקציות קטנות ומבוזרות.

בואו נצפה בסרטון אנימציה שמדמה סנריו דומה עם מיקרו שירותים

מה אנחנו רואים כאן?

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

תארו לכם נטפליקס, השירות של יצירת משתמש נוסף הפסיק לעבוד, ועכשיו אנחנו לא יכולים ליצור משתמש לאותו אח,שאוהב לקבל יוזרים בחינם, אבל...השירות שמאפשר צפייה בסרטים ממשיך לעבוד אז אנחנו שמים סרט ואומרים לאח הקרצייה, שיעשה מנוי לעצמו ויעזוב אותנו בשקט!

מה הם היתרונות של ארכיטקטורת מיקרו שירותים?


מה הם החסרונות של ארכיטקטורת מיקרו שירותים?


סקיילינג (הרחבת משאבים)


בתצורה של מיקרו שירותים בהם כל שירות רץ על שרת בפני עצמו (או לפחות חלקיק שרת), אפשר להגדיל את המשאבים רק של אותו שירות, לרוב בתצורת מיקרו שירותים אפשר לעשות מה שנקרא horizontal scaling.

מה זה horizontal scaling? בשרת מונוליטי שפרוס על מחשב בודד, כדי לקבל יותר כוח נצטרך לבקש מחשב חזק יותר (vertical scaling), במיקרו שירותים אפשרי לבקש עוד יחידות קטנות של חומרה ולפרוס עליהן את אותה האפליקציה!

איך הדבר הזה נראה? הדוקטור הכין לכם אנימציה שתעזור לכם לזכור

מה אנחנו רואים פה? אנחנו רואים כמות של בקשות שהולכות וגדלות, השרת המונוליטי מגדיל את עצמו לשרת גדול יותר וחזק יותר וגדל בצורה אנכית. בעוד שהמיקרו שירות, פשוט מבקש עוד משאבים מאותו הסוג וגדל רוחבית, ומשכפל את הקוד שרץ גם למשאבים החדשים.

אבל איך יכול להיות שהבקשות שמגיעות יודעות לאיזה משאב לפנות?

בעזרת ה - software load balancer (שהיא תוכנה, שאף פעם לא תצטרכו לרשום בעצמכם), הבקשות מפוזרות לשכפולים השונים בצורה חכמה ויעילה, הלואד באלנסר מכיר ועוקב אחרי מצב הצריכה של כל משאב ויודע לפזר את הבקשות בצורה חכמה בניהם.

אומנם, ישנם משאבים מספיק חזקים בתור יחידה בודדה, למשל מחשב חזק שתוכלו לרכוש ב AWS שמכיל 64 ליבות ו 128 גיגה זיכרון, אבל המשאב הזה עולה הון תועפות.
מה אם נצטרך אפילו מחשב חזק יותר שאמזון לא יכולים להציע לנו? זהו אכלנו אותה?
בגדילה רוחבית אנחנו לא צריכים בכלל מחשב חזק , הרי ש 50 יחידות עם 4 ליבות ו4 גיגה זיכרון חזקות יותר מהמחשב המפלצתי היחיד בעל 64 הליבות.

כך שגדילה רוחבית תמיד יעילה יותר מגדילה אנכית.

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

לסיכום


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

בשנים האחרונות, חברות רבות שיש להם אפליקציה מונוליטית שרצה על שרת עוברות לשימוש במיקרו שירותים, אחרי קריאת המאמר הדוקטור מקווה שהבנתם למה.

אבל בכל זאת, אל תכנסו לפיתוח של מיקרו שירותים:

- אם אתם בונים תיק עבודות ראשוני או אם אתם מפתחים רעיון אבטיפוס.

- אם אתם סטרטאפ קטן שצריך קודם להוכיח שהמוצר שלו עובד! אל תבזבזו את ההשקעות הראשונות שלכם על לבנות תשתיות ולהכין את הקרקע למליוני משתמשים, תתפקסו בלהוכיח את הרעיון של המוצר, אם זה אומר אפליקציה מונוליטית, אז תבנו אותה בצורה שלאחר מכן יהיה קל לפרק אותה למיקרו שירותים.

מיקרו שירותים הם לא נושא פשוט ללמידה, אבל תהיו בטוחים שכל מראיין עתידי יתן לכם נקודות זכות רבות אם תוכיחו שאתם יודעים על מה מדובר.

הצטרפו לקהילות השונות ותרשמו לדוקטור איזה נושאים הכי בא לכם לקרוא עליהם, הדוקטור יעשה מאמץ להכין אנימציות מגניבות ומאמר או דוגמאות שיעזרו לכם לזכור את הנושא הזה שנים קדימה.