DEV Community

meotism
meotism

Posted on

Consistency Thinking

Nay chúng ta sẽ bàn luận về vấn đề dữ liệu, liệu dữ liệu phải luôn luôn chính xác 100% ngay lập tức?

Hầu hết mọi người sẽ nói là có chứ, dữ liệu phải chính xác mới đúng. Nhưng trong hệ thống phân tán quy mô lớn câu hỏi ấy sẽ là một cái bẫy. Bây giờ chúng ta sẽ mổ xẻ phân tích tại sao?

1. Lầm tưởng dữ liệu

Statement: "Dữ liệu phải luôn cập nhật real-time cho tất cả mọi người"

Trong hệ thống lớn, đó là một thảm hoạ chính vì sẽ làm chậm hiệu suất hệ thống, chi phí cao và khó mở rộng

Vì vậy consistency(tính nhất quán) không cần là giá trị tuyệt đối, là 1 sự đánh đổi chi phí vận hành, tốc độ, trải nghiệm người dùng, độ tin cậy của dữ liệu

2. Định nghĩa lại tư duy về Consistency

Consistency là mức độ đồng bộ dữ liệu giữa các nơi trong hệ thống tại một thời điểm cụ thể. Thay vì hỏi dữ liệu đúng không sẽ hỏi các câu hỏi khác như là:
Ai cần thấy dữ liệu đúng? Cần thấy dữ liệu đúng trong bao lâu? Đúng ngay hay độ trễ vài giây là chấp nhận được?
Từ những câu trả lời chúng ta sẽ chọn ra mô hình phát triển phù hợp

3. 4 Mô hình Consistency

-- Strong Consistency

  • Mọi lượt đọc luôn thấy dữ liệu mới nhất. Dùng cho: Payment, Banking, Stock, Inventory

-- Read after write

  • Người dùng thấy ngay dữ liệu họ vừa cập nhật. Dùng cho: Profile update, Post bài, Setting cá nhân.

-- Monotonic Reads

  • Không bao giờ thấy dữ liệu quay ngược thời gian, tức là không bao giờ thấy tin nhắn trong quá khứ hiển thị r biến mất sau đó xuất hiện lại. Dùng cho: Chat, notification, timeline

-- Eventual Consistency

  • Mọi nơi sẽ đồng bộ nhưng từ từ. Dùng cho: Search, Feed, Analytics, Cache, Recommendation.

4. Ví dụ thực tế

Cập nhật tên profile:

Phân tách 1 hành động thành nhiều lớp yêu cầu nhất quán khác nhau - tư duy đúng.
"Consistency là trade-off giữa tốc độ, chi phí, UX và độ chính xác"
Dựa trên các yếu tố:

That's it, Happy reading and happy coding!

Hints:

Top comments (0)