Cân bằng tải cơ sở dữ liệu phân phối các yêu cầu máy khách đồng thời tới nhiều máy chủ cơ sở dữ liệu để giảm lượng tải trên bất kỳ máy chủ đơn lẻ nào. Điều này có thể cải thiện đáng kể hiệu suất của cơ sở dữ liệu của bạn. May mắn thay, MongoDB có thể xử lý nhiều yêu cầu của khách hàng để đọc và ghi cùng một dữ liệu theo mặc định. Nó sử dụng một số cơ chế kiểm soát đồng thời và các giao thức khóa để đảm bảo tính nhất quán của dữ liệu mọi lúc.
Bằng cách này, MongoDB cũng đảm bảo rằng tất cả các máy khách có được chế độ xem dữ liệu nhất quán vào bất kỳ lúc nào. Do tính năng xử lý yêu cầu từ nhiều máy khách được tích hợp sẵn này, bạn không phải lo lắng về việc thêm bộ cân bằng tải bên ngoài trên đầu máy chủ MongoDB của mình. Mặc dù, nếu bạn vẫn muốn cải thiện hiệu suất của cơ sở dữ liệu bằng cách sử dụng cân bằng tải, thì đây là một số cách để đạt được điều đó.
Tỷ lệ theo chiều dọc MongoDB
Nói một cách dễ hiểu, Chia tỷ lệ theo chiều dọc có nghĩa là thêm nhiều tài nguyên hơn vào máy chủ của bạn để xử lý tải. Giống như tất cả các hệ thống cơ sở dữ liệu, MongoDB thích dung lượng RAM và IO hơn. Đây là cách đơn giản nhất để tăng hiệu suất của MongoDB mà không cần phân tán tải trên nhiều máy chủ. Mở rộng theo chiều dọc của cơ sở dữ liệu MongoDB thường bao gồm tăng dung lượng CPU hoặc dung lượng đĩa và tăng thông lượng (hoạt động I / O). Bằng cách thêm nhiều tài nguyên hơn, máy chủ mongo của bạn có khả năng xử lý nhiều yêu cầu của khách hàng hơn. Do đó, cân bằng tải tốt hơn cho cơ sở dữ liệu của bạn.
Nhược điểm của việc sử dụng phương pháp này là giới hạn kỹ thuật khi thêm tài nguyên vào bất kỳ hệ thống đơn lẻ nào. Ngoài ra, tất cả các nhà cung cấp đám mây đều có những hạn chế trong việc thêm các cấu hình phần cứng mới. Nhược điểm khác của phương pháp này là một điểm thất bại duy nhất. Theo cách tiếp cận này, tất cả dữ liệu của bạn đang được lưu trữ trong một hệ thống duy nhất, điều này có thể dẫn đến việc mất dữ liệu của bạn vĩnh viễn.
Tỷ lệ theo chiều ngang MongoDB
Chia tỷ lệ theo chiều ngang đề cập đến việc chia cơ sở dữ liệu của bạn thành nhiều phần và lưu trữ chúng trên nhiều máy chủ. Ưu điểm chính của phương pháp này là bạn có thể thêm các máy chủ bổ sung ngay lập tức để tăng hiệu suất cơ sở dữ liệu của mình mà không mất thời gian chết. MongoDB cung cấp tính năng mở rộng theo chiều ngang thông qua tính năng sharding. Sharding MongoDB cung cấp thêm khả năng phân phối tải ghi trên nhiều máy chủ (phân đoạn). Ở đây, mỗi phân đoạn có thể được xem như một cơ sở dữ liệu độc lập và tập hợp tất cả các phân đoạn có thể được xem như một cơ sở dữ liệu logic lớn. Sharding cho phép MongoDB của bạn phân phối dữ liệu trên nhiều máy chủ để xử lý các yêu cầu của khách hàng đồng thời một cách hiệu quả. Do đó, nó làm tăng thông lượng đọc và ghi của cơ sở dữ liệu của bạn.
Mài MongoDB
Một phân đoạn có thể là một cá thể mongod đơn lẻ hoặc một tập hợp bản sao chứa tập con của cơ sở dữ liệu được phân đoạn mongo. Bạn có thể chuyển đổi phân đoạn trong tập hợp bản sao để đảm bảo dữ liệu có sẵn và dự phòng cao.
Như bạn có thể thấy trong hình trên, phân đoạn 1 chứa một tập hợp con của tập hợp 1 và toàn bộ tập hợp2, trong khi phân đoạn 2 chỉ chứa tập hợp con khác của tập hợp1. Bạn có thể truy cập từng phân đoạn bằng cá thể mongos. Ví dụ:nếu bạn kết nối với cá thể shard1, bạn sẽ chỉ có thể xem / truy cập một tập hợp con của collection1.
Mongos
Mongos là bộ định tuyến truy vấn cung cấp quyền truy cập vào cụm phân đoạn cho các ứng dụng khách. Bạn có thể có nhiều phiên bản mongos để cân bằng tải tốt hơn. Ví dụ:trong cụm sản xuất của bạn, bạn có thể có một phiên bản mongos cho mỗi máy chủ ứng dụng. Giờ đây, bạn có thể sử dụng bộ cân bằng tải bên ngoài, bộ cân bằng tải bên ngoài sẽ chuyển hướng yêu cầu của máy chủ ứng dụng của bạn đến phiên bản mongos thích hợp. Trong khi thêm các cấu hình như vậy vào máy chủ sản xuất của bạn, hãy đảm bảo rằng kết nối từ bất kỳ ứng dụng khách nào luôn kết nối với cùng một phiên bản mongos mọi lúc vì một số tài nguyên mongo như con trỏ chỉ dành riêng cho phiên bản mongos.
Định cấu hình Máy chủ
Máy chủ cấu hình lưu trữ cài đặt cấu hình và siêu dữ liệu về cụm của bạn. Từ MongoDB phiên bản 3.4, bạn phải triển khai máy chủ cấu hình như một tập hợp bản sao. Nếu bạn đang bật sharding trong môi trường sản xuất, thì bắt buộc phải sử dụng ba máy chủ cấu hình riêng biệt, mỗi máy chủ trên các máy khác nhau.
Bạn có thể làm theo hướng dẫn này để chuyển đổi cụm tập hợp bản sao của mình thành một cụm phân đoạn. Đây là minh họa mẫu của cụm sản xuất phân mảnh:
Cân bằng tải MongoDB bằng cách sử dụng bản sao
Đôi khi bản sao MongoDB có thể được sử dụng để xử lý nhiều lưu lượng hơn từ các máy khách và giảm tải trên máy chủ chính. Để làm như vậy, bạn có thể hướng dẫn khách hàng đọc từ các thư thứ hai thay vì máy chủ chính. Điều này có thể giảm tải trên máy chủ chính vì tất cả các yêu cầu đọc đến từ máy khách sẽ được xử lý bởi máy chủ phụ và máy chủ chính sẽ chỉ xử lý các yêu cầu ghi.
Sau đây là lệnh để đặt tùy chọn đọc thành phụ:
db.getMongo().setReadPref('secondary')
Bạn cũng có thể chỉ định một số thẻ để nhắm mục tiêu các thư thứ hai cụ thể trong khi xử lý các truy vấn đã đọc.
db.getMongo().setReadPref(
"secondary", [
{ "datacenter": "APAC" },
{ "region": "East"},
{}
])
Ở đây, MongoDB sẽ cố gắng tìm nút phụ có giá trị thẻ trung tâm dữ liệu là APAC. Nếu được tìm thấy, thì Mongo sẽ phục vụ các yêu cầu đọc từ tất cả các thư thứ hai với trung tâm dữ liệu thẻ:“APAC”. Nếu không tìm thấy, thì Mongo sẽ cố gắng tìm phụ đề với vùng thẻ:“Đông”. Nếu vẫn không tìm thấy thư thứ hai, thì {} sẽ hoạt động như trường hợp mặc định và Mongo sẽ phục vụ các yêu cầu từ bất kỳ thư phụ đủ điều kiện nào.
Tuy nhiên, cách tiếp cận này để cân bằng tải không được khuyến khích sử dụng để tăng thông lượng đọc. Bởi vì bất kỳ chế độ ưu tiên đọc nào khác với chế độ chính có thể trả về dữ liệu cũ trong trường hợp có các bản cập nhật ghi gần đây trên máy chủ chính. Thông thường, máy chủ chính sẽ mất một khoảng thời gian để xử lý các yêu cầu ghi và truyền các thay đổi đến máy chủ phụ. Trong thời gian này, nếu ai đó yêu cầu thao tác đọc trên cùng một dữ liệu, máy chủ phụ sẽ trả về dữ liệu cũ vì nó không đồng bộ với máy chủ chính. Bạn có thể sử dụng phương pháp này nếu ứng dụng của bạn có nhiều thao tác đọc so với thao tác ghi.
Kết luận
Vì MongoDB có thể tự xử lý các yêu cầu đồng thời, nên không cần thêm bộ cân bằng tải trong cụm MongoDB của bạn. Để cân bằng tải các yêu cầu của khách hàng, bạn có thể chọn tỷ lệ theo chiều dọc hoặc tỷ lệ theo chiều ngang vì bạn không nên sử dụng chế độ thứ hai để mở rộng quy mô hoạt động đọc và ghi của mình. Tỷ lệ mở rộng theo chiều dọc có thể đạt đến các giới hạn kỹ thuật, như đã thảo luận ở trên. Do đó, nó thích hợp cho các ứng dụng quy mô nhỏ. Đối với các ứng dụng lớn, chia tỷ lệ ngang thông qua sharding là cách tiếp cận tốt nhất để cân bằng tải các hoạt động đọc và ghi.