• Compiler Explorer ได้เปลี่ยนวิธีจัดเก็บมาตั้งแต่ปี 2012 เพื่อให้ลิงก์ที่แชร์อยู่รอดได้นาน แต่การ ปิดตัวของ goo.gl ทำให้การเก็บรักษาลิงก์เก่าแบบ godbolt.org/g/abc123 กลายเป็นเรื่องเร่งด่วน
  • ช่วงแรกเก็บสถานะทั้งหมดของคอมไพเลอร์ไว้ใน URL, ปี 2014 เพิ่ม บริการย่อ URL ของ Google และหลังจาก Stack Overflow แบน URL แบบย่อในปี 2016 ก็สร้างลิงก์อ้อมแบบ godbolt.org/g/abc123
  • ตั้งแต่ปี 2018 เมื่อข้อจำกัดความยาว URL กลายเป็นปัญหามากขึ้น จึงเปลี่ยนมาใช้วิธีของตนเอง โดยเก็บสถานะเป็น เอกสาร JSON บน S3 และใช้ DynamoDB จัดการการแมประหว่างแฮชสั้นกับพาธเต็ม
  • เมื่อ Google ยุติลิงก์ goo.gl ใน เดือนสิงหาคม 2025 การตีความลิงก์เก่าที่อิงกับ goo.gl จะทำได้ยากขึ้น จึงกำลังรวบรวมลิงก์ g ประมาณ 12,000 รายการที่พบจากเว็บสาธารณะและล็อก พร้อมปลายทางการรีไดเรกต์ไว้ในฐานข้อมูลของตนเอง
  • ผู้ใช้ที่มีลิงก์ Compiler Explorer เก่า หากเข้าชมลิงก์ตอนนี้ก็มีโอกาสถูกเพิ่มเข้าในรายการเก็บรักษา และความรู้ที่แชร์ซึ่งต้องคงอยู่ยาวนานจะปลอดภัยกว่าหาก เป็นเจ้าของโครงสร้างพื้นฐานหลักเอง

การเปลี่ยนแปลงวิธีเก็บลิงก์ของ Compiler Explorer

  • ในปี 2012 สถานะทั้งหมดของ Compiler Explorer ถูก เก็บไว้ภายใน URL
  • วิธีเข้ารหัสสถานะคอมไพเลอร์ทั้งหมดลงใน URL ทำให้ URL ยาวและจัดการยาก และในเดือนมีนาคม 2014 จึงเพิ่มการรองรับ URL แบบย่อของ goo.gl จาก Google
  • ในตอนนั้นลิงก์สั้นอยู่ในรูป goo.gl/abc123 และเมื่อคลิกจะรีไดเรกต์ไปยัง URL เต็มของเว็บไซต์ Compiler Explorer จากนั้นจึงถอดรหัสสถานะที่อยู่ใน URL

ลิงก์อ้อมหลัง Stack Overflow แบน

  • ในปี 2016 Stack Overflow แบน บริการย่อ URL ด้วยเหตุผลว่าสามารถซ่อนปลายทางจริงได้
  • มาตรการนี้ส่งผลกระทบต่อลิงก์ของ Compiler Explorer ด้วย และในเวลานั้นยังไม่มีความตั้งใจจะจัดเก็บข้อมูลผู้ใช้เองโดยตรง
  • วิธีแก้คือยังใช้ goo.gl ต่อไป แต่ให้ลิงก์แก่ผู้ใช้ในรูป godbolt.org/g/abc123
    • abc123 คือ ID เฉพาะของ goo.gl
    • การเข้าถึง /g/abc123 จะรีไดเรกต์ไปยัง goo.gl/abc123
    • จากนั้น goo.gl จะรีไดเรกต์อีกครั้งไปยัง URL เต็มของ godbolt.org ที่มีสถานะอยู่ภายใน
  • ภายหลังใช้ Google API เพื่อหลีกเลี่ยง เชนการรีไดเรกต์ หลายขั้น

การเปลี่ยนไปใช้ที่จัดเก็บของตนเองในปี 2018

  • ในปี 2018 ข้อจำกัดความยาว URL กลายเป็นปัญหายิ่งขึ้น และในเวลานั้นมีการบีบอัดข้อมูลใน URL อยู่แล้ว
  • Compiler Explorer เปลี่ยนมาเป็นโครงสร้างที่จัดเก็บสถานะเองโดยตรง
    • ทำแฮชอินพุต
    • เก็บสถานะเป็น เอกสาร JSON บน S3
    • ให้ URL รูป godbolt.org/z/hashbit โดยใช้รูปแบบสั้นของแฮช
    • ใช้ DynamoDB เก็บการแมประหว่างแฮชสั้นกับพาธเต็ม
  • ยังตรวจสอบด้วยว่าแฮชของลิงก์สั้นมีคำไม่เหมาะสมปะปนอยู่หรือไม่
    • หากพบคำไม่เหมาะสม จะจงใจใส่ข้อมูลเพิ่มเติมลงในเอกสารเพื่อให้ได้แฮชอื่น
    • พฤติกรรมนี้นำไปสู่ bug #1297

ปัญหาการเก็บรักษาที่เกิดจากการปิดตัวของ goo.gl

  • Compiler Explorer ยังรองรับลิงก์ godbolt.org/g/abc123 อยู่
  • Google เคยระบุว่าลิงก์เดิมจะยังคงรีไดเรกต์ไปยังปลายทางที่ตั้งใจไว้ แต่ goo.gl กลายเป็นแบบอ่านอย่างเดียวไปเมื่อหลายปีก่อน และมีกำหนดปิดถาวรใน เดือนสิงหาคม 2025
  • หลังจากปิดตัวแล้ว จะไม่สามารถตีความลิงก์ที่อิงกับ goo.gl ได้อีก
  • ลิงก์ goo.gl จริง ๆ นั้นฝั่ง Compiler Explorer ไม่สามารถแก้ไขได้ แต่ลิงก์ godbolt.org/g/abc123 สามารถเก็บรักษาไว้ในฐานข้อมูลของตนเองได้

การรวบรวมลิงก์เดิมและฐานข้อมูลของตนเอง

  • ในช่วงไม่กี่วันที่ผ่านมา กำลังรวบรวมลิงก์เดิมและ URL ปลายทางการรีไดเรกต์จากแหล่งสาธารณะหลายแห่ง
  • จนถึงตอนนี้พบลิงก์ประมาณ 12,000 รายการ
    • API ค้นหาเว็บของ Google
    • API ของ GitHub
    • เว็บล็อกของตนเอง
    • ดัมพ์ข้อมูล Stack Overflow ของ archive.org
    • รายการหน้าเว็บที่ Archive.org เก็บถาวรไว้
  • ภายในระบบได้ทำ การเปลี่ยนแปลง ให้ใช้ฐานข้อมูลของตนเองก่อน goo.gl
  • ยังเฝ้าติดตามลิงก์ g ใหม่ที่ยังไม่มีในฐานข้อมูลด้วย
  • ในเครื่องมีฐานข้อมูล sqlite และฝั่งโปรดักชันใช้ Dynamo

สิ่งที่ผู้ใช้ช่วยได้

  • หากคุณเก็บลิงก์ godbolt.org/g/abc123 เก่าไว้ต่างหาก การเข้าไปเยี่ยมชมแต่ละลิงก์ตอนนี้จะช่วยได้
  • เมื่อเข้าชมลิงก์ ลิงก์นั้นจะปรากฏในเว็บล็อก และภายหลังอาจถูกเพิ่มลงในฐานข้อมูล
  • มิฉะนั้น หลังเดือนสิงหาคม 2025 ลิงก์ดังกล่าวอาจใช้งานไม่ได้
  • กรณีนี้แสดงให้เห็นความเสี่ยงของการพึ่งพา บริการของบุคคลที่สาม สำหรับโครงสร้างพื้นฐานสำคัญ
  • หากต้องการรักษาคำมั่นสัญญาเรื่อง “URL ที่คงอยู่ตลอดไป” ก็ต้องเป็นเจ้าของทั้งสแต็กด้วยตนเอง

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น