Database Replication là gì?
Tưởng tượng rằng, chúng ta đang trong một dự án của một công ty được xây dựng khởi đầu sử dụng cơ sở dữ liệu "X" để lưu trữ các dữ liệu về khách hàng và sản phẩm,... Sau một khoảng thời gian hoạt động, dữ án này phát triển ngày càng lớn mạnh với lượng người dùng trên khắp thế giới ngày một tăng nhanh. Như một lẽ tất yếu, lượng dữ liệu cần phải lưu trữ/thao tác cũng tăng lên rất rất nhiều lần.
Để giải quyết được hai vấn đề nêu trên bao gồm tốc độ xử lý chậm và việc crash cơ sở dữ liệu chúng ta cần đến sự trợ giúp của Database Replication.
Database Replication là gì?
Các loại Data Replication
Có 2 loại data replication dụ trên thời gian chuyển đổi dữ liệu giữa các node.
Giả sử hệ thống phân tán của chúng ta có 3 server cơ sở dữ liệu A, B, C. Dựa trên giả thiết này và cùng xem cách hoạt động mỗi loại replication.
Synchronous
Máy khách (Client) gửi dữ liệu đến server A và dữ liệu sẽ được sao chép đến server B và server C. Sau khi dữ liệu hoàn thành sao chép, các thông báo hoàn thành sẽ được gửi về cho server A và server A sẽ gửi thông báo đến Máy khách.
Ưu điểm: Đảm bảo dữ liệu trên tất cả các server cơ sở dữ liệu là giống nhau - tính đồng nhất giữa các server
Khuyết điểm: Server A mất thêm một khoảng thời gian để đợi dữ liệu được đồng bộ và gửi hồi đáp lại cho Máy khách. Nếu có một server nào đó không có hồi đáp hoàn thành sao chép dữ liệu thi toàn bộ quá trình sẽ bị rollback (quay trở lại ban đầu)
Asynchronous
Máy khách (Client) gửi dữ liệu đến server A, server A sẽ phản hồi các thao tác cho Máy khách, sau đó dữ liệu thay đổi mới được đồng bộ trên server B và C.
Ưu điểm: Phản hồi gửi đến Máy khách là ngay lập tức.
Khuyết điểm: Có thể dẫn đến sự không đồng bộ khi công việc sao chép dữ liệu đến các server khác xảy ra các vấn đề về mạng.
Các loại Replication Environment
Multi-Master Replication
Mỗi node đều đóng vai trò là master node nơi mà Máy khách có thể thực hiện cả việc đọc và ghi dữ liệu. Giữa các node có thể được đồng bộ bằng cả 2 cách nêu trên (Synchronous và Asynchronous)
Nhưng khi sử dụng Asynchronous vấn đề về xung đột dữ liệu rất dễ xảy ra khi các Máy khách cập nhật cùng một đơn vị dữ liệu nhưng trên các master-node khác nhau.
Master-Slave Replication
Máy khách chỉ có quyền đọc/ghi dữ liệu trên master-node. Các slave-node xung quanh sẽ sao chép lại dữ liệu từ master-node, dữ liệu ở slave-node chỉ dùng để đọc. Việc sao chép cũng có thể sử dụng 2 cách trên.
MongoDB
MongoDB sử dụng Master-slave replication, kỹ thuật được mô tả ở hình dưới:
Nếu master-node ngưng hoạt động, một slave-node sẽ được chọn thay thế để giữ hệ thống hoạt động bình thường. Nếu master-node không giao tiếp với slave-node trong 10 giây, master-node này sẽ được cho là ngưng hoạt động và quá trình chọn một master-node mới sẽ diễn ra, thường quá trình này sẽ mất khoảng 12 giây (bao gồm cả thời gian đánh dấu master-node ngưng hoạt động).
Trong khoảng thời gian cho quá trình tuyển chọn này, các máy khách sẽ không thể ghi dữ liệu nhưng việc dọc dữ liệu vẫn được được xử lý bình thường.
Tải cân bằng (Load balancing Replicas)
Ở MongoDB, Máy khách đọc dữ liệu từ một node chính mặc định có thể được chuyển hướng Request đến một node thứ cấp khác để cân bằng tải. Chúng ta chỉ cần "nói" với MongoDB driver rằng chúng ta muốn thực hiện việc đọc dữ liệu trên node thứ cấp, Mongo driver sẽ tự động phân biệt các node và điều hướng.
Lệnh đọc tham chiếu: db.getMongo().setReadPref(‘secondary’)