- Compiler Explorer ban đầu sử dụng cách lưu toàn bộ trạng thái trực tiếp trong URL
- Khi URL trở nên quá dài, dự án đã đưa vào dùng dịch vụ rút gọn URL goo.gl của Google, nhưng cấu trúc này dẫn đến sự phức tạp do phải đi qua nhiều lần chuyển hướng
- Từ năm 2018, do vấn đề giới hạn độ dài URL và khó khăn trong bảo trì, dự án đã chuyển sang cấu trúc dùng kho lưu trữ riêng dựa trên S3 và DynamoDB
- Tuy nhiên, khi Google sẽ chấm dứt dịch vụ goo.gl vào tháng 8/2025, dự án rơi vào tình huống phải tự quản lý tính bền vững của các liên kết rút gọn cũ
- Tính đến thời điểm hiện tại, dự án đã giải cứu hơn 12.000 liên kết legacy, cho thấy tầm quan trọng của việc bảo tồn tri thức lập trình và vận hành dịch vụ bền vững
Lịch sử và cam kết duy trì vĩnh viễn các liên kết của Compiler Explorer
Thiết kế ban đầu và lý do đưa vào goo.gl
- Năm 2012, Compiler Explorer áp dụng cấu trúc mã hóa toàn bộ trạng thái trình biên dịch trực tiếp vào URL
- Khi lượng thông tin trạng thái tăng lên, URL trở nên quá dài
- Để rút ngắn URL, năm 2014 dự án đã áp dụng dịch vụ rút gọn goo.gl của Google
- Cung cấp liên kết rút gọn dạng goo.gl/abc123, và khi nhấp vào sẽ chuyển hướng đến URL dài gốc rồi khôi phục trạng thái
- Stack Overflow cấm sử dụng liên kết rút gọn vào năm 2016, khiến cách làm cũ bị hạn chế
- Tất cả các liên kết dùng goo.gl đều bị ảnh hưởng vì nguy cơ che giấu liên kết độc hại
- Vì không muốn lưu dữ liệu người dùng, dự án đã tạm thời tạo đường dẫn riêng dạng godbolt.org/g/abc123
- Khi truy cập godbolt.org/g/abc123 sẽ lại chuyển hướng sang goo.gl/abc123
- Từ đó cuối cùng quay về URL dài của godbolt.org
- Việc phát sinh nhiều lần chuyển hướng khiến cấu trúc trở nên phức tạp
- Sau đó, việc dùng Google API đã giúp đơn giản hóa một phần quy trình chuyển hướng
Đưa vào kho lưu trữ riêng và quản lý liên kết
- Từ năm 2018, giới hạn độ dài URL và sự bất tiện của việc nén dữ liệu bắt đầu thường xuyên trở thành vấn đề
- Triển khai cấu trúc lưu trữ riêng sử dụng S3 và DynamoDB
- Băm giá trị đầu vào rồi lưu vào S3 dưới dạng tài liệu JSON
- Khi truy cập liên kết ngắn (godbolt.org/z/hashbit), hệ thống tra cứu ánh xạ trong DynamoDB
- Nếu giá trị băm chứa từ ngữ tục tĩu hay không phù hợp, hệ thống có cơ chế thêm yếu tố ngẫu nhiên để né tránh
- Đã xử lý vấn đề nội dung không phù hợp trong liên kết dựa trên hash và từng gặp các lỗi liên quan (ví dụ: issue #1297)
- Hiện tại dự án vẫn tiếp tục hỗ trợ định dạng địa chỉ godbolt.org/g/abc123
- Bất chấp thông báo chính thức từ Google, dịch vụ goo.gl đã chuyển sang chế độ chỉ đọc và dự kiến sẽ bị đóng hoàn toàn vào tháng 8/2025
- Các liên kết rút gọn dựa trên goo.gl sẽ không còn có thể được phân giải nữa
- Vì dạng godbolt.org/g/abc123 có thể kéo dài tuổi thọ nhờ tự quản lý trực tiếp, dự án đã tiến hành chiến dịch giải cứu có hệ thống cho cấu trúc liên kết này
Thu thập hàng loạt liên kết legacy và công việc lưu trữ
- Gần đây, dự án đã crawl và đưa các liên kết legacy vào cơ sở dữ liệu từ mọi nguồn có thể (tìm kiếm, data dump, web log, v.v.)
- Google Web Search API
- GitHub API
- log máy chủ nội bộ
- data dump Stack Overflow trên archive.org
- dữ liệu các trang web được lưu trữ trên Archive.org
- Đã khôi phục thành công khoảng 12.298 liên kết rút gọn
- Nội bộ dự án đã bắt đầu dùng cơ sở dữ liệu liên kết riêng thay cho goo.gl (PR liên quan: #7724)
- Trong thời gian tới, dự án vẫn sẽ tiếp tục thu thập và lưu lại các liên kết godbolt.org/g/abc123 chưa được phát hiện
- Nếu cộng đồng còn giữ các liên kết chưa được đăng ký, hãy truy cập trực tiếp hoặc báo cho quản trị viên để bổ sung vào cơ sở dữ liệu
Triết lý dự án và tầm quan trọng của việc sở hữu hạ tầng
- Trường hợp lần này cho thấy rủi ro khi phụ thuộc tính bền vững của hạ tầng quan trọng vào dịch vụ bên ngoài (ví dụ: Google)
- Việc quản lý liên kết rút gọn và cấu trúc sao lưu chỉ là giải pháp tạm thời; để thật sự hứa hẹn URL tồn tại vĩnh viễn, cần trực tiếp quản lý toàn bộ dịch vụ
- Trong quá trình giải cứu các liên kết legacy cũ như một cuộc khảo cổ số, dự án nhận ra mỗi liên kết đều là dấu vết của việc chia sẻ tri thức, đặt câu hỏi và giải thích khái niệm của ai đó
- Hành động lưu trữ và bảo tồn này cũng gắn trực tiếp với việc lưu trữ lịch sử của cộng đồng lập trình
- Nếu bạn tìm thấy một liên kết Compiler Explorer cũ, ngay từ bây giờ hãy thử nhấp vào nó; đó cũng là một cách góp phần bảo tồn tri thức trên Internet
- Lần này, bằng cách phụ thuộc vào hạ tầng do chính mình kiểm soát thay vì bên thứ ba, dự án có thể thực hiện lời hứa về tính bền vững lâu dài
Disclaimer
- Bài viết này do con người viết, và đã sử dụng LLM trong quá trình gợi ý liên kết và kiểm tra ngữ pháp
1 bình luận
Ý kiến trên Hacker News