דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. Load balance עם NGINX + PM2

Load balance עם NGINX + PM2

מתוזמן נעוץ נעול הועבר תכנות
21 פוסטים 6 כותבים 362 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    השיב לnigun ב נערך לאחרונה על ידי
    #12

    לגבי Clusster ב PM2
    אני לא מבין מה הדרך שהוא גורם לכל המופעים להאזין לכל הפורטים?
    יש למישהו הסבר?
    (עדיין לא הצלחתי להוכיח שבאמת כולם מאזינים וה Reload עובד כראוי)

    א תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      אהרן
      השיב למנצפך ב נערך לאחרונה על ידי
      #13

      @מנצפך אמר בLoad balance עם NGINX + PM2:

      אני לא מבין מה הדרך שהוא גורם לכל המופעים להאזין לכל הפורטים?

      מה חסר לך בהסבר הזה?

      @dovid אמר בLoad balance עם NGINX + PM2:

      כולם תהליכי משנה שלו והם מקבלים לעבודה בקשות שהמסטר קיבל

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

      מנצפךמ תגובה 1 תגובה אחרונה
      0
      • מנצפךמ מנותק
        מנצפךמ מנותק
        מנצפך
        השיב לאהרן ב נערך לאחרונה על ידי
        #14

        @אהרן
        אבל התהליך צריך להאזין לאיזשהו פורט.
        אני פשוט לא מכיר את התמיכה של nodejs ב cluster
        אבל לא חשבתי שזה מאפשר לכולם לרוץ על אותו פורט.

        אעשה עוד בדיקות

        א תגובה 1 תגובה אחרונה
        1
        • א מנותק
          א מנותק
          אהרן
          השיב למנצפך ב נערך לאחרונה על ידי
          #15

          למה אתה חושב ש:
          @מנצפך אמר בLoad balance עם NGINX + PM2:

          אבל התהליך צריך להאזין לאיזשהו פורט.

          מחייב
          @מנצפך אמר בLoad balance עם NGINX + PM2:

          זה מאפשר לכולם לרוץ על אותו פורט.

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

          מנצפךמ תגובה 1 תגובה אחרונה
          0
          • מנצפךמ מנותק
            מנצפךמ מנותק
            מנצפך
            השיב לאהרן ב נערך לאחרונה על ידי
            #16

            בהמשך ל cluster- מי עושה את הloadbalance כשאני משתמש ב cluster של NodeJS?

            כלומר, האם יש לי שליטה על החלוקה בין תהליכי המשנה?
            כי הרצון שלי הוא שלא יהיה עומס של RAM ו CPU על אף תהליך.

            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב למנצפך ב נערך לאחרונה על ידי
              #17

              @מנצפך אמר בLoad balance עם NGINX + PM2:

              עומס של RAM

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

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              dovidD תגובה 1 תגובה אחרונה
              2
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לyossiz ב נערך לאחרונה על ידי dovid
                #18

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

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                מנצפךמ תגובה 1 תגובה אחרונה
                3
                • מנצפךמ מנותק
                  מנצפךמ מנותק
                  מנצפך
                  השיב לdovid ב נערך לאחרונה על ידי
                  #19

                  לסיכום:
                  בשביל PM2 צריך לעשות כך:
                  אין צורך לשנות את הקוד . יש רק להריץ את התהליך ב cluster mode.
                  בשביל לבצע reload ללא חשש של נפילה של בקשות חשובות באמצע (כגון ביצוע עיסקאות, או עדכונים במסד נתונים), יש להאזין ל SIGINT, ברגע שאני מקבל SIGINT, אני סוגר את השרת (את התהליך הנוכחי) לקבלת בקשות חדשות, (ע"י מתודת close), וממילא NodeJs יעביר את הבקשות לשרת השני.
                  חשוב להגדיר ל PM2 את הזמן לביצוע kill לאחר ה SIGINT, כי הזמן הדפולטיבי ייתכן שלא יספיק. (לכאורה אין בעיה לעשות KILL גם לאחר עשרות שניות).
                  במידה ואכן מבצעים עדכונים ל DB או שמבצעים שאילתות חשובות החוצה (כנ"ל), אולי כדאי להגדיר Flag גלובלי, שמראה מתי מחכים לתשובה, ולבצע timer כל עוד שהוא למעלה, ברגע שהוא למטה, אפשר לסגור את התהליך ב process.exit

                  אשמח לחוו"ד

                  מנצפךמ תגובה 1 תגובה אחרונה
                  3
                  • מנצפךמ מנותק
                    מנצפךמ מנותק
                    מנצפך
                    השיב למנצפך ב נערך לאחרונה על ידי
                    #20

                    בשביל לסגור את השרת מבלי לאבד בקשות קיימות, יש להשתמש פשוט ב:

                      server.close(err => {
                            console.log('Closed. ', err);
                            process.exit(0);
                        })
                    
                    

                    זה מחזיר callbcak ברגע שכל הבקשות הסתיימו והוחזרו. ובקשות חדשות לא מתקבלות ברגע שעושים close

                    מנצפךמ תגובה 1 תגובה אחרונה
                    2
                    • מנצפךמ מנותק
                      מנצפךמ מנותק
                      מנצפך
                      השיב למנצפך ב נערך לאחרונה על ידי
                      #21

                      אגב, השימוש ב cluster ב PM2 הוא שימושי מאוד לא דווקא כשרוצים scale. אלא בכלל בשביל zero time down.
                      כלומר, גם אם מריצים רק instance אחד, כשעושים reload אז PM2 יודע להרים מופע נוסף ורק אז לסגור את הישן.

                      תגובה 1 תגובה אחרונה
                      1

                      • 1
                      • 2
                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום