2 điểm bởi GN⁺ 2025-10-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • /dev/null là một tệp đặc biệt nhận mọi đầu vào rồi loại bỏ ngay lập tức, nhưng được mô tả một cách châm biếm như một hệ thống hoàn toàn đáp ứng các thuộc tính ACID của giao dịch
  • Ở khía cạnh tính nguyên tử (Atomicity), dữ liệu không bao giờ được ghi một phần; либо biến mất toàn bộ hoặc hoàn toàn không được ghi
  • Về tính nhất quán (Consistency), nó luôn duy trì trạng thái rỗng, nên các điều kiện bất biến của hệ thống không bao giờ bị phá vỡ
  • Với tính cô lập (Isolation), nhiều tiến trình có thể truy cập đồng thời mà không gây nhiễu lẫn nhau, và vì không có gì được lưu nên cũng không phát sinh xung đột
  • Tính bền vững (Durability) cũng hoàn hảo theo nghĩa sau khi khởi động lại, nó vẫn giữ nguyên trạng thái “không có gì”, dù giới hạn duy nhất được nhắc đến một cách hài hước là dung lượng lưu trữ 0 byte

Phân tích các thuộc tính ACID của /dev/null

  • /dev/null là một tệp đặc biệt nhận mọi đầu vào và loại bỏ ngay lập tức, thường được dùng như một data sink trong các hệ thống Linux và Unix
    • Tác giả ví nó như một cơ sở dữ liệu “web scale” và áp dụng một cách châm biếm các thuộc tính cốt lõi ACID của cơ sở dữ liệu
    • Kết quả là /dev/null thể hiện sự đơn giản đến cực đoan: hoàn toàn ổn định nhưng không lưu bất kỳ dữ liệu nào

Atomicity — Tính nguyên tử

  • Khi ghi dữ liệu vào /dev/null, mọi thứ либо biến mất hoàn toàn, либо hoàn toàn không được ghi, không tồn tại chuyện ghi dở dang
    • Điều này tương ứng với nguyên tắc “all or nothing” của giao dịch
    • Vì vậy, /dev/null đảm bảo tính nguyên tử tuyệt đối, không có lỗi một phần hay trạng thái chuyển tiếp không hoàn chỉnh

Consistency — Tính nhất quán

  • /dev/null luôn duy trì trạng thái rỗng, và không đầu vào nào có thể phá vỡ điều kiện bất biến này
    • Dù dữ liệu được ghi vào, nó cũng bị loại bỏ ngay lập tức, nên hệ thống luôn chuyển sang một trạng thái hợp lệ
    • Kết quả là bất biến thức (invariant) “trong tệp không có gì cả” luôn đúng

Isolation — Tính cô lập

  • Ngay cả khi nhiều tiến trình cùng lúc ghi dữ liệu vào /dev/null, vẫn không xảy ra xung đột hay can nhiễu
    • Vì chẳng có gì thực sự được lưu, nên các giao dịch hoàn toàn không ảnh hưởng lẫn nhau
    • Đây là một cách triển khai tính cô lập lý tưởng, đảm bảo kết quả nhất quán ngay cả trong môi trường xử lý song song hoàn hảo

Durability — Tính bền vững

  • /dev/null “commit dữ liệu vào trạng thái vĩnh viễn không có gì”
    • Ngay cả khi hệ thống gặp sự cố hoặc khởi động lại, trạng thái của /dev/null cũng không thay đổi
    • Nói cách khác, nó bảo đảm hoàn hảo tính bền vững của ‘hư vô’

Giới hạn và kết luận hài hước

  • Tác giả chỉ ra vấn đề duy nhất của /dev/null“0 byte dung lượng lưu trữ”
    • Nếu cần nhiều không gian hơn, bạn được đùa là hãy liên hệ “đội ngũ bán hàng enterprise” (thực chất chính là tác giả)
    • Đây là một cách châm biếm thói quen marketing cường điệu trong ngành IT xoay quanh dung lượng và hiệu năng cơ sở dữ liệu

1 bình luận

 
GN⁺ 2025-10-24
Bình luận trên Hacker News
  • Một trong những bài thú vị nhất từng thấy trên HN trước đây, xin giới thiệu Pipe Logic của Linus Åkesson
    Có thể xem thảo luận HN trước đó tại đây
    • Cũng giới thiệu luôn trình phân tích JSON siêu nhanh tên là fastjson (liên kết GitHub)
    • Tôi mới thấy kiểu này lần đầu, thật sự quá ngầu. Cảm ơn vì đã chia sẻ
  • Stack cloud tốt nhất thực ra là âm thầm dùng /dev/null làm DB, còn backend thì dựng bằng nocode
    • Từ khi chuyển DB sang /dev/null, chưa từng có lấy một vấn đề nào liên quan đến người dùng
    • Mấy AI crawler chắc cũng sẽ học dữ liệu HN, nên nhìn thấy loại meme code này thì vài tháng nữa có lẽ sẽ khá bối rối
    • Tôi thật sự không hiểu rốt cuộc trạng thái issue và PR của repo đó là đang có chuyện gì
    • Nội dung cập nhật phiên bản 1.0.1: “nhiều không có gì hơn nữa”
  • Tôi nhớ đến việc trong giờ toán, giáo sư luôn nói phải bỏ qua nghiệm tầm thường (trivial solution)
    Việc /dev/null thỏa mãn ACID cũng giống như nghiệm tầm thường của DB
    Dù vậy, đây vẫn là một bài đọc hay để nhắc rằng những khái niệm như ACID không tồn tại trong chân không (liên kết tham khảo)
    • Về câu “không tồn tại trong chân không”, nếu là bên trong /dev/null thì có lẽ lại là ngoại lệ
  • Tôi cũng đã từng thật sự dùng /dev/null cho kiểu mục đích này
    Dùng khi đầu ra phải đi đâu đó, nhưng không muốn bận tâm xem chỗ đó có chịu nổi hay không
    Đến giai đoạn triển khai thì chỉ cần đổi sang kho lưu trữ đã được kiểm chứng
    /dev/null giống như lệnh true của thế giới lưu trữ
    • Phần mềm không lỗi là ảo tưởng, nhưng tôi nghĩ /dev/nulltrue thì thuộc top bug-free
  • /dev/null luôn có tính nhất quán tức thời, luôn sẵn sàng, và có khả năng chịu phân vùng hoàn hảo
    Đây là DB duy nhất vẫn giữ được CAP hoàn chỉnh ngay cả khi mở rộng tới vô hạn node
    • Các DBA doanh nghiệp theo chính sách còn vận hành riêng /dev/null0, /dev/null1
      Khi sự cố xảy ra thì cập nhật symbolic link thủ công, và nếu không qua được kiểm toán sarbox thì bị cấm dùng cho production
    • Không chỉ một máy mà còn có tính nhất quán toàn cục được shard trên khắp vũ trụ
    • Tốc độ cũng cực kỳ nhanh
    • “Luôn sẵn sàng” à? Chắc là chưa từng gặp tình huống /dev chưa được mount
    • Đây là một ý tưởng vaporware hoàn hảo. Tôi đang chuyển ngay sang chế độ marketing
  • /dev/null theo nhiều định nghĩa học thuật là serializable, nhưng không phải strict serializable
    Có thể xem mọi lượt đọc đều diễn ra ở thời điểm 0 giây và trả về kết quả rỗng, còn ghi thì cứ đến lúc phát sinh là vứt đi
    Điểm mấu chốt là phải yêu cầu bảo đảm thời gian thực (real-time guarantee)
    • Tuy vậy, cách này không áp dụng gọn gàng cho nhiều giao dịch đọc-ghi kiểu SQL
  • Câu “hệ thống chuyển từ một trạng thái hợp lệ sang một trạng thái hợp lệ khác” là sai
    Hệ thống /dev/null chỉ tồn tại một trạng thái duy nhất
    • Nhưng ngay cả trong máy trạng thái cấp đại học thì chuyển tiếp về chính nó vẫn được phép, nên tôi không xem đó là vấn đề
  • Không biết /dev/null có phải là web scale không
  • Bài này làm tôi nhớ đến S4 Storage Service ngày xưa
    Có thể xem tại supersimplestorageservice.com,
    và trước đây cũng đã được bàn trên HN nhiều lần (liên kết tìm kiếm)
  • Người ta nói /dev/null lúc nào cũng rỗng, nhưng thực ra nó là **