בלוג של מתכנת: מה קורה מתחת למכסה המנוע של gamer.ru
מידע היסטורי קצר
אתר gamer.ru עבר כבר את השכתוב המלא השלישי (ואולי אפילו הרביעי) של הקוד. בתחילה הפרויקט נכתב על Ruby-on-Rails עוד בעשור הקודם. הארכיטקטורה הייתה מונוליטית, ולכן כל בקשה של משתמש "גררה" בעקבותיה כמות גדולה מאוד של בקשות נוספות למסד הנתונים ומטען של כל הספריות האפשריות. כדי להבטיח את עבודת המשאב כשיש 100 אלף מבקרים ביום, היה צורך להשתמש בחמישה שרתים חזקים, להשתמש במזכרות, Redis ולשכפל מסדי נתונים על פני מספר שרתים. זה אפשר להחזיק בקושי עד 2018, עד שהחברה החלה להתמודד עם בעיות פיננסיות והצוות של המפתחים התפרק.
בשנים 2020, את האתר נפל תעודת SSL. עדכון התעודה התברר כחסר אפשרות, שכן הגרסה הישנה של Ruby-on-Rails הייתה תלויה בגרסה הישנה של openssl, בעוד שהתעודות החדשות דרשו גרסה מעודכנת יותר. אף אחד לא דאג במיוחד - האתר המשיך לעבוד בדרכים כאלו ואחרות. בתקופה שבין 2015 ל-2025, הביקורים ירדו בהדרגה מ-100 אלף ל-1 אלף מבקרים ביום. בבלוגים ובתגובות הסמוכות החל להופיע כמות עצומה של ספאם, כולל תוכן שלא היה מתאים. יandex completely lost interest in us, and the webmaster had nothing but a sea of red critical errors.
מה עשינו כדי לתקן הכל
האתר היה זקוק לאופטימיזציה רצינית, שכן הארכיטקטורה הישנה כבר לא התאימה למציאויות. במאגר נצברו כ-100 אלף פוסטים ו-1.6 מיליון תגובות, שצריך להעביר בזהירות ל-motor חדש. החלטנו לעבור לארכיטקטורת מיקרו-שירותים גם בחלק האחורי וגם בחלק הקדמי, תוך שימוש בטכנולוגיות מודרניות, כולל HTMLElement'ס אופנתיים.
הפרויקט נכתב מחדש לחלוטין מאפס ב-NodeJS ללא שימוש בספריות צד שלישי, דבר שמבטיח לנו חיים רגועים לעשר עד עשרים השנים הקרובות. עכשיו אפשר לא לפחד שעדכון של ספריה אופנתית כמו ExpressJS או React ישבור את כל האתר ויידרוש ריפקטורינג רחב נוסף. אפילו עורך התוכן הוויזואלי היה צריך לכתוב בעצמנו, מכיוון שלא נמצא שום דבר מוכן שענה על הצרכים הצנועים שלנו. עכשיו המנוע רנדר HTML לעמודים עבור מכשירים ישנים ומנועי חיפוש, ומספק תוכן למשתמשים דרך AJAX.
נכון להיום, האתר מצליח לעמוד בעומס ממוצע של כ-150 בקשות בשנייה, כאשר רוב התעבורה מורכבת מבוטים של חיפוש ודומיהם. במיוחד פעילים הבוטים semrush ו-openai, שמתנהגים כאילו הם מנסים להוריד את כל האתר ביום אחד. אם יandex מדד אותנו באיטיות, בקצב של 1-2 בקשות בשנייה, אז חברים אלו בהחלט יכולים לבקש גם 50.
עם זאת, המנוע היה כל כך מאושר ואופטימלי, שכדי לשרת את כל צבא הבוטים הזה מספיקה רק מכונת וירטואלית זולה אחת שעולה כ-500 רובל לחודש.
ברור, מדי פעם האתר מזכיר לנו על עצמו עם שגיאות 502 ו-504, שנטען בהדרגה ונפתרות. לפעמים מתגלה שמישהו שכח להוסיף אינדקס למסד הנתונים, לפעמים בקשה מסובכת מדי צריכה להתפצל למספר בקשות פשוטות, ולפעמים פשוט נגמר המקום על השרת. אבל אנחנו לא מתייאשים - העבודה ממשיכה, והתהליך, כמו שאומרים, "בשליטה".