Оскільки вже є і подана відповідь, і корисна, і дійсна на це, я не хочу відволікатися на її корисність, але дійсно є моменти, які піднімають це, що виходить за рамки лише короткого коментаря. Тож розглянемо це "збільшення", яке, сподіваємось, справедливе, але насамперед на додаток до вже сказаного.
Правда полягає в тому, щоб по-справжньому розглянути "як ваша програма використовує дані", а також бути в курсі факторів у "шахматному середовищі", а також запропонованого "контейнерного середовища", які впливають на це.
Фоновий випадок
Загальна рекомендація щодо практичного розміщення mongos
процесу разом із екземпляром програми - це усунення будь-яких накладних витрат на мережу, щоб програма могла спілкуватися з цим mongos
процесом. Звичайно, також "рекомендується практика" вказувати ряд mongos
примірників у рядку з'єднання додатків у тому випадку, коли той "найближчий" вузол з якоїсь причини не повинен бути доступним, тоді інший може бути обраний, хоча з можливим накладним зв'язком з a віддалений вузол.
Справа "докер", яку ви згадуєте, здається дещо довільною. Хоча це правда, що одна з головних цілей контейнерів (а до цього щось подібне до в'язниць BSD або навіть chroot) - це, як правило, досягти певного рівня "ізоляції процесів", насправді немає нічого поганого в запуску декількох процесів, поки ви зрозуміти наслідки.
У даному конкретному випадку mongos
позначається, що він "легкий" і виконується як "додаткова функція" до процесу подачі заявок таким чином, що він є значною мірою "парною" частиною самого додатка. Таким чином, зображення самих докерів не мають "initd" подібного процесу, але насправді нічого поганого в тому, щоб запустити контролер процесу, як supervisord (наприклад), як основний процес для контейнера, який потім дає точку контролю над процесом той контейнер. Така ситуація "парних процесів" є розумним випадком, а також досить поширеним запитанням, щоб на це була офіційна документація .
Якщо ви вибрали такий тип "парної" операції для розгортання, то вона дійсно стосується первинної точки підтримання mongos
екземпляра в тому ж мережному з'єднанні і справді "серверного екземпляра", як і сам сервер додатків. Це також може розглядатися певним чином як випадок, коли «весь контейнер» повинен був вийти з ладу, тоді сам вузол просто недійсний. Не те, що я б рекомендував це, і насправді вам, мабуть, все ж слід налаштувати з'єднання для пошуку інших mongos
примірників, навіть якщо вони доступні лише через мережеве з'єднання, що збільшує затримку.
Версія конкретна / специфічне використання
Тепер, коли це зроблено, інший розгляд тут повертається до первинного розгляду питання про спільне розміщення mongos
процесу з додатком для цілей затримки в мережі. У версіях MongoDB до 2.6 та конкретно стосовно таких операцій, як рамки агрегації, тоді траплялося так, що буде набагато більше мережевого трафіку та наступних після обробки робіт, що виконуються mongos
процесом для роботи з даними від різних осколків . Зараз це не так вже й багато, тому що велика частина робочого навантаження тепер може бути виконана на самих осколках, перш ніж "переганяти" на "маршрутизатор".
Інший випадок - це самі схеми використання ваших програм щодо заточування. Це означає, чи є основне навантаження в "розподілі запису" по декількох фрагментах, чи це підхід "розкидання-збирання" при консолідації запитів на читання. У тих сценаріях
Тест, тест, а потім ще раз тест
Отже, остаточний момент тут справді роз'яснюється і зводиться до основного консенсусу будь-якого розумного відповіді на ваше запитання. Це не нова річ для MongoDB або будь-якого іншого рішення для зберігання даних, але ваше фактичне середовище розгортання потрібно перевірити на "моделях використання", наближених до реальної реальності так само, як і на будь-якому "тестуванні одиниць" очікуваної функціональності з основних компонентів або загальні результати потрібно перевірити.
Насправді не існує "остаточного" твердження, щоб сказати "налаштувати так" або "використовувати таким чином", що насправді має сенс окрім тестування того, що "насправді працює найкраще" для роботи та надійності програми, як очікується.
Звичайно, "найкращим випадком" завжди буде не "переповнити" mongos
екземпляри запитами від "багатьох" джерел сервера додатків. Але потім, щоб дозволити їм деякий природний "паритет", який можна розподілити за наявними ресурсами навантаженнями, що мають "принаймні" "пул ресурсів", який може бути обраний, і справді в ідеалі у багатьох випадках, але усуваючи необхідність викликати додатковий "мережевий транспорт накладні".
Це і є мета, але в ідеалі ви можете "провести лабораторні випробування" різних сприйнятих конфігурацій, щоб прийти до "найкращого" рішення для вашого можливого рішення щодо розгортання.
Я також настійно рекомендую "безкоштовні" (як у пиві) курси, як уже було зазначено, і незалежно від рівня вашого знання. Я вважаю, що різні джерела матеріалів для курсів часто пропонують "приховані дорогоцінні камені", щоб дати більше розуміння речам, які ви, можливо, не вважали або іншим чином не помітили. Як згадувалося, клас M102 розроблений та проводиться Адамом Комерфордом, для якого я можу засвідчити, що він володіє високим рівнем знань щодо широкомасштабних розгортань MongoDB та інших архітектур даних. Варто часу хоча б розглянути новий погляд на те, що, на вашу думку, ви вже знаєте.