บล็อกโปรแกรมเมอร์: เกิดอะไรขึ้นภายใต้ฝากระโปรงของ gamer.ru

content auto translated from {from}

ข้อมูลประวัติศาสตร์เล็กน้อย

เว็บไซต์ gamer.ru ประสบกับการเขียนโค้ดใหม่ทั้งหมดเป็นครั้งที่สาม (หรืออาจจะเป็นครั้งที่สี่) ตั้งแต่เริ่มต้น โครงการนี้ถูกเขียนด้วย Ruby-on-Rails ในยุค 2000 สถาปัตยกรรมมีความเป็นโมโนลิธ ดังนั้นคำขอของผู้ใช้แต่ละรายจึงเกิดกำลังการโหลดไปยังฐานข้อมูลและการโหลดไลบรารีทั้งหมดจำนวนมาก เพื่อให้เว็บไซต์ทำงานได้ในขณะที่มีผู้เยี่ยมชม 100,000 คนต่อวัน จึงต้องใช้เซิร์ฟเวอร์ที่ทรงพลังถึงห้าเครื่อง ใช้ memcache, Redis และทำการจำลองฐานข้อมูลในหลายๆ เซิร์ฟเวอร์ ซึ่งทำให้สามารถดำเนินการต่อได้ถึงปี 2018 จนกระทั่งบริษัทเริ่มมีปัญหาด้านการเงินและทีมพัฒนาหายไป

ประมาณปี 2020 เว็บไซต์ได้สูญเสีย SSL certificate การอัปเดตนั้นไม่มีทางเป็นไปได้ เนื่องจากเวอร์ชันเก่าของ Ruby-on-Rails ขึ้นอยู่กับเวอร์ชันเก่าของ openssl และใบรับรองใหม่ต้องการเวอร์ชันที่ใหม่กว่า ไม่มีใครรู้สึกกังวลนัก — เว็บไซต์ยังคงทำงานได้ในระดับที่ยอมรับได้ ในช่วงปี 2015 ถึง 2025 จำนวนผู้เข้าชมลดลงอย่างต่อเนื่องจาก 100,000 เป็น 1,000 คนต่อวัน บล็อกและความคิดเห็นที่ซ่อนอยู่เริ่มมีสแปมจำนวนมาก รวมถึงเนื้อหาที่ไม่เหมาะสมมากมาย ยานเดกซ์หมดความสนใจในเราและในเว็บมาสเตอร์ก็เต็มไปด้วยข้อผิดพลาดวิกฤตในแถบสีแดง

สิ่งที่เราทำเพื่อแก้ไขปัญหาทั้งหมด

เว็บไซต์ต้องการการปรับแต่งอย่างจริงจัง เพราะสถาปัตยกรรมเก่าไม่เข้ากับความเป็นจริงอีกต่อไป ในฐานข้อมูลมีโพสต์ประมาณ 100,000 โพสต์และความคิดเห็น 1.6 ล้านความคิดเห็นที่ต้องถูกย้ายไปยังเอ็นจินใหม่อย่างระมัดระวัง เราตัดสินใจเปลี่ยนไปใช้สถาปัตยกรรมไมโครเซอร์วิสทั้งสำหรับแบ็กเอนด์และฟรอนต์เอนด์ พร้อมกับการใช้เทคโนโลยีสมัยใหม่ รวมถึง HTMLElement ที่เป็นที่นิยม

โครงการนี้ถูกเขียนใหม่ทั้งหมดจากศูนย์โดยใช้ NodeJS โดยไม่ใช้ไลบรารีของบุคคลที่สาม ซึ่งรับประกันว่าเราจะมีชีวิตที่สงบสุขในอีก 10-20 ปีต่อไป ตอนนี้ไม่ต้องกลัวว่าอัปเดตไลบรารีต่างๆ เช่น ExpressJS หรือ React จะทำให้เว็บไซต์พังและต้องการการปรับโครงสร้างครั้งใหญ่ใหม่อีกครั้ง แม้แต่ตัวแก้ไขกราฟฟิกโพสต์ก็ต้องเขียนเอง เนื่องจากไม่มีสิ่งที่สมบูรณ์แบบตรงตามความต้องการที่เรียบง่ายของเรา ตอนนี้เอ็นจินสามารถเรนเดอร์ HTML สำหรับอุปกรณ์เก่าและเครื่องมือค้นหา และส่งเนื้อหาผ่าน AJAX ให้กับผู้ใช้

ในปัจจุบันเว็บไซต์สามารถรองรับโหลดเฉลี่ยประมาณ 150 คำขอในวินาที และส่วนใหญ่ของการเข้าชมมาจากบ็อตค้นหาและครอว์เลอร์อื่นๆ โดยเฉพาะอย่างยิ่งบ็อต semrush และ openai ซึ่งทำตัวเหมือนกับพยายามดาวน์โหลดเว็บไซต์ทั้งหมดภายในวันเดียว หากยานเดกซ์จัดทำดัชนีให้เราอย่างช้าๆ โดยมีความเร็ว 1-2 คำขอต่อวินาที บ็อตเหล่านี้สามารถขอข้อมูลได้ถึง 50 คำขอ

อย่างไรก็ตามเอ็นจินได้รับการปรับแต่งให้มีประสิทธิภาพมาก จึงสามารถให้บริการบอตทั้งหมดนี้ได้ด้วย Virtual Machine ราคาถูกเพียงประมาณ 500 รูเบิลต่อเดือน

แน่นอนว่า เว็บไซต์ยังคงเตือนเราด้วยข้อผิดพลาด 502 และ 504 เป็นครั้งคราว ซึ่งค่อยๆ ถูกเปิดเผยและแก้ไข บางครั้งพบว่ามีคนลืมเพิ่มดัชนีในฐานข้อมูล บางครั้งคำขอที่ซับซ้อนเกินไปต้องถูกแบ่งออกเป็นคำขอที่ง่ายกว่า และบางครั้งอาจจะหมดพื้นที่ในเซิร์ฟเวอร์ แต่เราไม่ยอมแพ้ — งานยังคงดำเนินต่อไป และกระบวนการก็อยู่ใน