איך להתחיל לשבור מונוליט למיקרו סרביסים

01/06/2021

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

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

1. הקימו סרביס שמבצע פעולה מסוימת בצורה עצמאית ללא בסיס נתונים

אתר טוקוד כתוב כולו ב Rails אבל כשהייתי צריך בוט טלגרם שיפרסם את הפוסטים החלטתי לנסות להקים Micro Service באליקסיר שיטפל רק בזה. הקוד לבוט נמצא כאן: https://github.com/ynonp/tocode_bot.

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

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

2. הקימו סרביס שמבצע משימה מחזורית ורושם את התוצאה לבסיס נתונים שלו

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

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

3. הקימו API Gateway

אחרי שהצלחתם להוציא חלק מהפונקציונאליות לסרביסים שלא שומרים מידע והתנסיתם בבניית סרביסים שכן שומרים אפשר להמשיך לאתגר הבא שהוא החיבור בין הסרביסים. התקנת API Gateway תתן לכם מקום מרכזי בו תוכלו לערוך את בקשות הרשת הנכנסות וליצור קשר בין כל הסרביסים שמטפלים באותה בקשה. באמצעות API Gateway נוכל להוסיף למשל שדה Request ID לכותרות ה HTTP של הבקשה ולהעביר אותו גם בבקשות העוקבות בין Services, כך שבלוג כל ההודעות שקשורות לטיפול בהודעה מסוימת יישמרו יחד.

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

4. הקימו מערכת לאיסוף וניהול לוגים

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

5. הקימו סרביס שמנהל הזדהות

הצעד הבא והאחרון מבחינת התשתית הוא הקמת סרביס הזדהות. זה בעצם הקו המפריד בין מערכת מונוליט עם קצת סרביסים למערכת Micro Services עם מונוליט קטן. סרביס ייעודי להזדהות שמחובר ל API Gateway אומרת שהסרביסים השונים לא צריכים להתעסק בניהול משתמשים וכל התקשורת בנושא המשתמשים עוברת דרך JWT שהקלאיינט מחזיק אצלו. ברגע שבניתם את זה ניטרלתם את צוואר הבקבוק המרכזי במערכת ומפה אפשר להמשיך לשבור את הקוד לעוד ועוד סרביסים קטנים.

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

6. המשיכו בקצב שלכם

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

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