У нас есть архитектура apache / mongo, организованная вокруг Docker.Пока все было хорошо, но с ростом баз мы сталкиваемся с новыми проблемами.На данный момент у нас есть 3 проекта в производстве, в общей сложности 6 контейнеров (1 контейнер apache и 1 контейнер mongo на проект).
Проблема, с которой мы сталкиваемся, заключается в том, что каждый контейнер mongo считает, что он имеет 21 ГБ памяти,поэтому они пытаются использовать его на 80%. Поэтому для меня решение было перезапустить один из контейнеров с ограничением памяти, установленным для процесса Монго:
--wiredTigerCacheSizeGB 7
Проблема с этим решением состоит в том, чтопредел установлен для каждого контейнера Монго.Если одной базе требуется больше памяти, мне придется перезапустить контейнер с другим значением.
Поэтому, пожалуйста, у меня есть несколько вопросов.Я думаю, что эти вопросы могут заинтересовать других в целом, так как я не нашел ничего об этом именно в Интернете:
1) Существует ли глобальное решение для балансировки памяти между контейнером Монго? То есть автоматически?(без ручного контроля, где я должен проверить ввод / вывод на дисках) А также, без перезапуска контейнера?
2) Действительно ли ограничения кэша полезны? Поскольку ОСв любом случае ограничивает контейнер, я должен снять ограничение и отключить получаемые сигналы?(Во всяком случае, не делая этого)
3) Действительно ли полезно иметь один контейнер на базу? Было бы более практично иметь один большой контейнер монго для памяти с точки зрения памяти?все три базы?Какие плюсы и минусы для обоих решений?
Один контейнер mongo для всех баз проектов. Плюсы: проще в управлении, проще в балансировке памяти
минусы: меньше безопасности
одинКонтейнер mongo для каждой базы: Плюсы: более безопасны.(не совсем)
Минусы: трудно справиться с памятью
4) У нас более общие дебаты о том, как память должна относиться к диску с монго. Лично яне думайте, что это проблема, если база на диске больше, чем занимаемая ею память, то есть нормально иметь части базы данных на диске, которые редко затрагиваются и, таким образом, не оказываются в памяти.
Мои разработчики считают, что размер на диске должен соответствовать размеру в памяти.То есть, если у меня есть базы данных объемом 40 ГБ, у меня должно быть 40 ГБ памяти, что кажется мне нереальным.
Каково ваше мнение по этому поводу?
Спасибо всем за ответы!