736
4

RabbitMQ המדריך למשתמש – חלק 1

736
זמן קריאה: 4 דקות

מבוא

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

אחת הדרכים לתקשר היא לחבר שתי מערכות או יותר לתור הודעות (תור הודעות: כלי התקשורת בין תהליכים / סרביסים שונים שמעבירים הודעה ותוכן מאחד לשני)

תוכן עניינים

קצת רקע

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

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

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

RabbitMQ הוא תור פשוט יחסית, קל להתקנה, אחד ממנהלי ההודעות הפופולרים ביותר ומשתמשים בו ארגונים גדולים כמו: Reddit, Trivago, Vine, Stack, 500px ועוד חברות רבות נוספות.

מתי ולמה נרצה להשתמש בRabbitMQ?

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

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

Flow של העברת ההודעות

  1. המפיץ מפרסם הודעה לExchange (נקרא לו “המתווך” מעתה), למתווך צריך להגדיר את הסוג כשיוצרים אותו – ארחיב על כך בהמשך.
  2. הExchange – המתווך – הוא למעשה מעין “גשר” בין המפיץ לתורים ובעקיפין לצרכן, הוא מקבל את ההודעה וכעת אחראי על ניתוב ההודעה לתור הנכון על ידי פרמטרים שונים כמו מפתח ועוד..
    מנגנון ה-Exchange מתוחכם ויש לו יכולות מגוונות כמו לפצל את ההודעות לפי פרטמרים מסויימים או לשכפל את ההודעות למספר צרכנים.
  3. יש ליצור קישורים (Bindings) מהמתווך אל התורים.
    במקרה זה, קיימים שלושה קישורים לתורים שונים. המתווך מנתב את ההודעה לתורים בהתאם לתכונות ההודעה.
  4. התורים עובדים בשיטת FIFO (First In First Out), ההודעות מחכות בתור עד אשר ההודעה טופלה על ידי הצרכן.
  5. הצרכן מקבל את ההודעה ומעבד / מפרסר אותה לפי הצורך.

סוגי ה-Exchange

כפי שכבר אמרנו, הExchange הוא המתווך ואחראי על קבלת ושליחת ההודעות לתורים הרלוונטים

לRabbitMQ ישנם ארבעה סוגים של מתווכים:

  1. Direct – ההודעות מועברות באופן ישיר לתור המתאים לפי מפתח הניתוב שנמצא בהודעה (בד”כ המפתח יהיה המפתח של התור)
  2. Fanout – המתווך משכפל כל הודעה שהוא מקבל ושולח את העותק שלה לכל התורים המקושרים אליו.
  3. Topic – במקרה הזה ההודעה משוכפלת ומנותבת לתורים מסויימים לפי סיווג שקיים במפתח וקריטריונים שנקבע מראש.
  4. Headers – במקרה זה ההודעות מנותבות ע”פ ארגומנטים מסויימים שקיימים בHeaders ולפי ערכים מסויימים.

יתרונות RabbitMQ 

אסינכרוניות

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

קוד פתוח

בסופו של יום מדובר במערכת קוד פתוח אמינה וותיקה – קיימת בשוק מאז 2007 ומתעדכנת ומשתפרת חדשות לבקרים, לRabbitMQ יש קהילה חזקה וצוות פעיל במיוחד שדואג להוסיף תכונות חדשות ולשפר את הפיצ’רים הקיימים.
RabbitMQ תומך רשמית ב- Java, Spring, .NET, PHP, Python, Ruby, JavaScript, Go, Elixir, Objective -C, Swift .

תמיכה במגוון פרוטוקולים

RabbitMQ תומך במגוון פרוטוקולים נפוצים כמו: AMQP, MQTT, STOMP וכו ‘, כאשר הוא מיישם באופן מקורי את AMQP 0.9.1.
היכולת של RabbitMQ לתמוך בפרוטוקולי הודעות שונים פירושה שניתן להשתמש בה בתרחישים רבים והיא מאפשרת לך להחליף את מתווך RabbitMQ שלך בכל מתווך מבוסס AMQP או להפך – להחליף מנגנון תור הודעות שכבר קיים אצלכם בקוד.

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

Decoupling

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

Lightweight

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

לסיכום

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

קישורים שימושיים

RabbitMQ Docs

RabbitMQ Tutorials

אמיר שטיימן
WRITEN BY

אמיר שטיימן

Backend Engineer @Cynet
ביום יום מפתח Backend בסביבת SaaS, מיקרו סרביסים בשילוב של מערכות מבוזרות. בזמני הפנוי - לומד ומשתדרג בעולם התוכנה, אוהד מכבי חיפה, פלייסטיישן ובירה עם חברים :)
Linkedin | Twitter

4 thoughts on “RabbitMQ המדריך למשתמש – חלק 1

  1. […] כמובן בהמשך לפוסט הקודם בו הסברתי מה זה RabbitMQ ותור […]

  2. תודה רבה!
    בתור מהנדסת שעובדת הרבה עם RabbitMQ מצאתי עצמי נעזרת מאד במאמר

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

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *