Bạn chuyển khoản 5 triệu đồng qua app ngân hàng, màn hình báo "thành công", nhưng kiểm tra số dư ngay thì thấy chưa đổi. Đó là lúc hệ phân tán vi phạm linearizability, mức nhất quán mạnh nhất, thứ mà giới công nghệ coi là chuẩn vàng. Định nghĩa cốt lõi đơn giản nhưng khó cài đặt: mỗi thao tác đọc hoặc ghi phải trông như xảy ra tức thời tại một thời điểm giữa lúc gọi và lúc trả kết quả, mọi client phải đồng ý về đúng một thứ tự đó.

Real-time ordering: thời gian thực là trọng tài

Linearizability khác các mô hình yếu hơn như eventual consistency ở chỗ nó bám sát thời gian thực, không chỉ thứ tự logic giữa thao tác cùng client. Nếu thao tác A hoàn tất trước khi B bắt đầu theo đồng hồ tường, mọi node phải thấy hiệu lực của A trước B, dù hai client chưa từng liên lạc với nhau. Đây là lý do nó khó hơn nhất quán tuần tự (sequential consistency), vốn chỉ cần một thứ tự chung hợp lệ mà không cần tôn trọng ranh giới thời gian thực.

Điểm tuyến tính hóa: khoảnh khắc thao tác có hiệu lực

Mỗi thao tác trong hệ thống linearizable có một điểm tuyến tính hóa (linearization point), thời điểm duy nhất giữa lúc gọi và lúc nhận phản hồi mà tại đó nó được coi là xảy ra trọn vẹn. Với một kho khóa giá trị phân tán, điểm này thường trùng lúc bản ghi commit vào node lãnh đạo và xác nhận đủ phiếu trong nhóm đồng thuận. Nhờ vậy có thể chứng minh tính đúng đắn: chỉ cần tìm chuỗi điểm tuyến tính hóa hợp lệ, sắp xếp các thao tác thành một chuỗi không mâu thuẫn với thời gian thực.

Compare-and-swap: ví dụ cụ thể nhất

Compare-and-swap là cách trực quan nhất để cảm nhận linearizability. Hình dung một thanh ghi phân tán lưu lượt xem, hai tiến trình cùng gọi CAS trên cùng ô nhớ, cùng kỳ vọng giá trị cũ là 10, muốn đổi thành 11. Chỉ một lệnh thành công, tiến trình thua thấy giá trị đã là 11 và bị từ chối ngay, không có chuyện cả hai cùng thành công hay cùng thấy giá trị cũ. Chỉ một tiến trình thắng khiến CAS trở thành viên gạch nền tảng để xây các khóa phân tán và các cấu trúc đồng thuận cao hơn.

Cái giá phải trả cho linearizability

Muốn có linearizability, hệ thống phải trả bằng độ trễ và khả năng chịu lỗi mạng. Theo định lý CAP, khi phân vùng mạng xảy ra, bạn chỉ được chọn giữa nhất quán mạnh hoặc phục vụ liên tục. Mỗi lần đọc hoặc ghi phải qua vòng xác nhận đồng thuận giữa nhiều node ở nhiều khu vực địa lý, khiến độ trễ tăng đáng kể so với mô hình lỏng hơn. Nhiều nền tảng AI xử lý dữ liệu thời gian thực vì vậy phải cân nhắc thành phần nào thực sự cần linearizability, thành phần nào đánh đổi được để lấy tốc độ.

Jepsen: phép thử khắc nghiệt cho lời hứa nhất quán

Vì linearizability dễ tuyên bố nhưng khó chứng minh, giới kỹ sư dùng Jepsen, công cụ do Kyle Kingsbury xây từ năm 2013, để kiểm định thực tế. Jepsen chủ động gây hỗn loạn: cắt mạng, giết tiến trình đột ngột, làm lệch đồng hồ hệ thống, rồi ghi lại lịch sử để tìm thứ tự tuần tự hợp lệ. Hàng loạt cơ sở dữ liệu như MongoDB, Redis, Cassandra từng bị Jepsen vạch trần vi phạm lời hứa nhất quán, biến phép thử này thành tiêu chuẩn bất thành văn trước khi hệ thống được tin dùng ở quy mô sản xuất.