כמה מילים על proxy_cache_lock ב-Nginx

תחשבו על התרחיש הבא:

יש לכם אתר עם עשרות אלפי מבקרים בדקה, אתם מפעילים שרת Reverse Proxy עם Cache ויש לכם בממוצע 50 אלף איש באתר בדקה, נניח שתוקף העמוד הראשי פג (Cache-Control) ויש 5000 בקשות לדף הבית באותו רגע, ללא קינפוג נכון של שרת ה-Reverse Proxy, כדי לרענן את דף הבית השרת יעביר את כל הבקשות לשרתי ה-Backend, שרתי ה-Backend לא יכולים לעמוד בעומס כזה ולכן ייתקעו, כמה שניות לאחר מכן שרת ה-Reverse Proxy יעביר עוד אלפי בקשות ל-Backend התקוע ויתחיל להחזיר אלפי הודעות שגיאה עם Proxy read timeout למאות הבקשות הראשונות והמרחק מכאן לקדחת לא רחוק בכלל.

בדיוק בשביל זה יש את  proxy_cache_lock, במקרה שיש מספר בקשות קובץ/דף ספציפי באותו הזמן, Nginx יחזיק את כל הבקשות בהמתנה ויעביר בקשה אחת בלבד אחורה ל-Backend, כאשר הפלט של הבקשה יתקבל, Nginx ישמור את הבקשה ב-Cache ויעביר את הפלט לכל אותם אלפי הבקשות שבהמתנה.

אגב את אותו הפתרון, ניתן ליישם גם ב-Varnish.

פורסם בקטגוריה כללי. אפשר להגיע לכאן עם קישור ישיר.

כתיבת תגובה

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