פרוקסי הפוך: שיפור ביצועים והורדת Downtime

12 בנובמבר 2007

תגיות: , ,
אין תגובות

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


הפעם אני רוצה לחשוף כלי שפחות מוכר למפתחי חלונות, ויכול להוריד משמעותית עומסים משרתי ה-Web העמוסים, וגם לסייע בצמצום Downtime בעת מעבר למשל, מחוות שרתים אחת לאחרת.


איך זה עובד?


פרוקסי הפוך (בדרך כלל Squid על לינוקס) מקשיב לבקשות HTTP, בודק אם קיים אצלו עותק של הדף ואם לא – מפנה לשרת האמיתי שמפעיל את הדף ומעביר את תשובתו לגולש.


נניח שיש לנו שרת HTTP עמוס למדיי שמריץ אתר שכתוב ב-ASP.net, שמכיל הרבה מאוד תמונות ואלמנטיים סטטיים אחרים. נתקין לפניו שרת פרוקסי הפוך מסוג כלשהו. לשם הנוחות והעלות בחרתי את Apache על חלונות, שאיתו שיחקתי לא מעט כפרוקסי עבור שימושים שונים.


נשתמש בהגדרות ברירת המחדל שלו ונוסיף לקובץ apache.conf את השורות הבאות:

LoadModule  proxy_module         modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off
ProxyPass / http://192.168.2.1/ # כתובת שרת ה-IIS


כאשר גולש יגש לכתובת של שרת ה-Apache (כברירת מחדל http://localhost/, הוא יקבל את האתר שמאוחסן על גבי ה-IIS. בלוגים של IIS תראו את ה-IP של מכונת ה-Apache כיוזמת הבקשה.

בשלב הבא אנחנו נרצה ששרת ה-Apache ישמור אצלו עותק של כל קובץ ששרת ה-IIS החליט שאפשר

CacheRoot "C:/Cache/"
CacheSize 5000 #MB
CacheGcInterval 4
CacheMaxExpire 24 # זמן מקסימלי בקאש
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1

סיימנו. נחזור לדף ה-ASP.net שלנו, ונגדיר שם Expire של דף לשתי דקות

Response.Expires = 2

עכשיו נשאר רק להיכנס לאתר (דרך הפרוקסי כמובן), לכבות את IIS או לשנות את שם הדף ולראות שהאתר ממשיך לעבוד כרגיל עד לתום הזמן…


כמה הערות:


1.  הנ"ל רלוונטי למקרים בהם אין שימוש בטפסים בשרת, ולמקרים שבהם Output Cache המובנה של -ASP.net מתאים.
2. בכל התקנה של שירות מהסוג הזה, במיוחד אם הוא חשוף כלפי חוץ – צריך כמובן לבדוק את נושא האבטחה ועל כך שלא ניתן לשמש את הפרוקסי בשום צורה כפרוקסי רגיל.
3. ניתן לשמש את הפרוקסי גם עבור שדרוגים או מעבר דירה.
בזמנו כאשר העברנו את האתר של ערוץ 7, עדכון ה-DNS לקח לא מעט זמן. על מנת למנוע Downtime אצל מי שלא עודכן אצלו ה-DNS, התקנתי על השרת הישן פרוקסי כזה, שפשוט הציג את האתר החדש (לפי כתובת IP, מכיוון שגם שם ה-DNS לא התעדכן כמו שצריך) עד לעדכון ה-DNS. היה קצת איטי אבל עבד מצויין. הגולשים לא הבחינו בכלום.
4. ניתן להשתמש בשיטה גם עבור תוכן מותאם לגולש, תוך שימוש במגוון פיתרונות החל מקובץ JS חיצוני ושיטות שונות נוספות. בעבר הרחבתי על כך במצגת שהעברתי ושבעז"ה אעלה לרשת בהמשך.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *