Vì đã có và câu trả lời được gửi, và một câu trả lời hữu ích và hợp lệ ở đó, tôi không muốn đánh lạc hướng khỏi sự hữu ích của chính nó nhưng thực sự có những điểm để đưa ra cách vượt qua chỉ là một nhận xét ngắn. Vì vậy, hãy xem xét "sự gia tăng" này, hy vọng là hợp lệ nhưng chủ yếu là ngoài những gì đã được nói.
Sự thật là thực sự xem xét "cách ứng dụng của bạn sử dụng dữ liệu" và cũng nhận thức được các yếu tố trong "môi trường bị che chở" cũng như "môi trường vùng chứa" được đề xuất của bạn ảnh hưởng đến điều này.
Trường hợp nền
Mục đích chung đưa ra khuyến nghị thực hành cho việc định vị mongos
quy trình cùng với thể hiện của ứng dụng là làm giảm mọi chi phí mạng cần thiết để ứng dụng giao tiếp với mongos
quy trình đó . Tất nhiên, đó cũng là "thực hành được khuyến nghị" để chỉ định một số mongos
trường hợp trong chuỗi kết nối ứng dụng trong trường hợp nút "gần nhất" không có sẵn vì một số lý do có thể được chọn, mặc dù có thể có chi phí liên hệ với một nút từ xa.
Trường hợp "docker" mà bạn đề cập có vẻ hơi độc đoán. Mặc dù đúng là một trong những mục tiêu chính của container (và trước đó, một cái gì đó như nhà tù BSD hoặc thậm chí là chroot) nói chung là để đạt được một mức độ "cô lập quy trình", nhưng không có gì thực sự sai khi chạy nhiều quy trình miễn là bạn hiểu ý nghĩa.
Trong trường hợp cụ thể này, mongos
nó có nghĩa là "nhẹ" và chạy như một "chức năng bổ sung" cho quy trình ứng dụng theo cách mà nó gần như là một phần "được ghép nối" của chính ứng dụng. Vì vậy, bản thân hình ảnh docker không có "initd" như quy trình nhưng thực sự không có gì sai khi chạy bộ điều khiển quy trình như giám sát viên (ví dụ) làm quy trình chính cho bộ chứa mà sau đó cung cấp cho bạn điểm kiểm soát quy trình cái container đó cũng vậy. Tình huống "các quy trình được ghép nối" này là một trường hợp hợp lý và cũng là một câu hỏi đủ phổ biến rằng có tài liệu chính thức cho nó.
Nếu bạn đã chọn loại hoạt động "được ghép nối" đó để triển khai, thì nó thực sự giải quyết điểm chính là duy trì một mongos
thể hiện trên cùng một kết nối mạng và thực sự là "cá thể máy chủ" như chính máy chủ ứng dụng. Nó cũng có thể được xem theo một cách nào đó trong trường hợp "toàn bộ container" bị lỗi thì bản thân nút đó sẽ không hợp lệ. Không phải là tôi muốn giới thiệu nó, và trên thực tế có lẽ bạn vẫn nên cấu hình các kết nối để tìm kiếm các mongos
trường hợp khác ngay cả khi chúng chỉ có thể truy cập qua kết nối mạng làm tăng độ trễ.
Phiên bản cụ thể / cụ thể sử dụng
Bây giờ thời điểm đó đã được thực hiện, sự cân nhắc khác ở đây trở lại với sự xem xét ban đầu về việc đồng định vị mongos
quy trình với ứng dụng cho mục đích độ trễ mạng. Trong các phiên bản MongoDB trước 2.6 và đặc biệt liên quan đến các hoạt động như với khung tổng hợp, thì trường hợp sẽ có nhiều lưu lượng mạng hơn và tiếp theo sau khi xử lý công việc được thực hiện bởi mongos
quy trình xử lý dữ liệu từ các phân đoạn khác nhau . Đó không phải là quá nhiều trường hợp bây giờ vì một khối lượng công việc xử lý tốt hiện có thể được thực hiện trên chính các phân đoạn đó trước khi "chưng cất" vào "bộ định tuyến".
Trường hợp khác là các mẫu sử dụng ứng dụng của bạn liên quan đến shending. Điều đó có nghĩa là liệu khối lượng công việc chính có trong "phân phối ghi" trên nhiều phân đoạn hay thực sự là một cách tiếp cận "phân tán" trong việc hợp nhất các yêu cầu đọc. Trong những kịch bản đó
Kiểm tra, thử nghiệm và sau đó thử nghiệm lại
Vì vậy, điểm cuối cùng ở đây là thực sự tự giải thích, và đi đến sự đồng thuận cơ bản của bất kỳ câu trả lời lành mạnh nào cho câu hỏi của bạn. Đây không phải là một điều mới đối với MongoDB hoặc bất kỳ giải pháp lưu trữ nào khác, nhưng môi trường triển khai thực tế của bạn cần được kiểm tra trên "mô hình sử dụng" gần với thực tế thực tế giống như bất kỳ "thử nghiệm đơn vị" nào về chức năng dự kiến từ các thành phần cốt lõi hoặc kết quả tổng thể cần phải được kiểm tra.
Thực sự không có tuyên bố "dứt khoát" để nói "cấu hình theo cách này" hoặc "sử dụng theo cách này" mà thực sự có ý nghĩa ngoài việc kiểm tra những gì "thực sự hoạt động tốt nhất" cho hiệu suất và độ tin cậy của ứng dụng như mong đợi.
Tất nhiên, "trường hợp tốt nhất" sẽ luôn là không "đám đông" các mongos
trường hợp có yêu cầu từ các nguồn máy chủ ứng dụng "nhiều". Nhưng sau đó để cho phép họ một số "chẵn lẻ" tự nhiên có thể được phân phối theo khối lượng công việc tài nguyên có sẵn để có "ít nhất" một "nhóm tài nguyên" có thể được chọn, và thực sự lý tưởng trong nhiều trường hợp nhưng không cần phải tạo thêm "Chi phí vận chuyển mạng".
Đó là mục tiêu, nhưng lý tưởng nhất là bạn có thể "thử nghiệm" các cấu hình cảm nhận khác nhau để đưa ra giải pháp "phù hợp nhất" cho giải pháp triển khai cuối cùng của mình.
Tôi cũng rất muốn giới thiệu các khóa học "miễn phí" (như trong bia) có sẵn như đã đề cập, và bất kể trình độ kiến thức của bạn là gì. Tôi thấy rằng các nguồn tài liệu khóa học khác nhau thường cung cấp "đá quý ẩn" để hiểu rõ hơn về những điều mà bạn có thể không xem xét hoặc bỏ qua. Các M102 lớp như đã đề cập được xây dựng và thực hiện bởi Adam Commerford cho người mà tôi có thể chứng thực có một mức độ cao về kiến thức về triển khai quy mô lớn của MongoDB và kiến trúc dữ liệu khác. Đáng để dành thời gian ít nhất là xem xét một viễn cảnh mới mẻ về những gì bạn có thể nghĩ rằng bạn đã biết.