Проблема производительности MongoDB на AWS - PullRequest
0 голосов
/ 30 мая 2019

У меня есть несколько вопросов о производительности MongoDB.Заранее благодарим за любую помощь.

Архитектура БД

БД установлена ​​в соответствии с инструкциями по адресу: https://docs.aws.amazon.com/quickstart/latest/mongodb/step2.html

У нее один бастиони три реплики.

БД используется в приложении Ruby on Rails 5 с MongoDB 4.09

Вопросы

  1. Я хотел бызнаете, должен ли параметр 'hosts' включать все реплики или только первичные?

mongoid.yml config

"mongoid": {
                "production": {
                    "clients": {
                        "default": {
                            "options": {
                                "user": "USER",
                                "password": "PASS****",
                                "auth_source": "admin",
                                "read": {
                                    "mode": "primary_preferred"
                                },
                                "max_pool_size": 200,
                                "min_pool_size": 10,
                                "ssl_verify": false
                            },
                            "database": "pro_db",
                            "hosts": [
                                "PRIMARY_REPLICANODE.3.0.53:27017",
                                "SECONDARY_NODE0.3.62.61:27017",
                                "SECONDARY_NODE1.3.80.80:27017"
                            ]
                        }
                    }
                }
            },

Что такое хорошее значение для max_pool_size?Каждый узел БД Mongo имеет около 16 ГБ ОЗУ и 2 виртуальных CPUS.Существуют ли другие соответствующие параметры, которые следует изменить по умолчанию?

Существует проблема производительности при одновременных запросах API с другими параметрами.Запросы API с тем же параметром имеют средний отклик 11 миллисекунд, но как только параметр изменяется и является параллельным, среднее значение составляет 8904 миллисекунды.И какое-то время ожидания.Я хотел бы знать, что может вызвать проблему?

API-запросов с тем же параметром 11 мс

enter image description here

Запросы API с различными параметрами 8904 мс

enter image description here

1 Ответ

1 голос
/ 31 мая 2019
  1. Все хосты MongoDB должны быть указаны в конфигурации приложения. Какой сервер является основным, меняется со временем, например, во время обслуживания. Если приложение ссылается только на один сервер, и этот сервер перезапускается, приложение не сможет найти какой-либо из других серверов (один из которых, вероятно, будет текущим основным), и может возникнуть сбой.

    Драйвер выполняет обнаружение узлов в кластере и, если ему удастся связаться с узлами в начальном списке (это список серверов в конфигурации), тогда он сможет узнать обо всех других узлах. в кластере и следите за первичными изменениями. Но если вам случится перезапустить приложение, и в это время оно ссылается только на один сервер, и этот сервер не работает, приложение не сможет найти другие серверы.

  2. Максимальный размер пула - это максимальное количество открытых соединений, которое будет хранить каждый клиент. Узел 16 ГБ ОЗУ не должен иметь проблем с 200 открытыми соединениями. Если максимальный размер пула задан слишком низким, приложение может столкнуться с ошибками, так как не сможет получить соединение для выполнения операций.

    Обратите внимание, что максимум 200 приблизительно означает, что вы ожидаете выполнить около 200 операций одновременно, что - для типичного приложения на Rails - кажется маловероятным. Но нет ничего плохого в том, чтобы оставить максимум на 200.

  3. Конкретный вопрос о производительности не отвечает, учитывая предоставленные вами данные. Сужать ли время проводится в приложении или в базе данных; если он потрачен в базе данных, какие запросы и чем они отличаются. Если время в приложении тратится, вам, как правило, придется самостоятельно профилировать приложение, так как есть много возможностей, где время может идти.

...