פרק 12: הכרות עם mod_perlואו, איזה גודל!אם כבר יצא לכם לקמפל תחת Apache, ודאי שמתם לב שגודל httpd ממוצע הוא כ 300-400K. כעת, בשילוב עם mod_perl, ממדי ה httpd תפחו ליותר ממגה ביט. אתם מבינים עתה ש Perl היא גדולה, גדולה למדי. וזה מה שמביא אותנו לנושא הפשרות. החיים הם פשרות. עוגת גבינה ופיצה הן מאכלים טעימים מאוד, אבל משמינים. חסה וסלק לא משמינים בכלל, אבל מי יכול להתקיים עליהם. כך גם עם שרת ה Apache, אשר הופך ל"בריא" יותר כאשר מוסיפים לו Perl. הבעיה היא שכמו שהבנו קודם, Apache הוא pre-forking, זאת אומרת שהורה שמן מוליד ילדים שמנים. זהו אומנם המחיר של עבודה קלה עם סקריפטים של Perl, אולם מרבית האתרים מורכבים גם ממרכיבים נוספים כמו דפים סטטיים, ולא רק מסקריפטים של Perl. ודפים סטטיים, כמו דפים רגילים, לא שוקלים מאומה. למזלנו הרע, במקרה שהשרת שלכם רץ עם mod_perl וצריך לשרת עמודים סטטיים רבים בנוסף לסקריפטים של Perl, התוצאה היא תהליך ענק, שסוחב משא קטן. וכאן אנו נקלעים למאבק של חוסר היעילות: Apache נקי אינו יעיל להרצת סקריפטי Perl באמצעות CGI, בעוד Apache בתוספת mod_perl אינו יעיל כשמדובר בדפים פשוטים. אתם צריכים לשקול את המשקל הכולל של התהליכים שרצים על השרת שלכם - האם מדובר ב 90% סקריפטי Perl מול 10% דפים סטטיים, או ב 90% דפים סטטיים מול 10% סקריפטי Perl? קרוב לוודאי שהאמת נמצאת איפה שהוא באמצע. מובן שבקצוות עליכם לבחור את השרת היעיל יותר במרבית הזמן. כי במקרה שרק 10% מהבקשות גורמות להרצת סקריפט Perl תוכלו לחיות עם CGI איטי כאשר התמורה היא הגדלת הזיכרון וטיפול מהיר של השרת במספר בקשות גדול יותר כתוצאה מכך. לעומת זאת אם צריך לשרת מספר קטן של דפים פשוטים, היתרון בכוח של mod_perl, ישתלם יותר מאשר העונש שתקבלו בדמות תהליכים רבים ושמנים. הפתרון היפה הוא להריץ שני שרתים במקביל. שרת Apache אחד קטן וקומפקטי, המכיל את השרת בלבד, והשני גדול ומחוזק בתוספת של mod_perl. הבקשות המגיעות ישלחו לשרת ה mod_perl במידה ויש צורך בסקריפטי Perl, ואילו הפשוטות יטופלו על ידי השרת הקטן יותר. לכאורה זהו הפתרון האולטימטיבי, במקרים בהם לא ניתן לשרת את כל התהליכים בעזרת שרת אחד בלבד, אולם עליה וקוץ בה. במקרה זה תצטרכו לשמור על שני עצים נפרדים עבור התהליכים, כולל קבצי הגדרות נפרדים, כמו כן תקבלו שני קבצי log נפרדים, מה שיהפוך את משימת ניתוח התנועה באתר לקשה בהרבה. שרת ה mod_perl מכוון בדרך כלל להקשיב ל port חילופי, כגון 8080, אולם אינכם רוצים שהמשתמשים יחושו בזה. כל הדפים צריכים להראות כמגיעים משרת אחד, אחרת יתעוררו בעיות עם firewalls, סימניות (bookmarks) וכו'. הפתרון לזה הוא הפעלת proxy פנימי בתוך קובץ ההגדרות של שרת ה Apache הקטן, אשר יפנה (redirect) את הבקשות לסקריפטי Perl, לשרת ה mod_perl הנמצא מאחורי הקלעים. זוהי כל התורה על רגל אחת - התורה כולה קשה וארוכה מכדי להיות מסוקרת במאמר הזה, ואתם, שוב, מוזמנים לעיין במאמר של Stas Bekman בנושא ארגון שרתים מרובים. השגת הסחורה
|