/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 là “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
Bình luận trên Hacker News
Có thể xem thảo luận HN trước đó tại đây
fastjson(liên kết GitHub)/dev/nulllàm DB, còn backend thì dựng bằng nocode/dev/null, chưa từng có lấy một vấn đề nào liên quan đến người dùngViệc
/dev/nullthỏa mãn ACID cũng giống như nghiệm tầm thường của DBDù 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)
/dev/nullthì có lẽ lại là ngoại lệ/dev/nullcho kiểu mục đích nàyDù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/nullgiống như lệnhtruecủa thế giới lưu trữ/dev/nullvàtruethì thuộc top bug-free/dev/nullluô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
/dev/null0,/dev/null1Khi 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
/devchưa được mount/dev/nulltheo nhiều định nghĩa học thuật là serializable, nhưng không phải strict serializableCó 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)
Hệ thống
/dev/nullchỉ tồn tại một trạng thái duy nhất/dev/nullcó phải là web scale không/dev/nullcòn có thể chạy được cả các trang như zombo.comCó 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)
/dev/nulllúc nào cũng rỗng, nhưng thực ra nó là **