וויסות עומסים של שרתים
-
לפני שאתחיל אקדים שייתכן שאפשר לראות בתשובה שלי בריחה מהשאלה. תשובה טובה אמורה לרדת לשורש הבעיה שהצוגה, ולתת פתרונות אופרטיביים לגביה. אבקש בכל אופן להתייחס לדברי כי זו לא דעתי אלא דעת רוב המבינים היום.
התשובה הקצרה ביותר לכל השאלות זה nodejs, ועכ"פ, לא PHP.
אני יסביר: הכח של השרת מספיק לארבע קמפיינים ויותר. זה לא מה שדגדג לו.
הבעיה היא התקורה של הבקשות בPHP, ובכלל כל האופן בו PHP עובד.
א. כל בקשה, זה עולם חדש. stateless במיטבו.
ב. כל בקשה זה טריד עצמאי שנגמר עם סיום הבקשה.שני החלקים עושים תקורה גבוהה:
א. אתה חייב לטעון ללא הרף מידע ולו הפעוט ביותר ו/או לחשבון הכל מאפס במידה וזה נדרש.
ב. הרמת תהליך ומספר התהליכים בו זמנית זה בהחלט משאבים יקרים מאוד יחסית ללולאה שבודקת סידרת פיבונאצ'י.לעומת זאת בnodejs למשל,
א. כל הבקשות רצות על אותו קונטקסט משותף, אתה יכול לשמור את מספר המבקרים במשתנה, ללא שום SQL.
ב. הכל טריד אחד, כל בקשה מתבקשת לחכות עד שהשרת משועמם (!) ואז הוא עונה לה.
זה גורם לכך ששרת בעל כח X יכול לשרת פי מאה בנוד מאשר בPHP. כמובן שזה תלוי עד כמה ארכיטקט התכונה התחשב באופי השפה, אבל בתצורה שלך אז ייתכן שמדובר בפי אלף.עבורך, יש לנוד חיסרון אחד בלבד. הוא טיפה רגיש יותר וצריך יחס יותר מעמיק מאשר PHP שמסתכם בתיקיית קבצים. בגלל שזה תוכנה בעל מופע אחד, אז אם יש שגיאה לא הבקשה קורסת אלא פשוט התוכנה=השרת. אז זה לא בעיה, כי לומדים איך להגדיר שיעלה לבד וגם איך לא לעשות שגיאות, אבל זה בהחלט ריזיקלי בשבילך לקפוץ לזה.
יש גם את ASP CORE שמשלב בין שתי הדרכים: כל בקשה היא טריד נפרד אבל באותו פרוסס וממילא מצד אחד יש תקורה קטנה של יצירת התהליכים אבל מאידך יש את מעלת הmulti-treading.
אני, אופיינית, תומך בדרך זואני יודע שאתה חושב: "מה הוא שוב פעם חושב שיש לי זמן ללמוד שפות חדשות".
א. לא. אל תגיד את זה, תלמד שבועיים בלי לנשום ואח"כ תטען מקח טעות, בא נראה אותך.
ב. זה בכלל לא מסובך, וזה חובת המציאות אם אתה רוצה לא להשתמש כל החיים עם הפתרון הראשון שלמדת. -
@חוקר אמר בוויסות עומסים של שרתים:
@dovid
תן לי להבין את ההבדל בין PHP לנוד כאשר יש לך לדוגמא 20 בקשות באותה שניה ממש.בנוד טיפול בבקשות זה כמו לולאת while. הוא גם יכול אלף באותה שניה.
בPHP זה דומה לפתיחת חמש מסמכי WORD במקביל.
אבל עזוב פילוסופיה ורוץ לget started. -
@dovid כל מילה פנינה כרגיל
אולי שווה ל @חוקר להשתמש בבלאנס מוכן במקום השלוחות הרנדומליות.
נראה לי שcloudflare מספק את זה גם בשירות החינמי.
(בכל מקרה זה יפתור לו את הבעייה רק של השליחה אליך מהמרכזייה של ימות. ובלי קשר לsql)לגבי המרכזייה, אני חושב שעדיף לך לעבוד מול אסטריסק מלא. (פשוט תעשה בימות המשיח הפנייה לשלוחת IP ותפנה לשרת שלך)
שם, גם אם תתעקש לעבוד מול PHP, אתה מכוסה לגמרי. כי כל השיחה זה בקשה אחת ארוכה ולא כמה בקשות API כמו בימות המשיח.תנסה לחשוב על שיחה בקו, שמתנהלת כמו קוד שרץ.
אתה מבקש מהלקוח שחייג לכתוב מספר ואח"כ סולמית, מקבל את זה למשתנה, הולך עם המשתנה ובודק בDB משהו, רץ בלופ ומשמיע קבצים, באמצע השמעת הקבצים מזהה שצריך להשמעה הנוכחית לשאול משהו את הלקוח, שואל, התשובה נכנסת למשתנה, וכו' וכו'
וכל זה בקובץ אחד שרץ.
אני חושב שזה עולם אחר לגמרי ממה שאתה מכיר כיום בAPI. (אא"כ כבר כיום אתה עובד כך)וכמובן שגם באסטריסק אתה יכול לעבוד מול nodejs, אבל לא חייב.
-
@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אומר משהו?
-
@dovid @clickone
אסכם את השאלות:
איך שאני עובד היום, שאני עדיין עובד עם ימות המשיח (אין כ"כ זמן לחשוב על אסטריסק לבד), ועדיים עם PHP.- מה ההבדל בבזבוב משאבים בין file_get_contents ל MYSQL. (ועדכון הנתונים מתוך צ'רידי כל דקה ע"י סקריפט נפרד)
- ההבדל בין MYSQL לקריאה מקובץ טקסט בשרת (file_get_contents או אחר). (ועדכון הנתונים מתוך צ'רידי כל דקה ע"י סקריפט נפרד)
- במידה ואני כן רוצה בלאנס, איך זה עובד, כמובן שאני מעדיף בלאנס אצלי מאשר הפעלת שלוחה רנדומאלית בימות, אבל זה עשיתי תוך כדי קמפיין דבר ראשון שהמערכת תעבוד.
-
@dovid אמר בוויסות עומסים של שרתים:
קריאת קובץ זה פעולה מול המערכת קבצים באופן ישיר עם בעיות של נעילות ועם חוסר יעילות של קריאה סדרתית.
בגישה למסד התוכנה של mysql ממטבת את הגישה לדיסק בהרבה פרמטרים.אבל אם אני בונה בצורה נכונה עם ההרשאות וכו', ואני שם בקובץ רק את הנתון הנדרש ללא מיונים וכו' שצריך אח"כ בתוך הקובץ, זה לא יותר קליל לשרת מאשר הרצת תוכנת הSQL שצרך לגשת לטבלה מסויימת, לפי סינון או בלי?
-
@חוקר
ראיתי כאן דיון בנושא לא כל כך התעמקתי אבל בפשטות קובץ שעל השרת שלך הוא כמובן יותר מהיר
אבל עם פחות אפשרויות
דרך אגב מתי אתה מתחיל לחשוב על שינוי/שדרוג
כשהCPU מגיע למקסימום או הרבה לפני זה?
וגם איפה אני יכול לראות כמה מהזיכרון של הPHP בשימוש (לא המגבלה)?
עריכה: אולי הסקריפט הזה יעזור לך לדעת מה יותר מהיר -