מדריך: כך תימנעו מאיבוד שליטה במיקרו-סרוויסים באמצעות Dapr

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

לפרויקט Dapr יש כ-17K כוכבים ב-GitHub וחברות רבות משתמשות בו (צילום: Dreamstime)

מאת עמית מור, ארכיטקט, וחוסיין עיסא, מוביל טכנולוגי בחברת At-Bay

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

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

בעיות הנדסיות בפיתוח מיקרו-סרוויסים

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

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

1. Communication. "אף סרוויס אינו אי", כלומר – לרוב ישנו צורך שסרוויס אחד יתקשר עם אחרים. בנוסף, קיימים אופנים שונים לתקשורת – סינכרוניים או א-סינכרוניים, ובפרוטוקולים שונים (gRPC ,HTTP וכדומה). יש לטפל בגילוי שירותים אחרים (service discovery) וכן בכשלונות בתקשורת, ולעתים תאלץ המפתחת לממש את כל המנגנונים יחד על מנת להשיג תקשורת מיטבית עם שאר הסרוויסים ולתת מענה לבעיות הללו.

2. State and data management. לרוב, מיקרו-סרוויסים יתחזקו מידע צמוד אליהם וישמרו אותו באופן המתאים ביותר. זה עשוי להשתנות בין סרוויס לסרוויס ואף להיות מגוון ברמת הסרוויס היחיד – אם לאותו סרוויס נחוץ לדוגמה לשמור מידע גם ב-Database, גם ב-Cache וגם ב-Object storage (כגון S3).

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

מה זה Dapr ואיך הוא עוזר לכם?

Dapr (דאפר) הוא פרויקט שהוקם במטרה לפתור חלק מהבעיות הללו: מדובר בטכנולוגיית אופן סורס שנוצרה על ידי כמה חברות מובילות בשוק, כאשר הגדולה והמשמעותית בתרומתה היא Microsoft, שאנשיה מובילים את הפרויקט ברמת התכנון והניהול עד היום. נכון לזמן כתיבת שורות אלו, לפרויקט יש כ-17K כוכבים ב-GitHub וחברות רבות משתמשות בו.

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

האבסטרקציה ש-Dapr מספק מעל משאבי תשתיות והאופן בו מתממשקים אליו הצרכנים (צילום מסך)

הפרויקט הוא למעשה שירות שפרוס בין היתר כ-Sidecar בצמוד לאפליקציה הצורכת את שירותיו, והוא בעצמו מכיל מראש מימושים לכל מיני סוגים שונים של רכיבים (Components). המימושים ברובם נתרמו מהקהילה וניתן להוסיף בקלות רכיבים שאינם מצויים כיום בפרויקט. הקומפוננטות מחולקות לכמה סוגים, לדוגמה: קומפוננטות לניהול State, קומפוננטות לתקשורת ישירה בין סרוויסים וכן קומפוננטות לשימוש ב-Pub/Sub.

כלומר, על מנת להשתמש ב-Pub/Sub מסוג מסוים כל שעלינו לעשות הוא להגדיר ל-Dapr שאנחנו מעוניינים לצרוך משאב Pub/Sub מהסוג הרצוי, נניח מסוג Kafka, ולכנות אותו בשם – לדוגמה, "atbay-pubsub". ברגע שביצענו זאת הקומפננטה הרלוונטית ב-Dapr תטען והוא יבצע את החיבור אל השירות המבוקש כפי שהגדירה המשתמשת. לאחר מכן, על מנת לפנות אל שירות ה-Pub/Sub, כל שעלינו לעשות הוא להוציא בקשת publish אל Dapr תוך ציון שם השירות המבוקש. בקשת ה-Publish יכולה להיות בקשת HTTP פשוטה ל-Endpoint ב-Dapr sidecar.

מעבר לכך, וזהו לב העניין, על מנת להשתמש ב-Pub/Sub שהגדרנו ב-Dapr אין צורך לפרט מהו סוג השירות הספציפי או לתת פרטים נוספים (פרט לכינוי שהענקנו לשירות). בכך בעצם קיבלנו אבסטרקציה מלאה מעל המימוש הספציפי של ה-Pub/Sub. במקרה שבזמן הפיתוח על המחשב המקומי Kafka אינו זמין לנו, אפשר להגדיר ברמת מחשב הפיתוח עליו אנו עובדות ש"atbay-pubsub" הוא בעצם שירות שמבוסס על Redis, ללא צורך לבצע כל שינוי בקוד שצורך מה-Pub/Sub המדובר.

בנוסף, משום שכל תעבורת הנתונים של האפליקציות שמשתמשות ב-Dapr עוברת דרך ה-Sidecar, אנחנו נהנים גם מיכולות ה-Tracing המובנות שלו.

כך Dapr מפשט שליחה וקבלה של הודעות אסינכרוניות. ניתן בקלות להחליף מתשתית מבוססת Redis לכל תשתית Pub/Sub שנתמכת על ידי קומפוננטה מתאימה של Dapr (צילום מסך)

כמו כן, על מנת להקל על המפתחת מבחינת דיפלויימנט, Dapr יודע לייצר את המשאבים המוגדרים של הקומפוננטות שלנו. כלומר, אם ביקשנו להשתמש ב-Pub/Sub מסוג SNS/SQS (שירותי AWS), הוא יידע לייצר אותם ולקנפג אותם אוטומטית לפי מה שסופק לו על ידי המשתמשת בהגדרת הקומפוננטה. הגדרת קומפוננטה לשימוש היא למעשה פעולה פשוטה שמסתכמת בבניית קובץ yaml סטנדרטי והעברתו אל ה-Sidecar.

מכיוון שתעבורת הנתונים בפרוטוקולים השונים (Pub/Sub ,Direct invocation וכו') עוברת קדימה ואחורה דרך ה-sidecar של Dapr, אנחנו מקבלים יכולת לנטר, לאבחן ולראות את ה-Traces של הפעולות שבוצעו בשימוש בפרויקט.

לדוגמה, אם יש פרסום של הודעה בטווח של Pub/Sub, ה-Sidecar של המפרסם ושל הצרכן כבר מקליטים את ה-Trace בכל נקודה, כך שבקלות ניתן יהיה לראות ולנתח את ה-Latency בכל אחת מהפעולות המעורבות בתהליך. בנוסף, אם מדובר בתהליך תקשורת שמורכב מכמה Traces, ניתן יהיה לראות את התגלגלות התהליך וצעדיו בצורה נוחה באמצעות Dapr. על מנת לראות באופן נח וקל את ה-Traces, ניתן לצרוך אותם בכל כלי איסוף שתומך ב-OpenTelemetery.

ריבוי צרכנים עם רכיב SNS/SQS ואפשרויות הניטור המגוונות עם Dapr. ניתן לאסוף מטריקות גם לכל כלי ניטור התומך בפורמט OpenTelemetry

Dapr ורכיב ה-SNS/SQS

בואו נבין כיצד בנויה קומפוננטת ה-SNS/SQS שהזכרנו קודם, שאנחנו ב-At-Bay תרמנו לפיתוחה, וכיצד השמשנו אותה לצרכי התשתית שלנו בסביבות הפריסה השונות.

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

  • SNS Topic – בשם הלוגי שאנחנו רוצים לפרסם אליו ולצרוך הודעות ממנו.
  • SQS Queue – בשם של האפליקציה הצורכת (שעושה למעשה subscribe).
  • SNS-SQS Subscription – חיבור לוגי שמפנה את כל ההודעות מה-topic אל ה-queue.

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

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

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

פתרונות מבוססי מיקרו-סרוויסים הם מורכבים מבחינות רבות, ולכן חברות רבות מסתייעות במגוון רב של כלים על מנת להתמודד עם בעיות אלו. Dapr מציע פתרון מאוחד בסגנון one stop shop שמפשט את ההתמודדות איתן, וזאת על ידי ארכיטקטורה פשוטה בדמות side-car שמספק שירותים מגוונים למיקרו-סרוויס הצורך אותו. לכן מדובר בפתרון מצוין הן לחברות שכבר עושות שימוש במיקרו-סרוויסים והן לכאלו שרק מתחילות.

הכתבה בחסות At-Bay

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

כתב אורח

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

הגב

1 תגובה על "מדריך: כך תימנעו מאיבוד שליטה במיקרו-סרוויסים באמצעות Dapr"

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

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

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

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

wpDiscuz

תגיות לכתבה: