นักพัฒนาคนหนึ่งได้แบ่งปันแนวทางที่เป็นนวัตกรรมในการจัดการกับ web crawler ที่ก้าวร้าว พร้อมทั้งรักษาประสบการณ์ที่ราบรื่นสำหรับผู้เยี่ยมชมที่เป็นมนุษย์ แทนที่จะใช้การท้าทายแบบกว้างๆ ที่สร้างความหงุดหงิดให้กับทุกคน พวกเขาได้สร้างระบบอัจฉริยะที่จะรบกวนผู้ใช้เฉพาะเมื่อจำเป็นอย่างยิ่งเท่านั้น
ปัญหาเริ่มต้นขึ้นเมื่อ crawler อัตโนมัติหลายพันตัวเริ่มขุดค้นผ่าน code repository หลายปีในแต่ละวัน สิ่งเหล่านี้ไม่ใช่ผู้เยี่ยมชมธรรมดา แต่เป็นบอทที่ทำงานอย่างเป็นระบบในการสแกนทุก URL ที่เป็นไปได้ สร้างภาระงานขนาดใหญ่ให้กับเซิร์ฟเวอร์และอาจป้อนข้อมูลให้กับชุดข้อมูลฝึกอบรม AI โดยไม่ได้รับอนุญาต
ตัวชี้วัดผลกระทบต่อประสิทธิภาพ:
- การท้าทายใดๆ สามารถปิดกั้นการเข้าถึงของ crawler ที่ไม่พึงประสงค์ได้มากกว่า 99%
- การร้องขอ 10 ครั้งต่อวินาทีสร้างภาระงานที่มีนัยสำคัญเนื่องจากการจับมือ TLS
- การเพิ่มขึ้นของการรับส่งข้อมูล 4 เท่าสามารถทำให้เซิร์ฟเวอร์ขนาดเล็กล้นได้
- กระบวนการพื้นหลังจาก Mastodon (1 การร้องขอต่อวินาทีี) และ Lemmy (2 การร้องขอต่อวินาที) เพิ่มภาระงานอย่างต่อเนื่อง
- การรับส่งข้อมูลของ crawler ลดประสิทธิผลของ cache โดยการผลักเนื้อหาที่ถูกต้องออกไป
การวางท้าทายอย่างชาญฉลาดลดความยุ่งยากสำหรับมนุษย์
ระบบจะท้าทายผู้เยี่ยมชมเฉพาะใน URL ลึกที่เบราว์เซอร์ทั่วไปไม่ค่อยเข้าเยี่ยมชม หน้าเว็บยอดนิยมจะถูกแคชโดย reverse proxy ดังนั้นการเข้าชมของมนุษย์ส่วนใหญ่จึงไม่เคยพบกับระบบป้องกัน crawler เลย เมื่อมีคนโหลดไฟล์ CSS ของเว็บไซต์ พวกเขาจะถูกทำเครื่องหมายว่าเป็นมิตร เนื่องจากเบราว์เซอร์ที่ถูกต้องตามกฎหมายต้องการการจัดรูปแบบ แต่ crawler ส่วนใหญ่จะเพิกเฉยต่อมัน
นักพัฒนายังติดตามว่า URL ใดบ้างที่ได้รับการเยี่ยมชมหลายครั้ง หากลิงก์ใดถูกคลิกมากกว่าหนึ่งครั้ง ระบบจะสันนิษฐานว่าเป็นการเข้าชมของมนุษย์ที่ถูกต้องและหยุดแสดงการท้าทายสำหรับหน้านั้น ซึ่งหมายความว่าลิงก์ที่แชร์จะทำงานได้อย่างราบรื่นสำหรับทุกคนหลังจากผู้เยี่ยมชมคนแรก
การแบ่งแยกกลยุทธ์การตรวจจับบอท:
- ท้าทายเฉพาะ URL ลึก (น้อยกว่า 1% ของ URL ทั้งหมด แต่มีเนื้อหาที่น่าสนใจ 99%)
- แคชหน้าเว็บยอดนิยมผ่าน reverse proxy เพื่อหลีกเลี่ยงการประมวลผลที่ไม่จำเป็น
- ทำเครื่องหมายผู้เยี่ยมชมที่โหลดไฟล์ CSS ว่าเป็น "มิตร"
- ติดตาม URL ที่ถูกเยี่ยมชมหลายครั้งและข้ามการท้าทายสำหรับลิงก์ที่แชร์
- ใช้คำถามที่ใช้ตรรกะของมนุษย์แทนการท้าทายแบบ computational proof-of-work
การท้าทายที่สร้างสรรค์ซึ่งทำให้ระบบอัตโนมัติสับสน
แทนที่จะใช้การท้าทาย proof-of-work แบบดั้งเดิมที่คอมพิวเตอร์จัดการได้ดีกว่ามนุษย์ ระบบจะถามคำถามง่ายๆ เช่น มีตัว R กี่ตัวในคำว่า strawberry? สิ่งเหล่านี้ต้องการการคิดจริงๆ มากกว่าพลังการคำนวณ ข้อมูลเชิงลึกที่สำคัญคือการท้าทายใดๆ ก็ตามจะบล็อกการเข้าชมของ crawler ที่ไม่ต้องการมากกว่า 99%
สิ่งสำคัญคือการท้าทายเหล่านี้ไม่รวมคำตอบของตัวเองใน JavaScript ระบบบอทหลายระบบสามารถแก้ไขการท้าทายโดยอัตโนมัติได้เมื่อคำตอบถูกฝังอยู่ในโค้ดหน้าเว็บ แต่สิ่งเหล่านี้ต้องการการป้อนข้อมูลของมนุษย์อย่างแท้จริง
ชุมชนถกเถียงเรื่องสิทธิการเข้าถึงและแนวทางแก้ไขปัญหาที่ปฏิบัติได้
แนวทางนี้ได้จุดประกายการอภิปรายเกี่ยวกับว่าใครสมควรได้รับการเข้าถึงเนื้อหาเว็บสาธารณะ นักพัฒนาบางคนโต้แย้งว่าพวกเขาควรควบคุมวิธีการเข้าถึงเนื้อหาของตน โดยเฉพาะเมื่อบริษัท AI อ้างการใช้งานที่เป็นธรรมในขณะที่เพิกเฉยต่อใบอนุญาตเนื้อหา คนอื่นๆ ตั้งคำถามว่าการบล็อกบอททั้งหมดนั้นเป็นธรรมหรือไม่ เนื่องจากบางตัวอาจเป็นโปรเจกต์ส่วนตัวที่ถูกต้องตามกฎหมาย
การเข้าถึงเนื้อหาของฉันเป็นสิทธิพิเศษที่ฉันมอบให้คุณ ฉันตัดสินใจว่าคุณจะเข้าถึงได้อย่างไร และผ่านบอทที่การตั้งค่าของฉันสับสนว่าเป็น AI crawler ที่เป็นของบริษัท AI ต่อต้านมนุษย์นั้นไม่ใช่วิธีที่ถูกต้องในการเข้าถึง
ชุมชนเทคนิคยังคงแบ่งแยกเรื่องแนวทางแก้ไข ในขณะที่บางคนแนะนำให้ใช้ content delivery network เช่น Cloudflare เพื่อการป้องกันบอทที่ง่ายขึ้น คนอื่นๆ ชื่นชมแนวทางที่กำหนดเองซึ่งรักษาการควบคุมประสบการณ์ผู้ใช้
ผลกระทบด้านประสิทธิภาพขับเคลื่อนนวัตกรรม
นักพัฒนาระบุว่าการจัดการ 10 คำขอต่อวินาทีเกี่ยวข้องกับมากกว่าการให้บริการหน้าเว็บธรรมดา การจับมือ TLS และกระบวนการพื้นหลังจากเครือข่ายสังคมแบบ federated เพิ่มภาระงานที่สำคัญ เซิร์ฟเวอร์ธรรมดาสามารถถูกครอบงำได้อย่างรวดเร็วเมื่อ crawler เพิ่มภาระงานเป็นสี่เท่าหรือมากกว่า
แรงกดดันด้านประสิทธิภาพนี้ได้นำไปสู่กลยุทธ์การแคชที่สร้างสรรค์และการปรับใช้การท้าทายแบบเลือกสรร ระบบมีเป้าหมายที่จะกำจัดภาระงานที่เป็นอันตรายในขณะที่รักษาทรัพยากรไว้สำหรับผู้ใช้ที่ถูกต้องตามกฎหมาย พิสูจน์ว่าวิศวกรรมที่มีความคิดสามารถแก้ไขปัญหาที่การบล็อกแบบ brute-force ไม่สามารถทำได้