במאמר הקודם למדנו רבות על Serverless, ועכשיו הגיע הזמן להרחיב את הדיון על תחומים טובים אחרים.
יש כאלו שיגידו שפתרונות PaaS, כלומר Platform as a Service של מיקרוסופט, היו תמיד יותר מגוונים ומתקדמים מאשר אלו של אמזון (מיקרוסופט בטוח חושבת כך) אבל השירות של FaaS שנקרא Azure Functions, יצא לאור רק במרץ 2016. בהתאם לטרנד שמאפיין את מיקרוסופט לאחרונה, כל הקוד הוא open source ונמצא ב-GitHub. הרעיון הוא אותו רעיון, אבל המימוש שונה לגמרי.
שימו לב שפונקציה חדשה אינה קיימת בפני עצמה – אלא כחלק מאפליקציה, שיכולה להכיל כמה פונקציות – לא נתייחס לזה כרגע. ניתן לראות ששכבת ה-ACL לא מוצגת ולא מוגדרת בשלב יצירת הפונקציה, כמו כן אין שום התייחסות לשום אמצעי הבטחה אחר כגון אוטנטיקציה וכדומה, וזה חמור במיוחד בהתחשב בעובדה שהפונקציה מחוברת ל-HTTP endpoint שהוא חשוף לעולם חיצוני בצורה אוטומטית. מה שכן נמצא במסך יצירה היא התייחסות ל-Hosting Plan (hosting plan לשירות Serverless, רציני, מיקרוסופט?) בחירת מערכת הפעלה עבור הפונקציה, בחירת שפת תכנות ובחירת Storage – דבר שלא קיים ברמת הקונצפט ב-Lambda.
האפשרות לבחור תבנית מוכנה חסרה גם היא. לסיכום - יש הרבה פרמטרים שבעולם ה-FaaS לא אמורים היו להיות בכלל (מערכת הפעלה? למי אכפת?) אבל דברים חשובים כמו אבטחה, דווקא אינם בנמצא.
להבדיל מ-Lambda, ל-Azure Function קיימים רק שני טריגרים מובנים – שהם HTTP requests וריצה מתוזמנת. בנוסף, קיים אוסף די סטנדרטי של טריגרים עבור כמה שירותי ענן מרכזיים, ואפילו לשירות SMS של Twillio, אבל הגישה אליהם היא במסך נפרד ויש להתקין אותם אחד אחד.
השירות של Azure Functions קיים בשתי גרסאות שונות (יותר פרטים אפשר למצוא כאן) ומבחר שפות נתמכות שונה מגרסה לגרסה, כאשר רמת התמיכה שונה בין שפה לשפה. רמת תמיכה GA קיימת עבור C#, F# ו-JS, כאשר Java 8 נתמכת רק בגרסה 2.x בלבד. PowerShell, Python, TypeScript, Bash, PHP הם בעלי תמיכה אקספרימנטלית או לא נתמכות כליל, תלוי בגרסה. פרטים מדויקים, כמו גם תוכניות עתידיות לגבי תמיכת שפות ניתן למצוא בדוקומנטציה רשמית של Azure כאן ו-כאן.
כמו ב-Lambda גם ב-Azure Functions ניתן לערוך קוד ולהריץ את הפונקציה בתוך ממשק הדפדפן, איך האופציה לעלות קובץ ZIP בעזרת GUI חסרה. כן אפשר לבצע זאת דרך API וכלים של CLI, ולכן אינטגרציות עם מערכות CI/CD קיימות ומפותחות די טוב.
גם מיקרוסופט פיתחה תמיכה של Azure Functions ל-IDE. הנה הרשימה החלקית: Visual Studio, VSCode, JetBrains, IntelliJ, Eclipse. יש גם כלי CLI Azure Functions Core Tools, שיכול לעזור מאוד במשימות אוטומציה.
לכל פונקציה יש את חלון הלוגים שהרבה יותר נגיש וידידותי למשתמש מאשר CloudWatch של Lambda, שזה כבר שיפור משמעותי. בנוסף, יש את שירות המעולה Azure Application Insights, שהאינטגרציה עם Functions היא מובנית. המדריך הזה מראה איך להוציא מהשירות הזה את מלוא התועלת.
אז בכל מה שקשור לנושא הלוגים, Azure Functions מנצחים את Lambda בקלילות.
או קיי, אז למדוד את הביצועים ולדון בנושא ה-scale של Azure Functions זה לא עסק פשוט. זוכרים את ה-Hosting Plan שראינו במסך של יצירת פונקציה? אז לא רק שהוא מסבך את עניין יצירת הפונקציה, וגם עושה את האנליזה של ביצועים לעניין מורכב שלא לצורך. לכן, לא נדון כאן בנושא לעומק ורק נציין ששתי התוכניות Consumption plan ו-Premium plan מאפשרות scale אוטומטי עד לגבולות גזרה מסוימים, והתוכנית השלישית, App Service plan מאפשרת להריץ את הפונקציה על התשתית משלה (או לנצל תשתית קיימת) ואז הכללים הם שונים. פרטים מלאים – בדוקומנטציה הרשמית של Azure.
כידוע אבל, כל העולם כולו הוא trade-off אחד גדול, ולכן כמה מהתוכניות האלה מאפשרות ל-Azure Functions להתמודד עם בעיית cold start בצורה הרבה יותר אפקטיבית מאשר שאר במתחרים. תקראו את הפוסט הזה כדי להבין איך בדיוק.
באופן מפתיע, הנושא של ה-security ב-Azure Functions נראה כמו די nice-to-have, וזה עוד יותר מפתיע לאור העובדה שכל פונקציה חדשה נגישה לעולם חיצוני בעת יצירתה. אפשר להוסיף מגוון ממשקים של OAuth, כולל חשבונות גוגל ומיקרוסופט, וכמו כן ניתן להשתמש בפיצ'ר אוטוריזציה מובנה או להחביא את הפונקציה מאחורי API Gateway .VNet, שהוא שירות דומה לשירות VPC של AWS, נגיש רק עבור Premium plan שהוא עדיין בבטא, המדריך הזה בא לעזרה. בשורה התחתונה, Lambda מציעה פיצ'רים הרבה יותר חזקים ומגוונים בכל מה שקשור ל-Security.
בנוסף למודל הסטנדרטי של 1Mקריאות ו-400,000 GB-SECONDS חינמיות, Azure Functions מציעים להשתמש בתשתיות הקיימות של Azure App Services. תוכנית זו, שהיא בעצם חלק מתוכניותHosting שמצוינות בהתחלה, מאפשרות חיסכון לא רע בעלויות. אפשר גם להיעזר ב-Azure Functions cost calculator שגם בעצם מראה שלהריץ Azure Functions תחת עומס לזמן רב יכול לעלות הרבה כסף, ולכן עדיף להשתמש בפתרונות אחרים.
מיקרוסופט משקיעה מאמצים גדולים כדי לסגור את הפאר מול אמזון אבל יש לה עוד המון עבודה – והיא גם הולכת בכיוון שהוא די הפוך לקונצפט של FaaS – במקום לפשט, היא מוסיפה עוד ועוד פרמטרים ומאפיינים שחלקם נראים לא רלוונטיים לעולם ה-Serverless. אבל אם אתם נעולים בעולם של Azure, אתם יכולים להיות די רגועים ולהרגיש בנוח - השירות סה''כ עומד בסטנדרטים די גבוהים.
בנוסף תעיפו מבט גם על Azure Functions Documentation ועל Azure Functions Best Practices.
במאמר הבא, נתמקד בשירותי ה-FaaS של גוגל ושירותים נוספים.
במאמר הקודם למדנו רבות על Serverless, ועכשיו הגיע הזמן להרחיב את הדיון על תחומים טובים אחרים.
יש כאלו שיגידו שפתרונות PaaS, כלומר Platform as a Service של מיקרוסופט, היו תמיד יותר מגוונים ומתקדמים מאשר אלו של אמזון (מיקרוסופט בטוח חושבת כך) אבל השירות של FaaS שנקרא Azure Functions, יצא לאור רק במרץ 2016. בהתאם לטרנד שמאפיין את מיקרוסופט לאחרונה, כל הקוד הוא open source ונמצא ב-GitHub. הרעיון הוא אותו רעיון, אבל המימוש שונה לגמרי.
שימו לב שפונקציה חדשה אינה קיימת בפני עצמה – אלא כחלק מאפליקציה, שיכולה להכיל כמה פונקציות – לא נתייחס לזה כרגע. ניתן לראות ששכבת ה-ACL לא מוצגת ולא מוגדרת בשלב יצירת הפונקציה, כמו כן אין שום התייחסות לשום אמצעי הבטחה אחר כגון אוטנטיקציה וכדומה, וזה חמור במיוחד בהתחשב בעובדה שהפונקציה מחוברת ל-HTTP endpoint שהוא חשוף לעולם חיצוני בצורה אוטומטית. מה שכן נמצא במסך יצירה היא התייחסות ל-Hosting Plan (hosting plan לשירות Serverless, רציני, מיקרוסופט?) בחירת מערכת הפעלה עבור הפונקציה, בחירת שפת תכנות ובחירת Storage – דבר שלא קיים ברמת הקונצפט ב-Lambda.
האפשרות לבחור תבנית מוכנה חסרה גם היא. לסיכום - יש הרבה פרמטרים שבעולם ה-FaaS לא אמורים היו להיות בכלל (מערכת הפעלה? למי אכפת?) אבל דברים חשובים כמו אבטחה, דווקא אינם בנמצא.
להבדיל מ-Lambda, ל-Azure Function קיימים רק שני טריגרים מובנים – שהם HTTP requests וריצה מתוזמנת. בנוסף, קיים אוסף די סטנדרטי של טריגרים עבור כמה שירותי ענן מרכזיים, ואפילו לשירות SMS של Twillio, אבל הגישה אליהם היא במסך נפרד ויש להתקין אותם אחד אחד.
השירות של Azure Functions קיים בשתי גרסאות שונות (יותר פרטים אפשר למצוא כאן) ומבחר שפות נתמכות שונה מגרסה לגרסה, כאשר רמת התמיכה שונה בין שפה לשפה. רמת תמיכה GA קיימת עבור C#, F# ו-JS, כאשר Java 8 נתמכת רק בגרסה 2.x בלבד. PowerShell, Python, TypeScript, Bash, PHP הם בעלי תמיכה אקספרימנטלית או לא נתמכות כליל, תלוי בגרסה. פרטים מדויקים, כמו גם תוכניות עתידיות לגבי תמיכת שפות ניתן למצוא בדוקומנטציה רשמית של Azure כאן ו-כאן.
כמו ב-Lambda גם ב-Azure Functions ניתן לערוך קוד ולהריץ את הפונקציה בתוך ממשק הדפדפן, איך האופציה לעלות קובץ ZIP בעזרת GUI חסרה. כן אפשר לבצע זאת דרך API וכלים של CLI, ולכן אינטגרציות עם מערכות CI/CD קיימות ומפותחות די טוב.
גם מיקרוסופט פיתחה תמיכה של Azure Functions ל-IDE. הנה הרשימה החלקית: Visual Studio, VSCode, JetBrains, IntelliJ, Eclipse. יש גם כלי CLI Azure Functions Core Tools, שיכול לעזור מאוד במשימות אוטומציה.
לכל פונקציה יש את חלון הלוגים שהרבה יותר נגיש וידידותי למשתמש מאשר CloudWatch של Lambda, שזה כבר שיפור משמעותי. בנוסף, יש את שירות המעולה Azure Application Insights, שהאינטגרציה עם Functions היא מובנית. המדריך הזה מראה איך להוציא מהשירות הזה את מלוא התועלת.
אז בכל מה שקשור לנושא הלוגים, Azure Functions מנצחים את Lambda בקלילות.
או קיי, אז למדוד את הביצועים ולדון בנושא ה-scale של Azure Functions זה לא עסק פשוט. זוכרים את ה-Hosting Plan שראינו במסך של יצירת פונקציה? אז לא רק שהוא מסבך את עניין יצירת הפונקציה, וגם עושה את האנליזה של ביצועים לעניין מורכב שלא לצורך. לכן, לא נדון כאן בנושא לעומק ורק נציין ששתי התוכניות Consumption plan ו-Premium plan מאפשרות scale אוטומטי עד לגבולות גזרה מסוימים, והתוכנית השלישית, App Service plan מאפשרת להריץ את הפונקציה על התשתית משלה (או לנצל תשתית קיימת) ואז הכללים הם שונים. פרטים מלאים – בדוקומנטציה הרשמית של Azure.
כידוע אבל, כל העולם כולו הוא trade-off אחד גדול, ולכן כמה מהתוכניות האלה מאפשרות ל-Azure Functions להתמודד עם בעיית cold start בצורה הרבה יותר אפקטיבית מאשר שאר במתחרים. תקראו את הפוסט הזה כדי להבין איך בדיוק.
באופן מפתיע, הנושא של ה-security ב-Azure Functions נראה כמו די nice-to-have, וזה עוד יותר מפתיע לאור העובדה שכל פונקציה חדשה נגישה לעולם חיצוני בעת יצירתה. אפשר להוסיף מגוון ממשקים של OAuth, כולל חשבונות גוגל ומיקרוסופט, וכמו כן ניתן להשתמש בפיצ'ר אוטוריזציה מובנה או להחביא את הפונקציה מאחורי API Gateway .VNet, שהוא שירות דומה לשירות VPC של AWS, נגיש רק עבור Premium plan שהוא עדיין בבטא, המדריך הזה בא לעזרה. בשורה התחתונה, Lambda מציעה פיצ'רים הרבה יותר חזקים ומגוונים בכל מה שקשור ל-Security.
בנוסף למודל הסטנדרטי של 1Mקריאות ו-400,000 GB-SECONDS חינמיות, Azure Functions מציעים להשתמש בתשתיות הקיימות של Azure App Services. תוכנית זו, שהיא בעצם חלק מתוכניותHosting שמצוינות בהתחלה, מאפשרות חיסכון לא רע בעלויות. אפשר גם להיעזר ב-Azure Functions cost calculator שגם בעצם מראה שלהריץ Azure Functions תחת עומס לזמן רב יכול לעלות הרבה כסף, ולכן עדיף להשתמש בפתרונות אחרים.
מיקרוסופט משקיעה מאמצים גדולים כדי לסגור את הפאר מול אמזון אבל יש לה עוד המון עבודה – והיא גם הולכת בכיוון שהוא די הפוך לקונצפט של FaaS – במקום לפשט, היא מוסיפה עוד ועוד פרמטרים ומאפיינים שחלקם נראים לא רלוונטיים לעולם ה-Serverless. אבל אם אתם נעולים בעולם של Azure, אתם יכולים להיות די רגועים ולהרגיש בנוח - השירות סה''כ עומד בסטנדרטים די גבוהים.
בנוסף תעיפו מבט גם על Azure Functions Documentation ועל Azure Functions Best Practices.
במאמר הבא, נתמקד בשירותי ה-FaaS של גוגל ושירותים נוספים.
הודעתך לא התקבלה - נסה שוב מאוחר יותר
Oops! Something went wrong while submitting the form