1 điểm bởi GN⁺ 2025-05-30 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-05-30
Ý kiến trên Hacker News
  • Trước năm 2010, tôi từng cảm thấy việc giả định rằng liên kết sẽ tồn tại mãi mãi là điều hiển nhiên, nên đã tích cực dùng tính năng bookmark của trình duyệt. Nhưng theo thời gian, tôi trải nghiệm việc rất nhiều bookmark gần như trở nên vô dụng vì linkrot, và từ đó hình thành thói quen lưu trang web thành PDF. Sau khi chế độ đọc (Reader view) trở nên phổ biến, tôi chuyển sang cách sao chép nội dung trong Reader view và lưu thành tệp RTF
    • Tôi dùng tiện ích mở rộng SingleFile để lưu trữ mọi trang mình truy cập, việc cài đặt khá đơn giản nhưng cần lưu ý là nó chiếm khá nhiều dung lượng lưu trữ; ví dụ thư mục lưu trữ trang web của tôi đã lên tới 1.1TB liên kết GitHub của SingleFile
    • Nếu cài tiện ích mở rộng trình duyệt Web Archive chính thức, bạn có thể thiết lập để tự động lưu trữ mọi trang mình truy cập
    • Cách của tôi là ghi nhớ thông tin quan trọng hoặc ít nhất là nhớ nơi có thể tìm thấy nó, và vì đến giờ tôi vẫn còn sống nên cách này cũng hiệu quả theo cách riêng của nó
    • Tôi tự hỏi liệu có tiện ích mở rộng trình duyệt nào tự động chuyển sang web.archive.org khi một liên kết bị timeout hay không
    • Cũng có cách dùng định dạng WARC cùng với WebRecorder thông tin về WARC, WebRecorder
  • Có lẽ hợp tác với dự án Goo.gl của ArchiveTeam là việc đáng làm thông tin chi tiết về dự án, rút gọn URL đúng là một trong những ý tưởng tệ nhất giải thích về URLTeam
    • Theo tình hình thời gian thực của dự án đó, trong số 42,5 tỷ URL goo.gl thì đã phát hiện được 7,5 tỷ liên kết trạng thái thời gian thực
    • Có lẽ ArchiveTeam đã brute-force các URL rút gọn Goo.gl chứ không phải các liên kết "đã biết", nên tôi cho rằng phần lớn hoặc toàn bộ URL của Compiler Explorer có thể đã nằm trong dữ liệu của họ; vì vậy liên hệ với họ có vẻ là một ý hay
  • Việc URL tồn tại mãi mãi vốn là một giấc mơ lý tưởng. Thực tế thì 99% URL không hề mang tính vĩnh viễn, nên tôi tự hỏi liệu thay vì tiếp tục chống lại một trận chiến thất bại, có nên xây dựng công nghệ với giả định rằng hạ tầng không phải là thứ tồn tại vĩnh viễn hay không
    • Xây dựng công nghệ với giả định rằng hạ tầng không vĩnh viễn là hướng đi đúng, và tôi cũng nghĩ nên tránh dùng dịch vụ rút gọn URL như thể đó là hạ tầng
    • URN (Uniform Resource Name) là hệ thống được thiết kế để gán danh tính cho tài nguyên bất kể vị trí, nhưng nó không trở nên phổ biến; thay vào đó, các dịch vụ rút gọn URL chỉ là những nỗ lực tương tự nhưng không thực sự triển khai tốt khái niệm này giải thích trên Wikipedia về URN
    • Tên miền thường xuyên đổi chủ, và ngay cả những URL tưởng như vĩnh viễn cũng có thể theo thời gian biến thành liên kết phishing độc hại
    • URL chỉ nhận diện vị trí của tài nguyên trên mạng, chứ không nhận diện chính tài nguyên đó, nên không nhất thiết phải vĩnh viễn hay duy nhất; đó cũng là lý do nó được gọi là 'Uniform Resource Locator'. Nhận thức được vấn đề này nên Digital Object Identifier đã được phát minh vào năm 1997
  • Có gì đó khá thi vị trong việc lạm dụng dịch vụ rút gọn liên kết như cơ sở dữ liệu, rồi sau này lại phải đi tìm lại những liên kết quý giá đó khắp các ngóc ngách của Internet
    • Mục đích ban đầu của rút gọn URL là biến URL dài thành ngắn; đúng hơn thì vấn đề nằm ở những người lạm dụng tên miền để che giấu spam, lừa đảo và các trang bất hợp pháp thông qua URL rút gọn
    • Có vẻ họ cũng chỉ dùng dịch vụ rút gọn để nén URL thôi, còn bản thân URL gốc của họ vốn đã lưu trạng thái trình biên dịch như một "cơ sở dữ liệu"
  • https://killedbygoogle.com/, Google Go Links (2010~2021) là dịch vụ rút gọn URL của Google đã hoạt động khoảng 11 năm trước khi bị ngừng 4 năm trước, và khách hàng Google Workspace còn có thể dùng tên miền tùy chỉnh
    • Việc ngừng dịch vụ theo kiểu không thể tạo thêm URL rút gọn mới nữa ("minting new ones") không phải là vấn đề quá nghiêm trọng; điều bất công hơn nhiều là chấm dứt cả những URL đã được tạo, nhất là khi Google vẫn đang tiếp tục dùng tính năng này nội bộ trong một số ứng dụng
  • Dòng chữ "Bài viết này do con người viết, nhưng đề xuất liên kết và kiểm tra ngữ pháp do LLM thực hiện" là điều đập vào mắt tôi nhiều thứ hai, cảm giác như đang chứng kiến sự khởi đầu của một xu hướng mới
    • Thật thú vị khi con người cảm thấy cần phải thêm những dòng thông báo như thế này
    • Cá nhân tôi hoàn toàn không thấy cần những dòng thông báo kiểu đó; nếu bản thân nội dung tự chứng minh được giá trị của nó thì thế là đủ. Nếu chất lượng nội dung kém thì đó vẫn là vấn đề, bất kể là do AI tạo hay con người viết. Những người muốn có thông báo như vậy có lẽ xem đó như một công cụ phán đoán thay thế, vì bản thân họ không có khả năng tự đánh giá nội dung và mặc định nội dung do AI tạo ra là chất lượng thấp
  • Tôi khá bất ngờ khi Google còn muốn tắt cả phiên bản chỉ đọc, và tự hỏi liệu họ có lo ngại rủi ro pháp lý nào đó chỉ vì vẫn giữ lại việc chuyển hướng các liên kết riêng tư hay không
    • Tôi không biết chính xác tình hình nội bộ, nhưng có thể họ muốn dừng vì dịch vụ đang chạy phụ thuộc vào các thư viện hoặc runtime đã cũ hay có lỗ hổng bảo mật. Cuối cùng thì dù chi phí nhỏ đến đâu, đây vẫn là một quyết định đóng dịch vụ để tiết kiệm chi phí, và tạo cảm giác rằng họ không mấy bận tâm đến thiện chí doanh nghiệp hay những lời hứa trong quá khứ
  • Tôi tự hỏi liệu có cách nào nhờ một nhân viên Google trích riêng từ cơ sở dữ liệu những URL rút gọn chuyển hướng đến godbolt.org hay không
  • Thành thật mà nói, nếu không có một quỹ được tài trợ đủ mạnh can thiệp, thì Compiler Explorer và godbolt.org rồi cũng có số phận không vĩnh viễn. Có lẽ một ngày nào đó mọi thông tin sẽ được trừu tượng hóa và chứa trong một mô hình khổng lồ với số lượng tham số khổng lồ
    • Chúng tôi đã vận hành khá tốt cho đến nay. Tuần này là kỷ niệm 13 năm, và ngay cả khi mọi nhà tài trợ ngừng hỗ trợ thì chúng tôi vẫn tích lũy đủ kinh phí để vận hành thêm hơn 1 năm nữa. Gần đây chúng tôi cũng đang cân nhắc việc thành lập quỹ; trên thực tế, điểm dễ tổn thương không phải là thiếu tiền mà là việc cá nhân tôi là điểm lỗi đơn lẻ duy nhất
    • Đúng vậy, giờ đây thời điểm các liên kết Compiler Explorer ngừng hoạt động sẽ chỉ là khi chính Compiler Explorer biến mất thật sự. Trước lúc đó thì các liên kết vẫn sẽ sống. Tôi đặc biệt thấy các liên kết Compiler Explorer trong bug report rất có giá trị; bản thân tôi cũng đưa những liên kết như vậy và đồng thời chèn trực tiếp đoạn mã vào báo cáo, kèm theo thông tin về compiler và phiên bản đã dùng. Tôi không nghĩ Compiler Explorer sẽ sớm biến mất, nhưng việc làm bug report theo kiểu tự chứa như vậy giúp chuẩn bị cho cả trường hợp nó biến mất ngoài dự kiến
    • Tôi chợt nhớ đến câu đùa theo định lý no-hiding rằng thông tin sẽ sống mãi mãi
  • Việc duy trì tên miền cũng tốn tiền, nên tôi không hiểu URL có thể tồn tại mãi bằng cách nào; tôi cũng tự hỏi liệu việc URL biến mất tự nó có thể là điều tích cực hay không. Loài người chỉ đặc biệt lưu giữ những thông tin có giá trị, còn phần còn lại tự nhiên trôi vào lịch sử
    • Tuy nhiên, các nhà sử học lại muốn có nhiều hơn cả những dữ liệu "rác" như vậy, vì như thế họ mới hiểu rõ hơn đời sống thực tế và bối cảnh của thời đó. Nếu có thể đi cỗ máy thời gian, tôi tự hỏi các nhà sử học sau một nghìn năm sẽ nhìn thời kỳ này ra sao, khi phần lớn thông tin đã biến mất cùng với sự tiêu vong của truyền thông số
    • Tôi cũng đồng ý rằng việc URL biến mất có mặt tích cực, và tôi có viết một bài về điều đó về tính phù du của Internet