6 מערכות התורים המובילות עבור מפתחי Backend

האם אתה מחפש מערכת תורים? או אולי אתה מחפש אחד טוב יותר? הנה כל המידע שאתה צריך!


מערכות תורים הן הסוד השמור ביותר של פיתוח backend.

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

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

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

מהי מערכת תורים?

נתחיל מהבנה מהו תור.

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

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

מדוע אתה זקוק למערכות תורים?

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

עיבוד רקע

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

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

ביצוע מקביל

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

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

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

התאוששות מכישלון

בדרך כלל אנו לא חושבים על כישלון כמפתחי אתרים. אנו מקבלים זאת כמובן מאליו שהשרתים שלנו ו- APIs בהם אנו משתמשים תמיד יהיו מקוונים. אבל המציאות שונה – הפסקות רשת נפוצות מדי, ויישומי ה- API המצוינים שאתה מסתמך עליהם עשויים להיות מושפעים בגלל בעיות תשתית (לפני שאתה אומר “לא אני!”, אל תשכח את הפסקת ענק S3 של אמזון). לכן, לחזור לדוגמא לדיווח, אם חלק מדור הדוחות שלך מחייב אותך להתחבר לממשק ה- API לתשלומים והקשר הזה מושבת במשך 2 דקות, מה קורה ל -200 הדוחות שנכשלו?

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

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

Redis

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

היתרונות של Redis הם:

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

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

לימוד Redis זה קל.

RabbitMQ

ישנם כמה הבדלים עדינים בין Redis ל- RabbitMQ, אז בואו נצא אותם מהדרך ראשונה.

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

אם אתה חושב על זה, ניתן לחשוב על תורי משימות גם כמערכת העברת הודעות, שם ניתן לחשוב על המתזמן, על העובדים ועל “מגשי העבודה” על ישויות המשתתפות בהעברת הודעות..

ל- RabbitMQ היתרונות הבאים:

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

מתי להשתמש ב- RabbitMQ? הייתי אומר שזו בחירה נהדרת כשאתה יודע שאתה צריך להשתמש בהודעות אסינכרוניות אך אינך מוכן להתמודד עם המורכבות הגוברת של כמה מאפשרויות התור האחרות ברשימה זו (ראה להלן).

ActiveMQ

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

כאן מצטיין ActiveMQ:

  • זה מיושם ב- Java וכך יש בו שילוב Java מסודר באמת (עוקב אחר תקן JMS).
  • פרוטוקולים מרובים נתמכים: AMQP, MQTT, STOMP, OpenWire וכו ‘.
  • מטפל באבטחה, ניתוב, תפוגה של הודעות, ניתוח וכו ‘מחוץ לתיבה.
  • תמיכה אפויה בדפוסי העברת הודעות מבוזרים, וחוסכת לך זמן וטעויות יקרות.

זה לא אומר ש- ActiveMQ זמין רק לג’אווה. יש לו לקוחות עבור Python, C / C ++, Node, .Net ומערכות אקולוגיות אחרות, כך שלא צריכים להיות חששות להתמוטטות אפשרית בעתיד. חוץ מזה, ActiveMQ בנוי על סטנדרטים פתוחים לחלוטין ובניית לקוחות קלים משלך צריכה להיות קלה.

כל מה שנאמר ונעשה, אנא שימו לב ש- ActiveMQ הוא רק מתווך ואינו כולל backend. אתה עדיין צריך להשתמש באחד מהתכניות הנתמכות כדי לאחסן את ההודעות. צירפתי את זה כאן כי זה לא קשור לשפת תכנות מסוימת (כמו פתרונות פופולריים אחרים כמו סלרי, Sidekiq וכו ‘)

אמזון MQ

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

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

SQS של אמזון

אנחנו לא יכולים לצפות שאמזון תשב בשקט כשמדובר בקטעי תשתית קריטיים, נכון? ��

וכך יש לנו SQS של אמזון, שהוא שירות תורים פשוט ומתארח (ממש תרתי משמע) על ידי ענקית ה- AWS הידועה. שוב, ההבדלים העדינים חשובים, אז שימו לב כי ל- SQS אין מושג העברת המסרים. כמו Redis, זהו backend פשוט לקבל ולהפיץ חלוקת משרות בתורים.

אז מתי תרצה להשתמש ב- Amazon SQS? הנה כמה סיבות:

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

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

Beanstalkd

Beanstalkd קיים כבר זמן רב ומהווה backend שנבחן בקרב, מהיר וקל לתור עבודה. ישנם כמה מאפיינים של Beanstalkd הגורמים להבדל משמעותית מ- Redis:

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

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

סיכום

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

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map