1 điểm bởi GN⁺ 2025-05-30 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Compiler Explorer đã thay đổi cách lưu trữ từ năm 2012 để các liên kết chia sẻ có thể tồn tại lâu dài, nhưng việc goo.gl ngừng hoạt động khiến nhu cầu bảo toàn các liên kết godbolt.org/g/abc123 cũ trở nên cấp bách
  • Ban đầu, toàn bộ trạng thái trình biên dịch được chứa trong URL; đến năm 2014 thì tích hợp dịch vụ rút gọn URL của Google; và sau khi Stack Overflow cấm URL rút gọn vào năm 2016, dịch vụ này đã tạo liên kết vòng godbolt.org/g/abc123
  • Từ năm 2018, khi giới hạn độ dài URL trở thành vấn đề lớn hơn, hệ thống chuyển sang cách riêng: lưu trạng thái dưới dạng tài liệu JSON trên S3 và dùng DynamoDB để quản lý ánh xạ giữa mã băm ngắn và đường dẫn đầy đủ
  • Khi Google chấm dứt các liên kết goo.gl vào tháng 8 năm 2025, việc phân giải các liên kết cũ dựa trên goo.gl sẽ trở nên khó khăn, nên dự án đang thu thập khoảng 12.000 liên kết g cùng đích chuyển hướng của chúng từ web công khai và nhật ký
  • Nếu người dùng hiện truy cập các liên kết Compiler Explorer cũ mà họ đang giữ, các liên kết đó có thể được đưa vào danh sách bảo tồn; và với tri thức chia sẻ cần tồn tại lâu dài, việc tự sở hữu hạ tầng cốt lõi sẽ an toàn hơn

Sự thay đổi trong cách lưu liên kết của Compiler Explorer

  • Năm 2012, Compiler Explorer lưu toàn bộ trạng thái ngay trong URL
  • Cách mã hóa toàn bộ trạng thái trình biên dịch vào URL khiến liên kết quá dài và khó xử lý, nên vào tháng 3 năm 2014 đã bổ sung hỗ trợ URL rút gọn goo.gl của Google
  • Khi đó, liên kết ngắn có dạng goo.gl/abc123; khi được nhấp vào, nó sẽ chuyển hướng đến URL đầy đủ của trang Compiler Explorer rồi giải mã trạng thái nằm trong URL

Liên kết vòng sau lệnh cấm của Stack Overflow

  • Năm 2016, Stack Overflow cấm dịch vụ rút gọn liên kết vì chúng có thể che giấu đích đến thực sự
  • Quy định này cũng ảnh hưởng đến các liên kết Compiler Explorer, và vào thời điểm đó dự án chưa có ý định tự lưu trữ dữ liệu người dùng
  • Giải pháp vòng là tiếp tục dùng goo.gl nhưng cung cấp cho người dùng liên kết dạng godbolt.org/g/abc123
    • abc123 là ID riêng của goo.gl
    • Truy cập /g/abc123 sẽ chuyển hướng tới goo.gl/abc123
    • Sau đó goo.gl lại chuyển hướng tới URL đầy đủ của godbolt.org chứa trạng thái
  • Về sau, dự án dùng Google API để tránh chuỗi chuyển hướng nhiều tầng này

Chuyển sang kho lưu trữ riêng vào năm 2018

  • Đến năm 2018, giới hạn độ dài URL trở thành vấn đề lớn hơn nữa, và dữ liệu trong URL khi đó đã được nén sẵn
  • Compiler Explorer chuyển sang cấu trúc tự lưu trạng thái
    • Băm đầu vào
    • Lưu trạng thái dưới dạng tài liệu JSON trên S3
    • Cung cấp URL godbolt.org/z/hashbit với dạng rút gọn của mã băm
    • Dùng DynamoDB để lưu ánh xạ giữa mã băm ngắn và đường dẫn đầy đủ
  • Hệ thống cũng kiểm tra xem mã băm của liên kết ngắn có chứa từ ngữ khó chịu hay không
    • Nếu xuất hiện từ ngữ khó chịu, hệ thống sẽ cố ý thêm thông tin vào tài liệu để tạo ra mã băm khác
    • Cơ chế này đã dẫn tới bug #1297

Vấn đề bảo tồn do goo.gl ngừng hoạt động

  • Compiler Explorer hiện vẫn hỗ trợ các liên kết godbolt.org/g/abc123
  • Google cho biết các liên kết hiện có sẽ tiếp tục chuyển hướng đến đích dự kiến, nhưng goo.gl đã bị chuyển sang chế độ chỉ đọc từ vài năm trước và sẽ ngừng hoạt động hoàn toàn vào tháng 8 năm 2025
  • Sau thời điểm đó, các liên kết dựa trên goo.gl sẽ không còn có thể được phân giải nữa
  • Bản thân các liên kết goo.gl thì Compiler Explorer không thể tự xử lý, nhưng các liên kết godbolt.org/g/abc123 có thể được bảo tồn trong cơ sở dữ liệu riêng

Thu thập liên kết cũ và cơ sở dữ liệu riêng

  • Trong vài ngày qua, dự án đã thu thập các liên kết cũ cùng URL đích chuyển hướng của chúng từ nhiều nguồn công khai
  • Tính đến hiện tại đã tìm được khoảng 12.000 liên kết
    • API tìm kiếm web của Google
    • API của GitHub
    • Nhật ký web nội bộ
    • Bản dump dữ liệu Stack Overflow trên archive.org
    • Danh sách các trang web được Archive.org lưu trữ
  • Về mặt nội bộ, hệ thống đã thay đổi để ưu tiên cơ sở dữ liệu riêng thay vì goo.gl
  • Dự án cũng đang theo dõi các liên kết g mới chưa có trong cơ sở dữ liệu
  • Ở máy cục bộ dùng cơ sở dữ liệu sqlite, còn môi trường production dùng Dynamo

Người dùng có thể giúp gì

  • Nếu bạn đang lưu riêng các liên kết godbolt.org/g/abc123 cũ, việc truy cập từng liên kết ngay bây giờ sẽ rất hữu ích
  • Khi truy cập liên kết, nó sẽ được ghi vào nhật ký web và sau đó có thể được thêm vào cơ sở dữ liệu
  • Nếu không, sau tháng 8 năm 2025 các liên kết đó có thể sẽ không còn hoạt động
  • Trường hợp này cho thấy rủi ro khi phụ thuộc vào dịch vụ bên thứ ba cho hạ tầng quan trọng
  • Để giữ lời hứa về một “URL tồn tại mãi mãi”, cần phải tự sở hữu toàn bộ stack

Chưa có bình luận nào.

Chưa có bình luận nào.