לדלג לתוכן

תורי הודעות מוסבר בפשטות - למה בקאנד אמיתי צריך את קפקה

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

הבעיה שתורי הודעות פותרים

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

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

הפתרון - לא לחכות, אלא להודיע

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

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

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

אז מה זה בעצם Kafka

Kafka הוא אחד הכלים הכי נפוצים בעולם לניהול תורי הודעות בקנה מידה גדול. יש בו כמה מושגים בסיסיים שכדאי להכיר - producer הוא השירות ששולח הודעה, consumer הוא השירות שמקבל ומעבד אותה, ו-topic הוא בעצם "הערוץ" שההודעות זורמות דרכו, כמו הקיר עם הפתקים במסעדה.

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

דוגמה קונקרטית שממחישה את זה

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

מתי בכלל צריך את זה, ומתי זה overkill

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

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

איפה לומדים את זה בצורה מסודרת

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

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

הצטרפו לקהילה בדיסקורד

לסיכום

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