החיבור המושלם בין Containers לבין Functions

”Serverless אין פירושו שאין שרתים. זה רק אומר שאתה לא צריך להתמודד איתם יותר”

מאת עמירם שחר, מייסד ומנכ”ל Spotinst 

בהמשך לכנס ה-Serverless Conf האחרון, התקיים לפני כשבועיים כנס ServerlessConf נוסף בניו יורק. כמיטב המסורת, בכנס היתה נציגות ישראלית מכובדת, הן במספר המשתתפים והן במספר החברות המרכיבות את האקוסיסטם שנקרא Serverlerss.

היתה לי הזכות להיות אחד מהדוברים ב-Keynote המפורסם של ServerlessConf בכנס, ובחרתי לדבר על המעבר החד שמתבצע היום בעולם התוכנה וה-DevOps מניהול של Containers ופיתוח של Micro Services ל-Functions, ו-Serverless בכלליות.

אם נביט רגע אחורה ל-20 השנים האחרונות, ״גרף האבולוציה״ יראה לנו איך התקדמנו לאורך השנים משרתים פיזיים, למכונות וירטואליות, עליית ה-Containers וקפיצה ל-Functions.

כאשר חברת Docker פרצה לשוק, היא הלבישה חליפה מאוד נוחה על Linux Containers והפכה אותם למיינסטרים. משהו באמת שמיש שגרם לכולנו לשנן את שלושת המילים Build, Ship & Run. התחלנו לפתח Micro Services בצורה מאוד קלה, ולהבין ש-Deployment (הפצה) זה לא דבר כזה נורא בעולם שכזה. ואז (איפשהו בשנת 2014), הגיעה AWS עם השירות החדש Lambda (למבדה) – שירות המאפשר למשתמשים להריץ קוד מבלי לנהל או לחשוב על שרתים ובעצם אמרה לכולנו ״תשכחו מ-Containers, ותתחילו לבנות Functions״.

השאלה הגדולה טמונה בקו שמחבר בין Containers לבין Functions – האם מדובר פה בקונפליקט בין 2 המוטציות הטכנולוגיות הללו, או האם זה חיבור ״משמיים״ שיכול לעזור לנו, ורק צריך להסתכל עליו מזווית ראיה קצת שונה?

אז, כדי להגיע לנקודה, בואו נדבר רגע על המגבלות שקיימות כיום באימוץ טכנולוגיית ה-Serverless, על היתרונות של Containers ומה שבניהם.

חסרונות בעולם ה-Serverless

1. שינוי מתודולוגיית הפיתוח שלנו

על מנת להשתמש ב-Functions, אנחנו צריכים לבנות אבני בניין קטנים, קטנים בהרבה מ-Micro Services, זאת אומרת שבמתודולוגיה שלנו, נצטרך לפתח הרבה יותר שירותים מאז שירות אחד (Micro Service, שהוא יחסית גדול לעומת פונקציה, אבל קטן בהרבה מ-Monolith)

2. מימוש Interfaces שונים

אם נרצה להשתמש ב-Amazon Lambda, Spot Functions או Azure Fucntions, אנחנו נצטרך להתאים את הקוד שלנו ל״חתימה״ או ״טמפלייט״ אחיד שהשירות המבוקש יידע להריץ עבורינו.

לדוגמא:

ה-Interface של אמזון בלבן, בכחול – גוגל ובצהוב – מיקרוסופט.

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

3. שינוי הדרך או החשיבה בו אנחנו ״מפיצים גירסאות״ Deployment

אנחנו מורגלים בעולם של VMs או Containers, להשתמש בטכניקות כמו Blue/Green, או הפצת גירסא בצורה מדורגת למספר שרתים בודדים, בדיקות תקינות, health checks וכ״ו. ב-Functions אנחנו צריכים להתמודד עם מציאות טיפה שונה.

4. תלויות ב-3rd parties, או בשם יותר מדוייק – Dependencies

כאשר אנחנו מפתחים קוד עבור VM או Container, זה ברור לנו שכל ה-Dependnceis שלנו, החבילות והקונפיגורציות הנדרשות על מנת שהקוד שלנו ירוץ בצורה תקינה ומיטבית יימצא על השרת בו הקוד רץ. במציאות של פיתוח functions, אנחנו נצטרך ״לארוז״ את הקוד שלנו, יחד עם ה-Dpendencies בתוך Zip אחד על מנת ששירות ה-Funtions שלנו יוכל להריץ את הפוקנציה, בנוסף אנחנו מוגבלים לקוד בגודל של 50 מגה בלבד (כולל Dependencies) מה שמקשה עוד יותר על פיתוח קוד מסובך ומסועף של פונקציה בודדת.

פונקציות או Serverless Functions אמנם מביאות עימם הרבה יתרונות, אבל זה עתה נכחנו לראות כי הן טומנות בחובן גם מכשולים לא פשוטים בכלל, אבל מה אם היינו יכולים לקחת את היתרונות המגיעים עם Containers ולנצל אותם לטובת Functions?

אם נסתכל רגע לעומק, מה עומד מאחורי הטכנולוגיה של AWS Lambda, איך בעצם פועל הקסם הזה שנקרא Function as a Service? בשורה התחתונה זה מאוד פשוט.

1. אנחנו נעלה קוד (עם ה-dependencies שלו)
2. השירות המבוקש (לצורך הדוגמה AWS Lambda) יקח את הקוד שלנו ובעצם ״יזריק״ אותו לתוך Container
3. ה-Container ירוץ על גבי שרת, ו-AWS Lambda תחזיר לנו את הפלט המבוקש.

נשמע קל, לא?

מה אם נוכל לדלג על שלב #2, ונוכל לייצר מצב בו בעצם הקלט (input) של הפונקציה הוא פשוט ״container״, כך ששירות ה-functions יקח את הContainer שלנו, ופשוט יריץ אותו.

לצורך ההדגמה, למושג הזה נקרא ״Funtainers״, שזה בעצם Containers as Functions, האפשרות לקחת Container ולהריץ אותו כפונקציה.

במצב כזה, אנחנו ננצל את היתרונות המגיעים עם Containers, ונאחד את זה יחד עם היתרונות האדירים המגיעים עם Functions.

זמינות גבוה, No Ops ובעיקר – Serverless. הרצת פונקציות, ואריזתם בתוך Container, אותו Container שמאוד מוכר לנו מהשנים האחרונות, אבני הבניין של Micro Services.

מסתבר ש-Funtainers, או בעצם Containers as Functions היא מגמה שגדלה בצורה מאוד מואצת בחודשים האחרונים. הנה לכם 3 פרוייקטים שכבר מציעים היום תמיכה מלאה בשיטה הזו:

1. IBM OpenWhisk
2. Spotinst Functions
3. OpenFaas

היתרונות (האדירים) בשיטה הזו:

  • אין מגבלה בשפת התכנות
  • אין צורך לדאוג ל-Dependencies או לקובץ Zip (הכל נארז לתוך ה-Container)
  • אין Vendor Lock-in, נוכל להריץ את ה-Container שלנו כפונקציה על כל תשתית (זה באמת לא משנה איפה…)
  • אין צורך במימוש של Interface ספציפי בקוד שלנו

אז איך זה בעצם עובד? (נצלול טכנית מעט)

1. נפתח את הקוד שלנו
2. ״נארוז״ אותו לתוך Container
3. נבנה Dockerfile שיכיל את כל ההתקנות הנדרשות כדי שה-Container שלנו יוכל לרוץ
4. נעלה את הContainer ל-Hub
5. ניצור פונקציה, ובתור ה״קוד״ (קלט) של הפונקציה נספק את ה-DockerHub/ContainerName שלנו
6. נריץ את הפונקציה

דוגמא ל-Dockerfile שמריץ קוד C על גבי Container

דוגמא ליצירת פונקציית Funtainer, שה-Input שלה הוא בעצם לא ״קוד״ אלא ״קונטיינר״

לסיכום

דיברנו על הווקטור והמגמות סביב Serverless ו-Functions, אך ברור לנו שיש עוד הרבה דברים שקורים מסביב, השימוש ב-Functions רק ילך, יגדל ויתעצם. הקצב בו Functions תופס תאוצה הוא אדיר, בעצם 10x מהיר יותר מ-Containers. אין ספק שארגונים גדולים (וקטנים) הבינו שזה הכיוון בו הם רוצים ללכת, השאלה היא מתי, וכמה מהר.

השילוב של Container בתור או בתוך Functions הוא התפתחות טבעית המשלבת בתוכה את כל היתרונות מ-Conainers ומ-functions ביחד. הקונספט הזה מאפשר לנו לחיות בעולם של Serverless אבל להתייחס לפונקציות שלנו כ-Micro Services ולא כ-ephemeral functions שמבצעות תת-משימות קטנות מאוד ונעלמות להן.

כתב אורח

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

הגב

2 תגובות על "החיבור המושלם בין Containers לבין Functions"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
אלון
Guest

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

עידו
Guest

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

wpDiscuz

תגיות לכתבה: