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

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

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

וויסות עומסים של שרתים

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

    אולי חלק מנידון זה שייך לסעיף חומרה ולא לתכנות, אבל אני צריך את עזרת המתכנתים ולא כ"כ את הטכנאים...
    אני משתמש בשרת לינוקס על AWS והתקנתי עליו LAMP.
    אני מתכנת מערכות טלפוניות באמצעות API עם ימות המשיח.
    רוב המערכות שלי בדר"כ זה PHP וMYSQL שמותקן על השרת והגישה עליו היא
    ב localhost.
    ב"ה בדר"כ לא חוויתי תקלות ואני מסתפק בשרת t3.small של 2 מעבדים ו 2 ראם.
    בקמפיין של עטרת שלמה היה ב"ה עומס גדול, בפרט בערב, והתחלתי לחוש שהשרת שלי נושם עמוק מידי, לקח לו הרבה זמן תגובה.
    מה שעשיתי למעשה, זה שהתחלתי לחלק את השלוחות לשרת אחר שהיה לי מוכן (שלוחת אידיש עבדה יותר מהר מי ששם לב, כי זה העברתי מיד על שרת נפרד, והתנועה בו הייתה דלילה יותר) ולאחר מכן הרמתי עוד שלושה העתקים של השרת ויצרתי שלוחה רנדומאלית בימות המשיח שתפנה כל פעם לשלוחה אחרת, שכל שלוחה מחוברת לשרת אחר.
    ae1f9dec-ad20-4e37-b2f6-9fac55c117f8-image.png

    למעשה שלוחת שמיעת מצב הקמפיין לא היה מחובר לד"ב, אלא חיבור ברגע אמת לשרתי צ'רידי לשליפות מצב הקמפיין. (ע"י file_get_contents)
    בעת העומסים של הקמפיין הCPU היה בסך הכל בסביבות ה20 ,כאשר רובו הוא של httpd השרת אפאצ'י.
    בדר"כ עיקר הCPU הוא מה SQL.
    ובשרתים החדשים שהרמתי לקמפיין ג"כ הCPU נע בסביבות 10 רובו של httpd.
    יש לי כמה נקודות שברצוני להבין.
    א. נראה שהבעיה לא הייתה ביכולת המעבד כי כמו שכתבתי הCPU היה נמוך.
    א"כ מה כן הבעיה?
    ב. אם אני רוצה לאזן עומסין בין כמה שרתים, איך עושים את זה, והשאלה מורכבת בעיקר לגבי מערכות שכן צורכות SQL ואני צריך ד"ב אחיד, איך עושים בצורה שלא יאט את המהירות (האם יש מצב להגיע לאותו מהירות כמו בlocalhost כאדר הד"ב בשרת נפרד?)
    ואיך זה מבחינת העלאת הקבצים לשרתים? איך יוצרים קבוצת שרתים שכולם מתעדכנים בקבצים חדשים? ואיך יוצרים IP שמחולק בצורה אוטומטית לפי עומסים, בין השרתים?
    או אולי לבודד מראש כל מערכת לשרת/ים נפרד/ים, לפי העומס הצפוי להיות במערכת זו? א"כ מה לעשות לגבי המערכות הקבועות?
    או להישאר עם שלוחה רנדומאלית בימות, שהיא תווסת את העומסים.

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

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

    אשמח לחוות הדעת של המומחים כאן, איך ומה ניתן לעשות לגבי הנ"ל.
    תודה

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

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

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

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

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

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

      יש גם את ASP CORE שמשלב בין שתי הדרכים: כל בקשה היא טריד נפרד אבל באותו פרוסס וממילא מצד אחד יש תקורה קטנה של יצירת התהליכים אבל מאידך יש את מעלת הmulti-treading.
      אני, אופיינית, תומך בדרך זו 🙂

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

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

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

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

        @dovid
        תן לי להבין את ההבדל בין PHP לנוד כאשר יש לך לדוגמא 20 בקשות באותה שניה ממש.

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

          @חוקר אמר בוויסות עומסים של שרתים:

          @dovid
          תן לי להבין את ההבדל בין PHP לנוד כאשר יש לך לדוגמא 20 בקשות באותה שניה ממש.

          בנוד טיפול בבקשות זה כמו לולאת while. הוא גם יכול אלף באותה שניה.
          בPHP זה דומה לפתיחת חמש מסמכי WORD במקביל.
          אבל עזוב פילוסופיה ורוץ לget started.

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

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

          תגובה 1 תגובה אחרונה
          7
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי
            #5

            @dovid כל מילה פנינה כרגיל 🙂
            אולי שווה ל @חוקר להשתמש בבלאנס מוכן במקום השלוחות הרנדומליות.
            נראה לי שcloudflare מספק את זה גם בשירות החינמי.
            (בכל מקרה זה יפתור לו את הבעייה רק של השליחה אליך מהמרכזייה של ימות. ובלי קשר לsql)

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

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

            וכמובן שגם באסטריסק אתה יכול לעבוד מול nodejs, אבל לא חייב.

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            4
            • M מנותק
              M מנותק
              magicode
              כתב ב נערך לאחרונה על ידי
              #6

              לדעתי הטעות שלך שהשתמשת בזה file_get_contents יותר מידי הרבה.

              clickoneC תגובה 1 תגובה אחרונה
              5
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                השיב לmagicode ב נערך לאחרונה על ידי
                #7

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

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                תגובה 1 תגובה אחרונה
                2
                • M מנותק
                  M מנותק
                  magicode
                  כתב ב נערך לאחרונה על ידי
                  #8

                  יש עוד דבר.
                  וזה מגבלות מובנות בלינוקס שאפשר להגדיל אם רוצים.
                  מה שיכול להפריע פה. זה מגבלת חיבורים פתוחים. ומגבלת כמות תהליכים.
                  תריץ את זה
                  ulimit -a
                  תראה את כל המגבלות.

                  ח תגובה 1 תגובה אחרונה
                  4
                  • ח מנותק
                    ח מנותק
                    חוקר
                    השיב לmagicode ב נערך לאחרונה על ידי
                    #9

                    @magicode אמר בוויסות עומסים של שרתים:

                    יש עוד דבר.
                    וזה מגבלות מובנות בלינוקס שאפשר להגדיל אם רוצים.
                    מה שיכול להפריע פה. זה מגבלת חיבורים פתוחים. ומגבלת כמות תהליכים.
                    תריץ את זה
                    ulimit -a
                    תראה את כל המגבלות.

                    core file size (blocks, -c) 0
                    data seg size (kbytes, -d) unlimited
                    scheduling priority (-e) 0
                    file size (blocks, -f) unlimited
                    pending signals (-i) 7787
                    max locked memory (kbytes, -l) 64
                    max memory size (kbytes, -m) unlimited
                    open files (-n) 1024
                    pipe size (512 bytes, -p) 8
                    POSIX message queues (bytes, -q) 819200
                    real-time priority (-r) 0
                    stack size (kbytes, -s) 8192
                    cpu time (seconds, -t) unlimited
                    max user processes (-u) 7787
                    virtual memory (kbytes, -v) unlimited
                    file locks (-x) unlimited

                    אומר משהו?

                    תגובה 1 תגובה אחרונה
                    0
                    • ח מנותק
                      ח מנותק
                      חוקר
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @dovid @clickone
                      אסכם את השאלות:
                      איך שאני עובד היום, שאני עדיין עובד עם ימות המשיח (אין כ"כ זמן לחשוב על אסטריסק לבד), ועדיים עם PHP.

                      1. מה ההבדל בבזבוב משאבים בין file_get_contents ל MYSQL. (ועדכון הנתונים מתוך צ'רידי כל דקה ע"י סקריפט נפרד)
                      2. ההבדל בין MYSQL לקריאה מקובץ טקסט בשרת (file_get_contents או אחר). (ועדכון הנתונים מתוך צ'רידי כל דקה ע"י סקריפט נפרד)
                      3. במידה ואני כן רוצה בלאנס, איך זה עובד, כמובן שאני מעדיף בלאנס אצלי מאשר הפעלת שלוחה רנדומאלית בימות, אבל זה עשיתי תוך כדי קמפיין דבר ראשון שהמערכת תעבוד.
                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי dovid
                        #11

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

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

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

                        ח תגובה 1 תגובה אחרונה
                        5
                        • ח מנותק
                          ח מנותק
                          חוקר
                          השיב לdovid ב נערך לאחרונה על ידי
                          #12

                          @dovid אמר בוויסות עומסים של שרתים:

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

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

                          תגובה 1 תגובה אחרונה
                          0
                          • M מנותק
                            M מנותק
                            magicode
                            כתב ב נערך לאחרונה על ידי
                            #13

                            אני הבנתי שאתה עושה עם הפונקציה קריאה לשרתים מרוחקים. נכון?

                            <?php
                            $homepage = file_get_contents('http://www.example.com/');
                            
                            ח תגובה 1 תגובה אחרונה
                            0
                            • ח מנותק
                              ח מנותק
                              חוקר
                              השיב לmagicode ב נערך לאחרונה על ידי חוקר
                              #14

                              @magicode
                              בזה של צ'רידי, אכן. כל פעם קריאה ישירות מהAPI של צ'רידי

                              השאלה היא אם לשנות כיון, ולשמור בשרת שלי, א"כ האם הSQL או ע"ג קובץ

                              nigunN תגובה 1 תגובה אחרונה
                              0
                              • nigunN מנותק
                                nigunN מנותק
                                nigun
                                השיב לחוקר ב נערך לאחרונה על ידי nigun
                                #15

                                @חוקר
                                ראיתי כאן דיון בנושא לא כל כך התעמקתי אבל בפשטות קובץ שעל השרת שלך הוא כמובן יותר מהיר
                                אבל עם פחות אפשרויות
                                דרך אגב מתי אתה מתחיל לחשוב על שינוי/שדרוג
                                כשהCPU מגיע למקסימום או הרבה לפני זה?
                                וגם איפה אני יכול לראות כמה מהזיכרון של הPHP בשימוש (לא המגבלה)?
                                עריכה: אולי הסקריפט הזה יעזור לך לדעת מה יותר מהיר

                                מייל: nigun@duck.com

                                dovidD ח 2 תגובות תגובה אחרונה
                                0
                                • dovidD מנותק
                                  dovidD מנותק
                                  dovid ניהול
                                  השיב לnigun ב נערך לאחרונה על ידי
                                  #16

                                  @nigun אמר בוויסות עומסים של שרתים:

                                  @חוקר
                                  ראיתי כאן דיון בנושא לא כל כך התעמקתי אבל בפשטות קובץ שעל השרת שלך הוא כמובן יותר מהיר

                                  וmysql לא על השרת שלך? במקרה שלו נראה לי ששניהם באותו שרת.

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

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

                                  nigunN תגובה 1 תגובה אחרונה
                                  2
                                  • nigunN מנותק
                                    nigunN מנותק
                                    nigun
                                    השיב לdovid ב נערך לאחרונה על ידי
                                    #17

                                    @dovid
                                    אם הוא כבר בונה סקריפט שכל דקה מעדכן
                                    שיצור קובץ טקסט פשוט זה אמור להיות פשוט מחיבור למסד + בדיקת שם משתמש +בחירת טבלה
                                    עיין עוד כאן
                                    לפי מה שאני הבנתי שהם אומרים שם זה יותר מהיר אפילו כשהמסד על אותו שרת אבל רק בקבצים בודדים ולא כשמדובר למשל על שם משתמש וסיסמה של 1000 משתמשים

                                    מייל: nigun@duck.com

                                    תגובה 1 תגובה אחרונה
                                    0
                                    • nigunN מנותק
                                      nigunN מנותק
                                      nigun
                                      כתב ב נערך לאחרונה על ידי
                                      #18

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

                                      מייל: nigun@duck.com

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        כתב ב נערך לאחרונה על ידי
                                        #19

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

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

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

                                        nigunN תגובה 1 תגובה אחרונה
                                        0
                                        • nigunN מנותק
                                          nigunN מנותק
                                          nigun
                                          השיב לdovid ב נערך לאחרונה על ידי
                                          #20

                                          @dovid
                                          מה הפתרון?
                                          חוץ מלעבור לnodejs כמובן☺

                                          מייל: nigun@duck.com

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

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

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

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