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.
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
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
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:
- Sử dụng Google Keep hiệu quả A-Z
- System Design Cơ Bản – Consistent Hashing
- System Design Cơ Bản – Định lý Cap / Cap Theorem
Xem thêm Việc làm Developer hấp dẫn trên TopDev