Trình điều khiển MongoDB cung cấp một số tùy chọn cho máy khách Mongo để xử lý các lỗi mạng hết thời gian chờ khác nhau có thể xảy ra trong quá trình sử dụng. Trong một số trường hợp, các giá trị mặc định cho các tùy chọn này có thể không phù hợp với trường hợp sử dụng của bạn, vì vậy điều quan trọng là phải hiểu các tùy chọn thời gian chờ MongoClient khác nhau để tránh bị treo khó lường trong luồng ứng dụng của bạn và cải thiện hiệu suất.
Định cấu hình các tùy chọn thời gian chờ cho mongo -serverselection, kết nối và ổ cắmNhấp vào TweetỞ cấp độ trừu tượng, bất cứ khi nào bạn sử dụng MongoClient để kết nối, gửi hoặc nhận yêu cầu, nó sẽ sử dụng nội bộ các tùy chọn thời gian chờ được xác định trước để quyết định thời gian ứng dụng sẽ đợi thiết lập kết nối ban đầu hoặc phản hồi từ máy chủ cho yêu cầu của bạn.
Các ứng dụng điển hình đang tương tác với các máy chủ cơ sở dữ liệu khác nhau dựa trên logic nghiệp vụ. Ví dụ:lịch sử thanh toán của bạn có thể nằm trên một cụm cơ sở dữ liệu và bản ghi phân tích của bạn trên một cụm khác. Thời gian chờ mặc định có thể ảnh hưởng đáng kể đến hoạt động của ứng dụng của bạn khi có lỗi mạng. Nếu máy chủ phân tích của bạn không hoạt động, thì mỗi hoạt động sẽ đợi mặc định là 30 giây trước khi thất bại (có thể có hoặc có thể không như bạn muốn).
Hết thời gian chờ lựa chọn máy chủ
Thời gian chờ lựa chọn máy chủ là số mili giây mà trình điều khiển mongo sẽ đợi để chọn máy chủ cho một hoạt động trước khi từ bỏ và phát sinh lỗi.
Tùy chọn này đã được giới thiệu trong phiên bản mới hơn của trình điều khiển Mongo thế hệ tiếp theo (phiên bản 3.2.x + trong Java). Đối với mỗi loại hoạt động và tùy chọn người dùng, MongoClient chọn máy chủ bằng cách sử dụng thuật toán lựa chọn để thực hiện hoạt động.
Đối với hoạt động ghi trên một máy chủ độc lập, chỉ có một máy chủ có sẵn được chọn. Trong một tập hợp bản sao hoặc các cụm phân đoạn, có thể có nhiều hơn một máy chủ đáp ứng các tiêu chí ưu tiên của người dùng cho một hoạt động.
Các tình huống có thể xảy ra trong đó thời gian chờ lựa chọn máy chủ có thể xảy ra bao gồm - nếu mạng bị gián đoạn hoặc lỗi nút chính trong tập hợp bản sao.
Trình điều khiển Mongo sử dụng 30 giây làm giá trị mặc định của thời gian chờ lựa chọn máy chủ . Tùy từng trường hợp sử dụng mà chúng ta có thể tăng hoặc giảm ngưỡng này.
Hết giờ kết nối
Thời gian chờ kết nối là số mili giây mà trình điều khiển sẽ đợi trước khi ngừng kết nối mới.
Sau khi chọn máy chủ, máy khách sẽ cố gắng thiết lập kết nối với máy chủ.
Tùy thuộc vào cơ sở hạ tầng mạng và tải trên máy chủ, máy khách có thể phải đợi thiết lập kết nối. Các tình huống có thể xảy ra trong đó thời gian chờ kết nối có thể xảy ra - máy chủ bị tắt, sự cố mạng, IP / DNS sai, số cổng, v.v.
Giá trị mặc định của thời gian chờ kết nối phụ thuộc vào phiên bản và ngôn ngữ của trình điều khiển. Phiên bản trình điều khiển mới nhất của Mongo Java &Ruby có thời gian chờ mặc định là 10 giây cho các cơ sở kết nối trong khi trình điều khiển NodeJs không có thời gian chờ.
Nếu thời gian chờ quá cao, bạn có nguy cơ làm ngưng trệ ứng dụng của mình. Nếu thời gian chờ quá thấp, bạn có thể bỏ cuộc quá nhanh. Tốt hơn nên thử nghiệm với các giá trị khác nhau để tìm ra thời gian chờ phù hợp cho ứng dụng của bạn.
SocketTimeout
Thời gian chờ của socket là số mili giây mà một lần gửi hoặc nhận trên socket có thể mất trước khi hết thời gian chờ.
Sau khi thiết lập kết nối với máy chủ, máy khách sẽ gửi yêu cầu đến máy chủ và nhận lại phản hồi bằng cách sử dụng kết nối đã được thiết lập. Bên trong, kết nối sử dụng một ổ cắm để gửi yêu cầu của khách hàng và nhận phản hồi
Trình điều khiển Mongo Java &Nodejs có thời gian chờ socket mặc định là 0, có nghĩa là về cơ bản không có thời gian chờ . Trong khi Ruby cung cấp thời gian chờ ổ cắm là 5 giây. Bạn không muốn đặt giới hạn về thời gian chờ này vì các hoạt động khác nhau sẽ mất thời gian thay đổi để hoạt động.
Khám phá thêm
Tùy chọn MongoClient Timeout khác nhau trên các phiên bản và ngôn ngữ khác nhau của trình điều khiển Mongo. Chúng tôi khuyến khích bạn xem qua tài liệu về lớp MongoClient của trình điều khiển để hiểu các tùy chọn thời gian chờ mặc định của bạn. Chúng tôi đã cung cấp một số mã mẫu bên dưới để minh họa cấu hình thời gian chờ trong Java và Ruby.
Trình điều khiển Java MongoDB
List<MongoCredential> creds = new ArrayList<MongoCredential>(); creds.add(MongoCredential.createCredential(username, DBname, password); MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder(); optionsBuilder.connectTimeout(CONNECTION_TIME_OUT_MS); optionsBuilder.socketTimeout(SOCKET_TIME_OUT_MS); optionsBuilder.serverSelectionTimeout(SERVER_SELECTION_TIMEOUT_MS); MongoClientOptions options = optionsBuilder.build(); Mongo m = new MongoClient(new ServerAddress(server , port), creds, options);
Trình điều khiển MongoDB NodeJs
var uri = ‘mongodb://[username:password@]host[:port1]/[database]’; var options = { server: { socketOptions: { socketTimeoutMS: SOCKET_TIME_OUT_MS, connectTimeoutMS: CONNECTION_TIMEOUT_MS } } }; MongoClient.connect(uri, options, function(err, db) { if(!err) { console.log("We are connected"); } });
Chúng tôi đã bỏ lỡ bất cứ điều gì? Hãy cho chúng tôi biết trong phần bình luận bên dưới. Đừng quên đăng ký nhận bản tin của chúng tôi để là người đầu tiên nhận được các mẹo như thế này và hơn thế nữa!