Hướng dẫn mongodb max connection pool size - mongodb kích thước nhóm kết nối tối đa

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual

Trên trang này

  • Nhóm kết nối là gì?
  • Tạo và sử dụng nhóm kết nối
  • Kết nối cụm mảnh ghép gộp
  • Cài đặt cấu hình nhóm kết nối

Tài liệu này mô tả cách sử dụng nhóm kết nối để quản lý kết nối giữa các ứng dụng và các phiên bản MongoDB.

Nhóm kết nối là bộ đệm của các kết nối cơ sở dữ liệu mở, sẵn sàng sử dụng được duy trì bởi trình điều khiển. Ứng dụng của bạn có thể kết nối một cách liền mạch từ nhóm, thực hiện các hoạt động và quay lại kết nối trở lại nhóm. Nhóm kết nối an toàn.connection pool is a cache of open, ready-to-use database connections maintained by the driver. Your application can seamlessly get connections from the pool, perform operations, and return connections back to the pool. Connection pools are thread-safe.

Nhóm kết nối giúp giảm độ trễ ứng dụng và số lần kết nối mới được tạo.

Một nhóm kết nối tạo ra các kết nối khi khởi động. Các ứng dụng không cần phải quay số kết nối theo cách thủ công vào nhóm. Thay vào đó, các kết nối tự động quay trở lại nhóm.

Một số kết nối đang hoạt động và một số không hoạt động nhưng có sẵn. Nếu ứng dụng của bạn yêu cầu kết nối và có một kết nối có sẵn trong nhóm, một kết nối mới không cần phải được tạo.

Hầu hết các trình điều khiển cung cấp một đối tượng loại MongoClient.drivers provide an object of type MongoClient.

Sử dụng một ví dụ MongoClient cho mỗi ứng dụng trừ khi ứng dụng kết nối với nhiều cụm riêng biệt. Mỗi trường hợp MongoClient quản lý nhóm kết nối của riêng mình với cụm mongoDB hoặc nút được chỉ định khi MongoClient được tạo. Các đối tượng MongoClient là an toàn cho chủ đề trong hầu hết các trình điều khiển.

Ghi chú

Lưu trữ thể hiện MongoClient của bạn ở một nơi có thể truy cập toàn cầu bởi ứng dụng của bạn.

Để sử dụng nhóm kết nối với LDAP, hãy xem hành vi nhóm kết nối LDAP.

mongos Bộ định tuyến có các nhóm kết nối cho mỗi nút trong cụm. Sự sẵn có của các kết nối với các nút riêng lẻ trong một cụm bị che khuất ảnh hưởng đến độ trễ. Hoạt động phải chờ một kết nối được thiết lập.

Để định cấu hình nhóm kết nối, hãy đặt các tùy chọn:

  • thông qua URI MongoDB,

  • theo chương trình khi xây dựng trường hợp MongoClient hoặc

  • Trong các tệp cấu hình của khung ứng dụng của bạn.

Tôi đã tăng giá trị ____99 lên 3000. Điều này có nghĩa là có 3000 kết nối đồng thời được phép sử dụng trường hợp này, hoặc nó cũng tính bất kỳ kết nối nào khác thông qua các trường hợp đối tượng khác?

var connectionString = "mongodb://username:password@ip:27017/MyDB?maxPoolSize=3000"
var client = new MongoClient(connectionString);
return client.GetDatabase(databaseName);

Đã hỏi ngày 25 tháng 12 năm 2017 lúc 16:15Dec 25, 2017 at 16:15

Chà, nó không chính xác như bạn đã nói. Bài viết này cung cấp một giải thích ngắn gọn về cách thức hoạt động của gộp kết nối và về cơ bản nó nói rằng:

Hầu hết các trình điều khiển MongoDB đều hỗ trợ một tham số đặt số lượng kết nối tối đa (kích thước nhóm) có sẵn cho ứng dụng của bạn. Kích thước nhóm kết nối có thể được coi là số lượng yêu cầu đồng thời tối đa mà tài xế của bạn có thể phục vụ. Kích thước nhóm mặc định thay đổi từ trình điều khiển đến trình điều khiển, ví dụ: Đối với nút là 5, trong khi đối với Python là 100. Nếu bạn dự đoán ứng dụng của bạn nhận được nhiều yêu cầu đồng thời hoặc dài, chúng tôi khuyên bạn nên tăng kích thước nhóm của bạn- điều chỉnh cho phù hợp!

Tổng giới hạn kết nối đến trên máy chủ được xác định bởi các giới hạn ít hơn được áp đặt bởi hệ điều hành hoặc maxincomingconnections (hoặc maxconns trong MongoDB 2.4 trở lên).

Trên thực tế, sự khác biệt giữa hai cài đặt như sau:

  • Kết nối gộp = giới hạn kết nối trên mỗi máy khách limit of connections per client
  • Giới hạn kết nối = tổng kết nối máy khách cho phép total allowed client connections

Đã trả lời ngày 25 tháng 12 năm 2017 lúc 16:35Dec 25, 2017 at 16:35

Hướng dẫn mongodb max connection pool size - mongodb kích thước nhóm kết nối tối đa

Tommaso Belluzzotommaso BelluzzoTommaso Belluzzo

22.7K7 Huy hiệu vàng70 Huy hiệu bạc95 Huy hiệu Đồng7 gold badges70 silver badges95 bronze badges

2

Hiểu cách các nhóm kết nối MongoDB và hoạt động kích thước bể bơi là một phần cơ bản của việc chạy ứng dụng khách hàng MongoDB hiệu quả ở quy mô toàn cầu.

Bài viết này xem xét kích thước nhóm kết nối là gì trong MongoDB và cách chúng ta có thể kiểm tra hiệu ứng cài đặt kích thước nhóm có thời gian để hoàn thành các truy vấn, trong đó nếu được đặt không chính xác, có thể dẫn đến các tắc nghẽn ứng dụng ẩn bởi các truy vấn phức tạp làm chậm các truy vấn đơn giản.

Khi ứng dụng của bạn cần mở rộng quy mô, số lượng truy vấn cho MongoDB tăng lên. Sự phức tạp của ứng dụng của bạn cũng tăng lên, vì vậy các yêu cầu truy vấn trở nên lớn hơn - do đó, các nút thắt có khả năng ẩn.

Hãy nói rằng bạn đang làm việc trên một ứng dụng với hai loại người dùng:

1) Người dùng chung của ứng dụng, những người mong đợi thời gian tải nhanh. Những người dùng này chiếm phần lớn lưu lượng truy cập ứng dụng.

2) Quản trị viên của hệ thống cần thực hiện các nhiệm vụ có thể trải qua hàng ngàn người dùng và các mục liên quan của họ - các hành động quản trị sử dụng nặng và tài nguyên nặng.

Bộ người dùng đầu tiên (người dùng chung) đang trả tiền cho khách hàng, trong đó có hàng ngàn người tại bất kỳ thời điểm nào. Bất kỳ hành động nào mà người dùng này thực hiện trong ứng dụng cần phải cực kỳ nhanh - chẳng hạn như đăng nhập, xem các trang và các tính năng ứng dụng khác. Các truy vấn cơ sở dữ liệu cần thiết cho các tính năng này là rất nhỏ và phải rất nhanh.

Các tính năng ứng dụng được sử dụng bởi bộ người dùng thứ hai (quản trị viên) thường sẽ hoạt động rất lớn với một lượng lớn dữ liệu, từ đó yêu cầu các truy vấn cơ sở dữ liệu lớn và phức tạp.

Sau khi báo cáo từ người dùng rằng ứng dụng đã trở nên chậm hơn, bạn bắt đầu xem xét các số liệu ứng dụng. Bạn thấy rằng các truy vấn MongoDB đột nhiên trở nên rất chậm - ngay cả đối với các truy vấn MongoClient0 được lập chỉ mục sử dụng cực kỳ nhanh.

Để tìm ra những gì đã xảy ra ở đây, chúng ta cần hiểu kích thước hồ bơi MongoDB.

Example:

Một ứng dụng mẫu đầy đủ dưới đây có thể được tìm thấy trên GitHub. Bài viết này Các mẫu mã tập trung vào trình điều khiển Node.js MongoDB, tuy nhiên các khái niệm cơ bản vẫn giữ nguyên trên các trình điều khiển MongoDB khác nhau.

Trong mẫu mã trên, chúng tôi có máy chủ Express.js tối thiểu với hai điểm cuối, MongoClient1 và MongoClient2. Một kết nối cơ sở dữ liệu được tạo, sau đó được chia sẻ cho tất cả các truy vấn MongoDB - điều này hoạt động nhiều hơn nhiều so với việc mở và đóng các kết nối TCP cho mỗi và mọi truy vấn mà ứng dụng thực hiện cho cơ sở dữ liệu.

Vì chúng tôi hiện đang chia sẻ kết nối cơ sở dữ liệu trên toàn ứng dụng, chúng tôi cần hiểu làm thế nào tùy chọn kích thước nhóm của kết nối này phát huy tác dụng. Kích thước nhóm là tùy chọn xác định có bao nhiêu truy vấn có thể được chạy bằng cách sử dụng cùng một kết nối song song, tương tự như số lượng làn đường trong một đường hầm. Một giá trị đặt không chính xác cho kết nối này có thể đóng chai toàn bộ ứng dụng.

Tuyến đường MongoClient1 sử dụng truy vấn ví dụ sẽ mất 5 giây để trả về kết quả - điều này được thiết kế để mô phỏng truy vấn chậm trong ứng dụng của bạn, chẳng hạn như quản trị viên tải mỗi người dùng hoặc ứng dụng danh sách todo tải một số lượng lớn các mục.

Tuyến đường MongoClient2 là một truy vấn ví dụ sẽ quay lại trong một số lượng nhỏ mili giây - điều này được thiết kế để mô phỏng một truy vấn người dùng rất đơn giản nhưng quan trọng trong ứng dụng của bạn, ví dụ, một người dùng chung đăng nhập.

Trong mẫu mã, biến môi trường MongoClient5 có thể được sử dụng để thay đổi tự động kích thước nhóm khi bắt đầu ứng dụng. Với điều này, chúng tôi có thể bắt đầu đánh giá ứng dụng của chúng tôi với các cấu hình kích thước nhóm khác nhau. Để kiểm tra chính xác điều này, chúng tôi có thể sử dụng công cụ kiểm tra tải ứng dụng Pháo binh.io.

Tệp cấu hình YAML ở trên có thể được sử dụng với pháo .IO CLI để chạy thử nghiệm hiệu suất. Kiểm tra hiệu suất này sẽ nhắm mục tiêu ứng dụng đang chạy của chúng tôi tại MongoClient6 và mô phỏng người dùng mới đến ứng dụng mỗi giây, trong 5 giây. Mỗi người dùng sẽ truy cập cả điểm cuối MongoClient1 và MongoClient2 và chờ phản hồi từ máy chủ.

Đầu tiên, hãy để Lôi chạy tải trọng nhất bằng cách sử dụng kích thước nhóm là 3. Điều này có nghĩa là kết nối cơ sở dữ liệu của chúng tôi sẽ có thể chạy tối đa ba truy vấn đến MongoDB cùng một lúc.

MongoClient9 (bắt đầu ứng dụng, với kích thước nhóm là 3)

MongoClient0

Với kích thước nhóm được đặt thành ba, tất cả các thử nghiệm đã hoàn thành thành công, với thời gian phản hồi tối đa là 9017ms (truy vấn chậm của chúng tôi mô phỏng một truy cập mất 5000ms).

Điều gì xảy ra khi chúng ta hạ kích thước hồ bơi xuống còn 1? Điều này có nghĩa là kết nối cơ sở dữ liệu của chúng tôi sẽ chỉ có thể chạy một truy vấn MongoDB cùng một lúc.

MongoClient1

MongoClient0

Mặc dù mọi yêu cầu đều thành công, thời gian phản hồi tối đa tăng từ 9017ms lên 21142,7ms. Tại sao? Các yêu cầu đồng thời của chúng tôi hiện đã bị chặn bởi truy vấn chậm đầu tiên, vì vậy tất cả các truy vấn nhanh của chúng tôi đã bị ảnh hưởng.Our concurrent requests were now blocked by the first slow query, so all of our fast queries have suffered as a result.

Điều gì xảy ra nếu chúng ta tăng kích thước hồ bơi lên 10? Điều này có nghĩa là kết nối cơ sở dữ liệu của chúng tôi sẽ có thể chạy tới mười truy vấn MongoDB cùng một lúc.

MongoClient3

MongoClient0

Thời gian phản hồi tối đa của chúng tôi bây giờ là 5019ms - thời gian cần thiết để chạy ví dụ của chúng tôi Truy vấn chậm. Điều này cho thấy rằng không có truy vấn nào khác chặn kết nối cơ sở dữ liệu trong thử nghiệm này, có nghĩa là các điểm cuối MongoClient1 và MongoClient2 của chúng tôi đã cung cấp kết quả dự kiến ​​cho người dùng mà không bị tắc nghẽn.

Vì vậy, cài đặt kích thước hồ bơi này là gì và tại sao nó lại bị đình trệ quy mô ứng dụng của tôi?

Hình ảnh kết nối MongoDB như một đường hầm. Kích thước hồ bơi xác định có bao nhiêu làn đường giao thông có thể đi vào đường hầm cùng một lúc. Nếu bạn có một đường hầm một làn với xe buýt và một chiếc Ferrari, Ferrari có thể đi qua đường hầm cho đến khi xe buýt có. Điều này có nghĩa là đôi khi, một chiếc xe buýt chậm có thể khiến ngay cả một chiếc Ferrari chậm xuống ngay nếu có đủ làn đường.

Khi chúng tôi thêm các làn đường bổ sung, tức là tăng kích thước nhóm kết nối của chúng tôi, chúng tôi có thể nhường chỗ cho chiếc Ferrari để tăng tốc và không được giữ bởi xe buýt chậm.

Tôi nên làm gì với nó?

Nếu bạn mong đợi ứng dụng của bạn yêu cầu các truy vấn chạy dài, hoặc nhiều truy vấn đồng thời, bạn nên đánh giá ứng dụng của mình bằng cách mô phỏng tải sản xuất dự kiến ​​với một công cụ như một JMeter hoặc pháo. Kích thước nhóm tối ưu cho ứng dụng của bạn cũng sẽ cần tính đến các máy khách khác đang chia sẻ cùng một máy chủ MongoDB - vì việc sử dụng tài nguyên trên máy chủ MongoDB cũng nên được theo dõi.

Các công cụ như Azure ứng dụng hiểu biết có thể được sử dụng để thiết bị hiệu suất truy vấn MongoDB trong ứng dụng của bạn như chi tiết trong bài đăng trên blog này.

Kích thước hồ bơi tối đa trong nhóm kết nối là gì?

Một nhóm kết nối được tạo cho mỗi chuỗi kết nối duy nhất.Khi một nhóm được tạo, nhiều đối tượng kết nối được tạo và thêm vào nhóm để yêu cầu kích thước nhóm tối thiểu được thỏa mãn.Các kết nối được thêm vào nhóm khi cần, lên đến kích thước nhóm tối đa được chỉ định (100 là mặc định).100 is the default).

Kích thước nhóm kết nối trong MongoDB là gì?

Nhóm kết nối nằm trên cơ sở mỗi người/Mongo, vì vậy khi kết nối với bản sao 3 thành viên, sẽ có ba nhóm kết nối (một nhóm trên mỗi Mongod), mỗi nhóm có MaxPoolsize là 1.maxPoolSize of 1.

MongoDB có thể xử lý bao nhiêu kết nối?

Cụm M2 của bạn có ba nút với giới hạn kết nối 500 trên mỗi nút.Atlas dự trữ 10 kết nối cho mỗi nút.10 connections per node.

Kích thước nhóm kết nối DB lý tưởng là gì?

Kích thước nhóm mặc định thường là 5 đến 10. Trước tiên hãy đảm bảo bạn có vấn đề với cơ sở dữ liệu.Hãy thử các thái cực như 2 hoặc 30 dưới tải trọng nhân tạo và xem cách cư xử của nó.5 up to 10. First make sure you have a problem with the database. Try extremes like 2 or 30 under artificial load and see how it behaves.