Avalability vs Consistency

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

CÁC PATTERNS VỀ SỰ NHẤT QUÁN (CONSISTENCY)

Với nhiều bản sao của cùng một dữ liệu, chúng ta phải đối mặt với các tùy chọn về cách đồng bộ hóa để client có một cái nhìn nhất quán về dữ liệu.

TÍNH NHẤT QUÁN LỎNG LẺO (WEAK CONSISTENCY)

Sau một lệnh ghi, có thể đọc được hoặc không được ngay lập tức.

Cách tiếp cận này được thấy trong các hệ thống như memcached. Tính nhất quán yếu, lỏng lẻo hoạt động tốt trong các use cases thời gian thực như VoIP, trò chuyện video và trò chơi nhiều người chơi trong thời gian thực. Ví dụ: nếu bạn đang thực hiện một cuộc gọi điện thoại và mất liên lạc trong vài giây, khi bạn lấy lại kết nối, bạn không nghe thấy những gì được nói trong khi mất kết nối.

  Bài toán đồng thuận trong Distributed Systems
  System Design Cơ Bản - Phần 5: Indexes

TÍNH NHẤT QUÁN CÓ ĐỘ TRỄ (EVENTUAL CONSISTENCY)

Sau một lệnh ghi, các lệnh đọc sẽ thấy được data cùng với một độ trễ (thường trong vòng một phần nghìn giây). Dữ liệu được nhân rộng không đồng bộ.

Cách tiếp cận này được nhìn thấy trong các hệ thống như DNS và email. Tính nhất quán cuối cùng hoạt động tốt trong các hệ thống có sẵn cao.

TÍNH NHẤT QUÁN CHẶT (STRONG CONSISTENCY)

Sau khi ghi, sẽ đọc được dữ liệu ngay lập tức. Dữ liệu được nhân rộng đồng bộ.

Cách tiếp cận này được nhìn thấy trong các hệ thống file và RDBMS. Tính nhất quán mạnh mẽ hoạt động tốt trong các hệ thống cần bảo đảm tính ACID.

THAM KHẢO THÊM TẠI:

Transactions across data centers

CÁC PATTERNS VỀ TÍNH KHẢ DỤNG, SẴN SÀNG (AVAILABILITY)

Có hai patterns chính để hỗ trợ tính khả dụng cao (high availability): fail-over (chuyển đổi dự phòng) và replication (nhân bản).

FAIL-OVER

ACTIVE-PASSIVE

Với chuyển đổi dự phòng dạng active-passive, các lệnh check heartbeats được gửi giữa máy chủ active và máy chủ passive ở chế độ standby. Nếu heartbeats bị gián đoạn, máy passive sẽ chiếm địa chỉ IP của máy active và tiếp tục dịch vụ.

Thời gian ngừng hoạt động được xác định bởi liệu máy passive đã chạy ở chế độ ‘hot’ standby hay liệu nó có cần khởi động từ chế độ ‘cold’ standby hay không. Chỉ có máy chủ active xử lý request.

Chuyển đổi dự phòng dạng active-passive cũng có thể được gọi là chuyển đổi dự phòng master-slave.

ACTIVE-ACTIVE

Trong active-active, cả hai máy chủ đều xử lý request, phân tán tải giữa chúng.

Nếu các máy chủ được công khai ra internet, DNS sẽ cần biết về IP công khai của cả hai máy chủ. Nếu các máy chủ nằm trong nội bộ, logic ứng dụng sẽ cần biết về cả hai máy chủ.

Chuyển đổi dự phòng hoạt động active-active cũng có thể được gọi là chuyển đổi dự phòng master-master.

NHƯỢC ĐIỂM CỦA CHUYỂN ĐỔI DỰ PHÒNG

Chuyển đổi dự phòng thêm phần cứng và tăng độ phức tạp.
Có khả năng mất dữ liệu nếu hệ thống hoạt động bị lỗi trước khi bất kỳ dữ liệu mới được ghi nào có thể được nhân rộng (replicate) sang máy passive.

NHÂN RỘNG (REPLICATION)

MASTER-SLAVE REPLICATION

14-1

Máy chủ master phục vụ đọc và ghi, sao chép ghi vào một hoặc nhiều máy slave chỉ phục vụ đọc. Các slave cũng có thể sao chép thêm các slave theo kiểu giống như mô hình cây. Nếu master ngừng hoạt động, hệ thống có thể tiếp tục hoạt động ở chế độ chỉ đọc cho đến khi một máy slave được thăng cấp thành master hoặc có một master mới được cung cấp.

Nhược điểm:

  • Cần logic để thăng cấp một máy slave thành máy master.
  • Có khả năng mất dữ liệu nếu máy master bị lỗi trước khi bất kỳ dữ liệu mới được ghi nào có thể được sao chép sang các máy salve khác.
  • Việc nhân rộng yêu cầu phải thêm phần cứng và tăng thêm độ phức tạp.

MASTER-MASTER REPLICATION

14-2

Cả hai máy master phối hợp với nhau phục vụ đọc ghi. Nếu một trong hai chủ bị hỏng, hệ thống có thể tiếp tục hoạt động với cả đọc và ghi.

Nhược điểm:

  • Sẽ cần đến một bộ cân bằng tải hoặc sẽ cần thay đổi logic ứng dụng để xác định nơi ghi.
    Hầu hết các hệ thống master-master đều có tính nhất quán lỏng lẻo (vi phạm ACID) hoặc tăng độ trễ ghi do đồng bộ hóa.
  • Giải quyết xung đột xuất hiện nhiều hơn khi nhiều nút ghi được thêm vào và do đó sẽ làm tăng độ trễ (latency).
  • Và tất nhiên, việc nhân rộng yêu cầu phải thêm phần cứng và tăng thêm độ phức tạp.

CÁC TÍNH KHẢ NĂNG KHẢ DỤNG

Tính khả dụng thường được định lượng theo thời gian hoạt động (hoặc thời gian chết) theo phần trăm thời gian dịch vụ có sẵn. Tính khả dụng thường được đo bằng số lượng các số 9 – một dịch vụ có 99,99% khả dụng được mô tả là có bốn số 9.

99.9% AVAILABILITY – 3 SỐ 9

Duration Acceptable downtime
Downtime per year 8h 45min 57s
Downtime per month 43m 49.7s
Downtime per week 10m 4.8s
Downtime per day 1m 26.4s

99.99% AVAILABILITY – FOUR 9S

Duration Acceptable downtime
Downtime per year 52min 35.7s
Downtime per month 4m 23s
Downtime per week 1m 5s
Downtime per day 8.6s

KHẢ DỤNG SONG SONG VS THEO TRÌNH TỰ

Nếu một dịch vụ bao gồm nhiều thành phần dễ bị lỗi, tính khả dụng chung của dịch vụ phụ thuộc vào việc các thành phần đó theo trình tự hay song song.

THEO THỨ TỰ

Tính khả dụng chung giảm khi hai thành phần có sẵn < 100% theo thứ tự:

Tính khả dụng (tổng) = Tính khả dụng (Foo) * Tính khả dụng (Bar)

Nếu cả Foo và Bar đều có sẵn 99,9%, tổng số khả dụng của chúng theo thứ tự sẽ là 99,8%.

SONG SONG

Tính khả dụng chung tăng khi hai thành phần có sẵn < 100% song song:

Tính khả dụng (tổng) = 1 – (1 – khả dụng (Foo)) * (1 – khả dụng (Bar))

Nếu cả Foo và Bar đều có sẵn 99,9%, thì tổng khả dụng song song của chúng sẽ là 99.9999%.

Theo system-design-primer

Bài viết gốc được đăng tải tại edwardthienhoang.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev