שאלה כיצד אני בוחר איזה Apache MPM להשתמש?


זה קנוניקל שאלה על בחירת הזכות Apache httpd MPM.

אני קצת מבולבל בין MPMs שונים המוצעים על ידי אפאצ 'י - "עובד", "אירוע", "prefork", וכו'

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


245
2018-04-26 18:40




אם אתה תומך mod_php, אז אתה עושה prefork. - Zoredache
@Zoredache: היא מעולם לא הזכירה את PHP, וגם אם היה לה, mod_php היה רק ​​לשלול את האירוע. או שאתה עדיין נצמד להערה של RL לפני 8 שנים? באג האחרון מחובר ב PHP הקשורים Apache משורשר היה בשנת 2005. - symcbean
מצטער - יש להצביע כדי לסגור את זה - היא שאלה רחבה מדי לענות כאן. - symcbean
@ סימקאן Re: PHP ו Threads - הליבה של PHP הוא threadafe בימים אלה, אבל הרבה דברים אחרים תמצאו אנשים compiling ב לא. אני כבר ננשך כמו לאחרונה כמו בשנה שעברה, אז זה מאוד "מבחן (בהרחבה) לפני להסתמך על אותו בייצור" המצב עדיין ... - voretaq7
בהתאם למערכת ההפעלה שבה אתה משתמש ייתכן אפילו לא כל האפשרויות הזמינות עם התקנה רגילה. - John Gardeniers


תשובות:


יש מספר MPM מודולים (Multi-Processing Modules), אבל עד כה הנפוצה ביותר (לפחות ב * nix פלטפורמות) הם שלושת העיקריים: prefork, worker, ו event. ביסודו של דבר, הם מייצגים את האבולוציה של שרת האינטרנט של Apache, ואת הדרכים השונות שבהן השרת נבנה כדי לטפל בבקשות HTTP בתוך אילוצי המחשוב של הזמן על ההיסטוריה הארוכה שלו (במונחים של תוכנה).


prefork

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

זה כנראה לא מומלץ להשתמש prefork אלא אם כן אתה צריך מודול זה לא חוט בטוח.

השתמש אם: אתה צריך מודולים לשבור כאשר האשכולות משמשים, כמו mod_php. גם אז, שקול להשתמש FastCGI ו php-fpm.

אל תשתמש אם: המודולים שלך לא ישברו את השחלה.

worker

mpm_worker משתמש השחלה - וזה עוזר גדול עבור מקביליות. העובד מסתובב כמה תהליכים הילד, אשר בתורו לסובב את החוטים הילד; בדומה Prefork, כמה פתילים חילוף נשמרים מוכנים אם אפשר, כדי לשרת חיבורים נכנסים. גישה זו היא הרבה יותר טוב ב- RAM, שכן ספירת פתיל אין השפעה ישירה על השימוש בזיכרון כמו ספירת השרת עושה prefork. זה גם מטפל מקביליות הרבה יותר בקלות, שכן הקשרים רק צריך לחכות חוט חינם (אשר בדרך כלל זמין) במקום שרת חילוף prefork.

השתמש אם: אתה נמצא ב- Apache 2.2 או 2.4 ואתה מפעיל בעיקר SSL.

אל תשתמש אם: אתה באמת לא יכול להשתבש, אלא אם כן אתה צריך prefork עבור תאימות.

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

event

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

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

השתמש אם: אתה נמצא ב- Apache 2.4, כמו בחוטים, אבל אתה לא אוהב שיש חוטים שמחכים לחיבורים לא פעילים. כולם אוהבים נושאים!

אל תשתמש אם: אתה לא על Apache 2.4, או שאתה צריך prefork עבור תאימות.


בעולם של היום איטי, AJAX, ודפדפנים כי כמו multiplex 6 חיבורי TCP (עם לשמור על חיים, כמובן) לשרת שלך, מקביליות היא גורם חשוב בקבלת סולם השרת שלך בקנה מידה טוב. ההיסטוריה של אפאצ 'י קשורה לזה בהקשר זה, ובעוד זה עדיין לא עולה בקנה אחד עם כמו nginx או lighttpd במונחים של שימוש במשאבים או בקנה מידה, ברור כי צוות הפיתוח פועל לקראת בניית שרת אינטרנט זה עדיין רלוונטי בעולם של היום גבוה ביקוש מקביל.


398
2018-04-27 02:27



-1: IME, עובד רק מפחית את גודל טביעת הרגל httpd ידי באזור של 15% (IIRC לינוקס דוחות פרה ב RSS שעושה מראש המזלג נראה כאילו הוא משתמש הרבה יותר זיכרון ממה שהוא עושה). יש הבדל זניח בין טביעת הרגל של הליבה לתהליך וחוט NPTL. זה דרך ארוכה מהתנפצות של כדור הארץ. אני לא מבין למה אתה חושב כי מחכה הקצאת חוט יעיל יותר במונחים תזמון מאשר מחכה / תזמון (מראש המזלג) תהליך. וגם לא מה אתה חושב שיש SSL על כל המפץ שלה. - symcbean
@symcbean אז אתה אומר כי השימוש 15% RAM אינו משמעותי? זה בסדר, אבל דעתי תהיה אחרת. תביעות ביצועים מקביליות אינן שלי. ראה כאן. ואת ההבדל SSL הוא פירט בבירור בתיעוד של האירוע MPM: The improved connection handling does not yet work for certain connection filters, in particular SSL. For SSL connections, this MPM will fall back to the behaviour of the worker MPM and reserve one worker thread per connection. - Shane Madden♦
@ ShaneMadden `ובעוד זה עדיין לא עד השווי של nginx או lighttpd במונחים של השימוש במשאבים או בקנה מידה` יש לי אפאצ 'י הרצפה הן של מערכות אלה. - Kelly Elton
@ ShaneMadden לגבי הבעיה עם SSL ואת האירוע MPM: האם אתה יודע אם nginx מטפל זה באופן משמעותי יותר מאשר אפאצ 'י? - DASKAjA
נראה כי אם לקמפל אפאצ 'י 2.4 בלי לדעת על מודולים mpm זה בא עם מודול בשם אירוע mpm מודול וזה עובד עם mod_php7 (עכשיו אני מ' מחקר mpm כי apache2.4 חורג מגבלת חיבור Mysql בעוד Apache 2.2 עם אותו שרת mysql הוא לא) - BioHazard


בדרך כלל תלוי איזה מודולים Apache אתה רוצה להשתמש. אני חושב עובד הוא בדרך כלל הבחירה ברירת המחדל, אבל כמה (מבוגרים) מודולים דורשים forking ותלוי prefork.

אם אין לך העדפות, אני ממליץ לך ללכת עם התלות המועדפת מהפצת מערכת ההפעלה שלך. לדוגמה, אובונטו תתקין את mpm-Work כאשר תתקין את Apache2.


5
2018-04-26 19:32





הנה הסבר טוב איך זה עובד עם GIF:

https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/

בקצרה: אם אתה ב 2.4 ואתה צריך httpd כמו פרוקסי הפוך (dispatcher) ולכן הבחירה שלך היא אירוע MPM


5
2018-06-21 13:10





החל מפברואר 2018, התיעוד של Apache 2.4 עבור אירוע MPM קובע כי השימוש ב- Apache כפרוטוקסי ישמור על "שיפור הטיפול בחיבור" מאז 2.4.24 מהעבודה כמתוכננת. ראה מגבלות סעיף.

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

מסיבה זו, נראה כי שימוש במודל Worker עשוי להיות הטוב ביותר עבור כאשר Apache משמש פרוקסי. זה לא ממש ברור לי אם יש יתרונות למודל האירוע בסביבה proxy, אבל אולי יש.


3
2018-02-14 15:01