Như đã chia sẻ trong những bài viết trước, chúng ta đã biết Load Balancer và Database Replication sẽ giúp cải thiện tính khả dụng (High Availability) của hệ thống.
Vậy nếu kết hợp chúng trong cùng một hệ thống thì sẽ như thế nào?
⚙️ LUỒNG HOẠT ĐỘNG
Nhìn vào hình minh họa ở trên, các bạn sẽ thấy được luồng hoạt động như sau:
(1)+(2) Ban đầu người dùng muốn truy cập trang web thì sẽ vẫn thông qua DNS để phân giải tên miền ra được địa chỉ IP.
(3)+(4) Và cụ thể địa chỉ IP ở đây chính là IP của Load Balancer nằm trung gian giúp cân bằng tải, phân phối đều request đến các Web Server.
(5) Các thao tác ghi dữ liệu, ví dụ như các câu lệnh INSERT, UPDATE, DELETE, ... thì sẽ được Web Server kết nối với Master DB
(6) Còn các thao tác đọc dữ liệu, ví dụ như câu lệnh SELECT thì sẽ được Web Server kết nối với Slave DB
❌ SẼ RA SAO NẾU HỆ THỐNG CHỈ CÓ 1 SLAVE DB VÀ NÓ BỊ DOWN?
Nếu xui rủi trường hợp này xảy ra, thì các thao tác đọc dữ liệu sẽ được tạm thời chuyển đến Master DB để thực hiện.
Cho đến khi xử lý được sự cố, một Slave DB mới sẽ thay thế.
Sau đó nó copy dữ liệu từ Master DB sang và tiếp tục thực hiện công việc đọc dữ liệu của mình.
🚀 VẬY NÊN HÃY CÂN NHẮC NÂNG CẤP HỆ THỐNG ĐỂ CÓ KHẢ NĂNG DUY TRÌ NHIỀU SLAVE DB
Số lượng bao nhiêu Slave DB là đủ thì còn phải tùy từng dự án đánh giá, dựa trên nhiều yếu tố như lưu lượng truy cập, giới hạn tài nguyên, ...
Việc có nhiều Slave DB sẽ giúp cho trường hợp nếu 1 Slave DB bị down, thì các thao tác đọc dữ liệu sẽ dễ dàng được chuyển hướng đến các Slave DB đang hoạt động còn lại.
Và sau đó một Slave DB mới sẽ thay thế Slave DB bị down kia.
🤯 THẾ CÒN TRƯỜNG HỢP MASTER DB BỊ DOWN THÌ SAO?
Khi Master DB bị down, 1 trong số những Slave DB sẽ được chọn để trở thành Master DB mới.
Tất cả các thao tác ghi dữ liệu sau đó sẽ được thực hiện tạm thời trên Master DB mới.
Và một Slave DB mới cũng sẽ được thêm vào để thay thế Slave DB cũ, và copy dữ liệu ngay lập tức.
🛤️ THỰC TẾ TRIỂN KHAI
Trong các hệ thống thực tế, việc lựa chọn một Slave DB trở thành Master DB mới sẽ khá phức tạp, vì dữ liệu trong Slave DB được chọn đó có thể chưa cập nhật đầy đủ so với Master DB cũ. Dữ liệu bị thiếu cần phải được cập nhật bằng cách chạy các script khôi phục dữ liệu.
Mặc dù có một số phương pháp replication khác như sử dụng nhiều Master DB (multi-masters) hoặc Circular replication, nhưng đương nhiên để triển khai cũng sẽ phức tạp hơn.
Các bạn có thể research theo những từ khóa trên để tìm hiểu thêm nhé!
LỜI NHẮN
Bạn có thể tham khảo thêm những bài viết trong series "System Design - Thiết kế Hệ thống" của mình trên blog này nhé. Hi vọng kiến thức này hữu ích với bạn.
Follow mình trên Facebook "CLB Lập trình - THPT Ngọc Tảo" hoặc kênh Youtube "Tờ Mờ Sáng học Lập trình" để cùng nhau học tập, chia sẻ những kiến thức công nghệ và lập trình hoàn toàn miễn phí nhé!
Facebook CLB Lập trình - THPT Ngọc Tảo: https://www.facebook.com/clb.it.ngoctao/
Youtube Tờ Mờ Sáng học Lập trình: https://www.youtube.com/@tmsangdev
Hẹn gặp lại 👋
BẠN CÓ THỂ ĐỌC THÊM
Clean Architecture: A Craftsman’s Guide to Software Structure and Design - Robert C. Martin
Designing Data – Insensitive applications - Martin Kleppmann
System Analysis and Design - Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
System Design Interview - Alex Xu
Modern Systems Analysis and Design - Joseph Valacich, Joey George
Head First Design Patterns - Eric Freeman, Elisabeth Robson