Chiến lược Replication trong MySQL: Asynchronous hay Semi-synchronous?
Quay lại Trang chủ Blog
Trên trang này
MySQL là một trong những hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) phổ biến nhất trên thế giới, được sử dụng rộng rãi trong các ứng dụng web, hệ thống doanh nghiệp và các dịch vụ cloud. Sự phổ biến của MySQL đến từ hiệu năng ổn định, chi phí hợp lý, cộng đồng lớn và khả năng mở rộng linh hoạt, giúp nó trở thành lựa chọn ưu tiên cho nhiều tổ chức và doanh nghiệp.
Trong các ứng dụng hiện đại, đặc biệt là những hệ thống có tải đọc lớn, yêu cầu tính sẵn sàng cao và dữ liệu phải được bảo vệ nghiêm ngặt, việc duy trì một bản sao dữ liệu dự phòng và khả năng phân tán tải đọc trở nên thiết yếu. Đây là lý do mà MySQL Replication (cơ chế sao chép dữ liệu từ máy chủ nguồn sang các replica) trở thành một thành phần quan trọng. Replication không chỉ giúp tăng tính sẵn sàng và độ tin cậy, mà còn hỗ trợ mở rộng hệ thống theo chiều ngang và bảo vệ dữ liệu trong các tình huống sự cố. Hiểu cơ chế và các mô hình replication trong MySQL là bước đầu quan trọng để thiết kế hệ thống cơ sở dữ liệu bền vững, hiệu quả và phù hợp với đặc thù workload.
Giới thiệu về MySQL Replication
MySQL Replication là cơ chế sao chép dữ liệu từ một máy chủ MySQL nguồn (thường gọi là master hoặc source) sang một hoặc nhiều máy chủ MySQL đích (gọi là slave hoặc replica). Quá trình này diễn ra theo thời gian thực hoặc gần thời gian thực, mang lại nhiều lợi ích quan trọng cho hệ thống cơ sở dữ liệu.
Lợi ích của MySQL Replication
Tính sẵn sàng cao (High Availability): Replication giúp duy trì nhiều bản sao dữ liệu trên các máy chủ khác nhau. Khi máy chủ nguồn gặp sự cố, một replica có thể được promote để thay thế, đảm bảo hệ thống vẫn tiếp tục hoạt động.
Phân tán tải đọc (Read Load Distribution): Các truy vấn đọc có thể được phân phối sang các replica, giảm tải cho máy chủ nguồn và cải thiện hiệu năng tổng thể, đặc biệt với hệ thống có lượng truy vấn đọc lớn.
Sao lưu dữ liệu (Backup): Replica đóng vai trò như các bản sao dữ liệu dự phòng. Khi dữ liệu trên source bị mất hoặc lỗi, có thể khôi phục từ replica.
Khả năng mở rộng (Scalability): Dễ dàng mở rộng theo chiều ngang bằng cách bổ sung thêm replica để đáp ứng nhu cầu tăng trưởng của hệ thống.
Phân tán địa lý (Geographic Distribution): Dữ liệu có thể được nhân bản tới các khu vực địa lý khác nhau, giúp giảm độ trễ và cải thiện trải nghiệm người dùng cho các ứng dụng phân tán.
Các loại MySQL Replication
Về mặt hành vi, MySQL Replication thường được chia thành hai loại chính:
Asynchronous Replication (Bất đồng bộ)
Semi-synchronous Replication (Bán đồng bộ)
Ngoài ra, các sự kiện trong binary log có thể được ghi theo nhiều định dạng khác nhau (statement-based, row-based, mixed), nhưng trong bài viết này chúng ta tập trung vào cách hoạt động và đặc điểm của hai mô hình replication chính ở trên.
Asynchronous Replication
Cách hoạt động
Asynchronous Replication là hình thức replication truyền thống và phổ biến nhất trong MySQL. Quy trình có thể được mô tả qua bốn bước chính, bao gồm hai bước ở phía source và hai bước ở phía replica:
Ghi binary log trên source: Mỗi khi có thay đổi dữ liệu (DDL hoặc DML) trên source, MySQL sẽ ghi lại các thay đổi này vào binary log (binlog). Binlog đóng vai trò như nhật ký ghi nhận toàn bộ các thay đổi xảy ra trong hệ thống.
Dump thread trên source: Source tạo ra một dump thread cho mỗi replica. Thread này liên tục đọc binlog và gửi các sự kiện thay đổi sang replica. Replica sẽ chủ động yêu cầu dữ liệu, chứ source không “push” dữ liệu một cách bị động.
I/O thread trên replica: Replica sử dụng I/O thread để nhận dữ liệu binlog từ source và ghi chúng vào một file trung gian gọi là relay log.
SQL thread trên replica: SQL thread đọc relay log và lần lượt áp dụng các thay đổi này lên dữ liệu cục bộ của replica.
Điểm quan trọng cần lưu ý là source không chờ replica xác nhận đã nhận hoặc đã áp dụng xong dữ liệu.
Ưu điểm
Hiệu năng cao: Source không phải chờ phản hồi từ replica nên xử lý giao dịch rất nhanh.
Độ trễ thấp: Giao dịch được commit ngay trên source.
Chịu lỗi mạng tốt: Ít bị ảnh hưởng bởi độ trễ hoặc gián đoạn mạng.
Dễ mở rộng: Phù hợp với hệ thống có tải đọc lớn, nhiều replica.
Tính độc lập: Replica có thể dừng để bảo trì mà không ảnh hưởng đến source.
Nhược điểm
Không đảm bảo nhất quán tuyệt đối: Replica có thể bị trễ so với source.
Rủi ro mất dữ liệu: Nếu source gặp sự cố trước khi dữ liệu được replicate, một số giao dịch có thể bị mất.
Replication lag: Trong điều kiện tải nặng, replica có thể tụt lại khá xa so với source.
Semi-synchronous Replication
Cách hoạt động
Semi-synchronous Replication là sự dung hòa giữa replication đồng bộ và bất đồng bộ. Với mô hình này:
Source chờ ít nhất một hoặc nhiều replica xác nhận đã nhận được transaction (sau khi ghi vào relay log).
Sau khi nhận được xác nhận, source mới commit transaction.
Các replica còn lại (nếu có) vẫn nhận dữ liệu theo cách bất đồng bộ.
Cách làm này đảm bảo rằng ít nhất một bản sao dữ liệu đã tồn tại trên replica trước khi transaction được commit hoàn toàn trên source.
Ưu điểm
Độ tin cậy dữ liệu cao hơn: Giảm nguy cơ mất dữ liệu khi source gặp sự cố.
Tính nhất quán tốt hơn: Đảm bảo dữ liệu đã được replicate tới ít nhất một replica.
Khả năng chịu lỗi tốt hơn: Phù hợp với các hệ thống yêu cầu mức độ an toàn dữ liệu cao.
Nhược điểm
Ảnh hưởng hiệu năng: Source phải chờ phản hồi từ replica trước khi commit.
Độ phức tạp cao hơn: Cấu hình và vận hành phức tạp hơn asynchronous replication.
Phụ thuộc replica: Nếu replica chậm hoặc gặp sự cố, transaction trên source có thể bị delay.
So sánh nhanh Asynchronous và Semi-synchronous
Tiêu chí
Asynchronous
Semi-synchronous
Hiệu năng
Cao
Trung bình
Độ an toàn dữ liệu
Thấp hơn
Cao hơn
Replication lag
Có thể lớn
Nhỏ hơn
Độ phức tạp
Thấp
Cao
Phù hợp với
Tốc độ ghi lớn, scale-out
Hệ thống cần độ tin cậy cao
MySQL Replication là một thành phần quan trọng trong việc xây dựng các hệ thống cơ sở dữ liệu có tính sẵn sàng cao, khả năng mở rộng tốt và đảm bảo an toàn dữ liệu.
Asynchronous Replication phù hợp với các hệ thống ưu tiên hiệu năng và khả năng mở rộng, chấp nhận độ trễ nhất định giữa source và replica.
Semi-synchronous Replication phù hợp với các hệ thống yêu cầu độ tin cậy và nhất quán dữ liệu cao hơn, dù phải đánh đổi một phần hiệu năng.
Việc lựa chọn mô hình replication nào phụ thuộc rất lớn vào yêu cầu kinh doanh, đặc thù workload và mức độ chấp nhận rủi ro của hệ thống. Hiểu rõ bản chất của từng loại replication sẽ giúp bạn đưa ra quyết định kiến trúc chính xác và bền vững hơn cho hệ thống MySQL của mình.
Trong hệ sinh thái VNPT Cloud, VNPT Cloud Database (MySQL engine) hiện đang sử dụng Asynchronous Replication làm chế độ mặc định. Trong lộ trình phát triển, VNPT Cloud Database dự kiến sẽ bổ sung Semi-synchronous Replication, cho phép người dùng lựa chọn mô hình đồng bộ phù hợp với nhu cầu và đặc thù workload.
#CloudWave Radar
#CloudWave Radar
Chúng tôi có 4 môi trường staging, 2 môi trường production, hàng chục microservice và rất nhiều phiên bản thử nghiệm. Lúc đầu dùng VPS tưởng là đủ, nhưng rồi mỗi lần cập nhật code là một lần lo… không biết lần này ‘tháo’ có làm hỏng cái gì không?