Определение требований к производительности и емкости для сред совместной работы отделов (sharepoint server 2013)

Резюме файла RPS

У нас есть один существующие программные обеспечения, связанные с файлами RPS (как правило это программное обеспечение от Autodesk, Inc., известное как Autodesk 3ds Max), и их можно отнести к категории основных типов файлов один. Традиционно эти файлы имеют формат 3ds Max Render Preset Settings .
В большинстве случаев эти файлы относятся к Settings Files.

Файлы RPS можно просматривать с помощью операционной системы Windows. Они обычно находятся на настольных компьютерах (и ряде мобильных устройств) и позволяют просматривать и иногда редактировать эти файлы.

Рейтинг популярности данных файлов составляет «Низкий», что означает, что они не очень распространены.

Распределённая команда нагрузочного тестирования в Miro

«Центр» — команда НТ — центр компетенций и поддержки

Зоны ответственности:Разработка инструментария (особое внимание к качеству!). У функциональных команд заказчик — клиенты Miro, у нашей команды заказчик — функциональные команды

Внутренние инструменты не должны быть поделками, сделанными «на коленке». Это должны быть полноценные и качественные продукты с должным уровнем поддержки всех видов. Функциональные команды и так загружены и повышать их уровень стресса плохими инструментами — недопустимо. Поэтому у нас есть:Мастер-классы.
Miro доски-презентации.
Confluence документация.
Версии, changelog, детальная отладочная информация в ходе работы инструмента.
Общий репозиторий с примерами кода и всеми НТ сценариями, чтобы было единое место, где собрана вся практика НТ.
Отдельные чаты на каждый инструмент для поддержки, сообщений о релизах, багрепортов и фичереквестов.

Помощь в обучении и консультирование коллег из функциональных команд, не только QA инженеров.
Проведение больших тестов, когда нужна проверка суммы функционала от множества команд.
Поддержка тестовых окружений совместно с QA Automation Team и DevOps Team.

«Агенты» — QA инженеры и разработчики в функциональных командах — проводят более узконаправленные тесты.

Подбор размера пула в сервисе

Как мы увидели, ограничение размера пула сервиса оказывает весьма существенное влияние на производительность. К сожалению, часто пул не ограничивают вообще. Из-за этого сервис держит меньшую нагрузку, чем мог бы, возникают мистические таймауты под штатной нагрузкой, а в некоторых случаях может серьёзно деградировать производительность базы данных.

Общее число соединений есть смысл выбирать в интервале от числа ядер, доступных базе, до ограничения на число серверных соединений у pgbouncer (каким его выбрать — вопрос для DBA).

При числе соединений меньше числа ядер база остаётся незагруженной, т.к. в Постгресе каждое соединение обслуживается отдельным процессом, который максимум может нагрузить одно ядро. Если соединений больше, чем максимальное число серверных соединений, начнётся мультиплексирование.

Конечно, эти соображения пригодны, когда нет долгих транзакций и медленных выборок из базы, которые надолго занимают соединение. Если они у вас есть, стоит подумать, как от них избавиться. Кроме того, опасно именно переключение соединений под нагрузкой. Задачи, работающие в разное время, например, сервис с пиковым трафиком днем и ночной крон, могут использовать полный пул каждая: мультиплексирования будет немного.

С какими препятствиями столкнулись при развитии нагрузочного тестирования в Miro

  1. JMeter перестал нас устраивать. В нём было очень неудобно программировать и отлаживать. Сложные сценарии — это почти всегда разработка, а не заполнение форм или написание отдельных небольших скриптов. Сценарий в JMeter — это не программа в обычном понимании, а сочетание инструкций, заполненных в формах, с встроенным кодом скриптов. Также в JMeter плохо с контролем версий, т.к. сценарий хранится в огромном XML. А у нас большое количество WebSocket взаимодействия со своим бинарным протоколом и достаточно сложные сценарии, над которыми работает несколько человек. Не хотелось изобретать обходные пути вокруг «особенностей» JMeter.
  2. Много ручных действий для каждого запуска НТ на тестовом окружении. TODO лист состоял из 16 пунктов для каждого запуска, которые надо было проделывать вручную… И это была боль… А боль — это сильный стимул что-то поменять.
  3. Не хватало инструментов для генерации разных распределений тестовых данных. А сценарии тестирования для разных компонентов возможны разные и нужно было уметь быстро создать нужное распределение. Идеально использовать базу максимально близкую проду и откатывать после каждого теста, но не всегда это возможно: это могут быть огромные объёмы и надо чистить сенситивные данные пользователей, а воспроизводить синтетические данные в нужном объёме — тоже сложная задача.
  1. Много задач.
  2. Недостаточно опыта.
  3. Недостаточно доступных людей.

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

Типичные проблемы открытия RPS

Autodesk 3ds Max нет

Вы пытаетесь загрузить RPS-файл и получить сообщение об ошибке, например «%%os%% не удается открыть расширение файла RPS». Как правило, это происходит в %%os%%, поскольку Autodesk 3ds Max не установлен на вашем компьютере. Поскольку ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его двойным щелчком мыши.

Совет: Если у вас есть другое программное обеспечение, которое вы знаете, открывает файлы RPS, вы можете выбрать его, нажав кнопку «Показать приложения».

Устаревшая версия Autodesk 3ds Max

В некоторых случаях может быть более новая (или более старая) версия файла 3ds Max Render Preset Settings, которая не поддерживается установленной версией приложения. Если у вас нет правильной версии Autodesk 3ds Max (или любой из других программ, перечисленных выше), вам может потребоваться попробовать загрузить другую версию или одно из других программных приложений, перечисленных выше. Ваш файл электронной таблицы, вероятно, был создан более новой версией Autodesk 3ds Max, чем то, что в данный момент установлен на вашем компьютере.

Совет . Если щелкнуть правой кнопкой мыши файл RPS, а затем выбрать «Свойства» (Windows) или «Получить информацию» (Mac), вы можете получить подсказки о том, какая версия вам нужна.

Сводка. Наличие правильной версии Autodesk 3ds Max на компьютере может вызвать проблемы с открытием RPS-файлов.

Хотя на вашем компьютере уже может быть установлено Autodesk 3ds Max или другое программное обеспечение, связанное с RPS, вы по-прежнему можете столкнуться с проблемами при открытии файлов 3ds Max Render Preset Settings. В %%os%% могут возникать внешние проблемы, которые вызывают эти ошибки при открытии RPS-файлов. Проблемы, которые не связаны с программным обеспечением:

Результаты внедрения нагрузочного тестирования в Miro

  1. Понятный и описанный процесс. Чётко описано, какие шаги нужно выполнить и что нужно делать на каждом из шагов.
  2. Большие тесты: 200K, 500K пользователей online при типичном сценарии использования. Каждый сложный тест зачастую проходит много итераций перед успешным выполнением, поэтому без автоматизации столько раз гонять большие тесты было бы чрезвычайно долгим и утомительным занятием, полным ошибок.
  3. Проверка компонентов перед выкаткой на прод.
  4. Обоснованный выбор параметров компонентов для поддержки планируемой нагрузки. То есть не просто с потолка брать «ну наверное хватит сотни воркеров», а выбирать параметры на основе результатов проверок.
  5. Автоматизация, упрощение и ускорение проведения НТ. Я говорил в начале про список из 16 пунктов, которые надо было пройти вручную при каждом запуске НТ на кластере. Теперь это один конфиг и одна команда. Больше автоматизации даёт больше надёжности и больше возможностей уделить время более творческим и сложным задачам.
  6. Деградационное тестирование (начало). Автоматическое выполнение тестов по реалистичному API сценарию на типичной нагрузке каждую ночь на последней версии сервера и построение графиков трендов для отслеживания динамики показателей скорости ответа и числа ошибок.

Не забываем

Закрывать результат

Это обсуждали множество раз, но тем не менее. Даже если в документации к библиотеке написано, что , лучше всё же закрыть самому через defer.

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

Быстрые транзакции

Применительно к pgbouncer: медленные транзакции забивают серверный пул.

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

Особенно опасны незакрытые транзакции, а это ошибка, которую в Go сделать довольно легко. Если pool_mode установлен в transaction, как это сделано у нас, то незакрытая транзакция надолго занимает собой соединение, в нашем случае на два часа.

Медленные же транзакции часто можно без больших затрат разделить на несколько быстрых. Если же это невозможно, то стоит подумать об отдельной реплике базы для них.

Keepalive

Keepalive — это фича, которую не стоит включать бездумно. Она полезна, когда входящих соединений мало, например, если к вам ходят другие ваши сервисы и вы можете контролировать, сколько соединений они создают. При бесконтрольном создании соединений под высокой нагрузкой у сервиса окажется множество незакрытых соединений. Каждое из них отъест свои 2-4 Кб, и будет плохо.

Проверять гипотезы практикой

В вопросах производительности запросто можно получить противоположный ожидаемому результат. Слишком много факторов вмешиваются в процесс. Любое своё предположение желательно проверять на железе и с цифрами.

Разница результатов открытого и закрытого тестов

Почему разница не заметна в закрытом тесте, у меня точного ответа нет, но есть рабочая гипотеза.

Судя по коду , pgbouncer не стремится любой ценой подключить соединение к серверному. Нашлось свободное серверное соединение — хорошо, подключим. Нет — придётся подождать. Этакая кооперативная многозадачность, в которой соединения не очень хотят кооперироваться.

Получается, активное клиентское соединение, в котором без остановки выполняются запросы, может довольно долго не освобождать серверное соединение. А запрос, попавший на неактивное соединение, будет долго ждать своей очереди.

Пока запросов в системе мало, как в закрытом тесте, это роли не играет: запросам хватает таймаута, чтобы дождаться своей очереди. В открытом тесте запросов в системе в разы больше, они выстраиваются в очередь на захват соединения в pgx и тратят там большую часть таймаута. На захват серверного соединения в pgbouncer времени не остается. Происходит таймаут и 500-я ошибка.

Но это лишь правдоподобные рассуждения, хорошо бы их проверить. Когда-нибудь потом.

С чего начинали нагрузочное тестирование в Miro

  1. Несколько человек занимались НТ часть своего времени.
  2. Мы использовали JMeter как наиболее популярное решение. У нас был свой плагин для WebSocket, так как ключевой функционал Miro связан с работой с досками и требует очень быстрого клиент-серверного взаимодействия, как в играх. Кстати движок, с которого много лет назад начинала компания, был как раз игровым. Это с самого начала дало высокую интерактивность и скорость отклика.
  3. Наш кластер был prod-like. К счастью, у нас был IaC. Нельзя сказать, что IaC — это серебряная пуля, сложности с ним тоже есть, но без него сложности с ростом масштаба становятся фатальными препятствиями.
  4. Один достаточно объёмный и сложный WebSocket&HTTP API тест.

Тестовые данные — это важно

Мы старались по максимуму использовать реальные данные. Использовали их, где получалось, для наполнения базы, добавив шум. Для создания ленты запросов собрали реальные запросы с прода. Где это было невозможно, использовали генератор. Было ясно, что любые предположения, не основанные на реальных данных, будут снижать надёжность результатов тестов.

Изначально мы использовали ленту в 20 тысяч запросов. И довольно быстро удалось добиться такого результата:

Тут сервис держит 1000 RPS при 52.5 мс. Всё красиво, кроме скачков времени отклика, но давайте попробуем потестировать ту же конфигурацию на ленте в 150 тысяч запросов:

Уже на 200 RPS сервис заваливается. Запросы отваливаются по таймауту, появляются 500-ки. Оказывается, предыдущий тест врёт примерно в 10 раз по пропускной способности.

Похоже, для ленты в 20 тысяч запросов использовалась лишь часть данных в таблицах. PostgreSQL смог всё закэшировать и работал быстро. Для ленты в 150 тысяч требовалось больше данных из таблиц, в кэш они не поместились, и быстродействие упало.

Получается, не уделив достаточно внимания входным данным, легко испортить всё нагрузочное тестирование.

Что нужно для нагрузочного тестирования?

  1. Общие требования. Нам нужно понимать, чего мы ожидаем от нашей системы в контексте нагрузки и производительности, хотя бы в общих чертах. Это может звучать просто, но не всегда у людей есть ясное представление о таких требованиях. «Система должна отвечать быстро под высокой нагрузкой» — это не требование, это пожелание. Я покажу примеры удачнее дальше в статье.
  2. Специалисты. Для проведения НТ нужны инженеры. Поскольку серьёзное тестирование всегда требует автоматизации, нужны инженеры с навыками тестирования и разработки, а также аналитики и девопсы.
  3. Платформа для тестового окружения. Если вы делаете НТ в первый раз — вам определённо понадобится подготовить инфраструктуру. Хорошо если у вас внедрён подход IaC (англ. infrastructure as a code, инфраструктура как код), он очень пригодится для создания окружения, подобного проду. Если нет — надо внедрять или придётся страдать даже на небольших конфигурациях. И в подавляющем большинстве случаев тестирование на проде — плохая идея. Но есть и исключения, можете погуглить «Netflix testing in production».
  4. Время. НТ — это очень затратный по времени процесс, особенно когда вы делаете его впервые. Автоматизация экономит много времени, но всё равно нужно быть готовым потратить на подготовку и проведение НТ несколько дней или существенно больше, зависит от масштабов прода, используемого стэка, сценариев использования и поставленных задач.

Глоссарий

В списке ниже представлены определения ключевых терминов, используемых в этой статье.

  • RPS. Количество запросов в секунду. RPS это количество запросов, получаемых фермой или сервером за одну секунду. Это общепринятая единица измерения нагрузки на сервер или ферму.

    Примечание

    Запросы и загрузки страниц это не одно и то же. Страница содержит несколько компонентов, каждый из которых создает один или несколько запросов при загрузке страницы браузером. При загрузке одной страницы создается несколько запросов. Обычно процедуры проверки подлинности и события, использующие незначительное количество ресурсов, не учитываются при измерениях RPS.

  • Зеленая зона. Зеленая зона представляет собой заданный набор характеристик нагрузки в нормальных условиях работы (до прогнозируемых ежедневных пиковых нагрузок). Ферма, работающая в этом диапазоне, должна быть способна поддерживать время ответа и задержки в рамках допустимых параметров.

    Это состояние, в котором сервер удовлетворяет указанным ниже условиям.

    • Задержка на стороне сервера для не менее чем 75 % запросов составляет менее одной секунды.

    • Уровень использования ЦП на всех серверах фермы не превышает 60 %.

      Примечание

      Наша лабораторная среда не имеет активного запущенного обхода контента при поиске, поэтому мы поддерживали использование ЦП на сервере базы данных на уровне, не превышающем 50 %, чтобы зарезервировать 10 % для нагрузки обхода контента при поиске. При этом предполагается, что для ограничения нагрузки обхода контента при поиске на уровне 10 % в рабочей среде используется регулятор ресурсов SQL Server.

    • Процент сбоев составляет менее 0,01 %.

  • Красная зона (макс.) Красная зона представляет определенный набор характеристик нагрузки в пиковых условиях работы. В красной зоне для фермы характерна временная повышенная потребность в ресурсах, при которой работа может поддерживаться только в течение ограниченного периода, пока не наступит отказ или не возникнут иные проблемы, связанные с производительностью и надежностью.

    Это состояние, в котором сервер удовлетворяет указанным ниже условиям в течение ограниченного периода времени.

    • Компонент регулирования запросов HTTP включен, но ошибки 503 (сервер занят) отсутствуют.

    • Процент сбоев составляет менее 0,1 %.

    • Задержка на стороне сервера для не менее чем 75 % запросов составляет менее 3 секунд.

    • Уровень использования ЦП на всех серверах фермы (кроме серверов баз данных) не превышает примерно 90 %.

    • Использование ЦП сервера базы данных не превышает примерно 50 %, что позволяет иметь достаточный резерв для нагрузки обхода контента при поиске.

  • AxBxC (примечание к графику). Это, соответственно, число веб-серверов, серверов приложений и серверов баз данных в ферме. Например, значение 10x1x1 указывает на то, что в данной среде имеется 10 веб-серверов, 1 сервер приложений и 1 сервер базы данных.

  • MDF и LDF: SQL Server физические файлы. Дополнительные сведения см. в материалах Files and Filegroups Architecture.

Масштабируем базу по памяти

Смотрим размеры наших таблиц и индексов:

Видим 21 Гб данных и 6 Гб индексов. Это существенно больше полезного объёма данных, но тут Постгресу виднее.

Нужно подобрать конфигурацию базы, которая могла бы вместить 27 Гб в памяти. В Авито используются несколько типовых конфигураций PostgreSQL: они хорошо изучены, а параметры в них согласуются друг с другом. Никто не запрещает кастомизировать конфигурацию под потребности конкретного сервиса, но начинать лучше с одной из готовых конфигураций.

Смотрим список конфигураций и находим вот такую:

8 ядер, 64 Гб памяти, effective_cache_size 48 Гб

effective_cache_size — это не настоящий размер кэша, это просто параметр планировщика, чтобы тот представлял, на сколько памяти ему рассчитывать. Можно здесь хоть петабайт поставить — размер кэша не увеличится. Просто планировщик будет предпочитать алгоритмы, которые хорошо работают с данными в памяти. Но всё же этот параметр в типовой конфигурации наши DBA выбрали не случайно: он учитывает разные кэши, доступные базе, в том числе кэш операционной системы. В общем, надо пробовать:

Открытый тест: 4000 RPS / 165 мс

Закрытый тест (100 инстансов): 5440 RPS / 106 мс

Операции чтения (зелёное) — на нуле, операции записи (жёлтое) — в незначительных количествах

Диск больше не является узким местом и, прямо скажем, бездельничает.

Утилизация CPU — полностью загружены все 8 ядер

Теперь мы упираемся в процессор. Это хорошо: масштабировать его относительно просто, а мешать мы никому не будем.

Единственное, что смущает, — большая разница в результатах открытого и закрытого тестов. Это может свидетельствовать о проблемах с соединениями. Смотрим метрики pgbouncer, и точно:

Опять cl_waiting подскочил. В этот раз, правда, cl_acitve (жёлтое) не падает, а cl_waiting (красные точки, правая шкала) не поднимается выше 12.

Ну, это просто ошибка в конфигурации базы. Размер пула должен быть 24, именно такой пул выставлен в сервисе. А на стороне базы он остался равным 12. Исправляем, смотрим:

Открытый тест: 5000 RPS / 140 мс
Закрытый тест (100 инстансов): 5440 RPS / 94 мс

Вот теперь хорошо. В закрытом тесте результаты те же, а вот в открытом пропускная способность выросла с 4000 до 5000 RPS. Стоит отметить, что нет никакого смысла использовать больше соединений, чем размер пула БД: это лишь портит производительность. Впрочем, это наблюдение заслуживает более пристального изучения.

Архитектура решения

Искать подходящие отделения и считать цены доставки будем на бэкенде. Для повышения надёжности и по юридическим причинам тарифы и методику расчёта цены доставки мы хотим хранить у себя, а не ходить за ценой к подрядчикам. Тарифы будем хранить в унифицированном виде для всех служб доставки.

Для расчёта цены используем отдельный микросервис со своим хранилищем.

В качестве хранилища мы рассматривали Elasticsearch, MongoDB, Sphinx и PostgreSQL. По результатам исследования выбрали PostgreSQL: он закрывает наши потребности и при этом существенно проще в поддержке для нашей компании, your mileage may vary.

Налоги и комиссии в статье рассматривать не будем. Нас интересует только базовая цена доставки от подрядчика.

Все определения RPS

Акроним Определение
RPS Raytheon Полярный услуги
RPS Rulang начальная школа
RPS Белгород начальная школа
RPS Буровые установки продуктов и услуг
RPS Быстрое первичного обследования
RPS Возобновляемой Портфолио стандарт
RPS Восстановить охраняемых видов
RPS Вращение в секунду
RPS Выбор поставщика ресурсов
RPS Датчик давления железнодорожных
RPS Датчик положения ротора
RPS Датчик положения стойки
RPS Доход на акцию
RPS Железные дороги пенсионный план
RPS Записи парламентов Шотландии 1707
RPS Записывает и издательские услуги
RPS Запись и воспроизведение системы
RPS Заявление о практике регистрации
RPS Зондирование вращательных позиции
RPS Избыточные защитные системы
RPS Исследования, издательские услуги
RPS Кольцо параметров сервера
RPS Королевское фармацевтическое общество
RPS Королевское филателистическое общество
RPS Королевское фотографическое общество
RPS Красный перец программное обеспечение компании
RPS Набор обычных продуктов
RPS Надежный пассивный Сонар
RPS Обзор и определение приоритетности Подкомитет
RPS Оборотов в секунду
RPS Общество почечной патологии
RPS Общество производителей каучука
RPS Ограниченных ресурсов
RPS Относительный фазовый сдвиг
RPS Пенсионные Планирование семинара
RPS Пенсионный план обслуживания
RPS Повторяющиеся платежной системы
RPS Почечных прессорных веществ
RPS Предложение удаленной системы
RPS Проезжую часть пакета услуг
RPS Психо социальных рисков
RPS Радиационной защиты стандарта
RPS Радиоизотопные энергосистемы
RPS Радиолокационные позиции символа
RPS Радужный портал программного обеспечения
RPS Раппорт-де-Preliminaire служба безопасности
RPS Растровый стандарт продукта
RPS Реактивный полистирол
RPS Реальные лица слэш
RPS Редич филателистическое общество
RPS Резервный источник питания
RPS Ремонт программное обеспечение программы
RPS Рентген в секунду
RPS Решения для возобновляемых источников энергии
RPS Рибосомных белков
RPS Ричмонд государственные школы
RPS Роботизированная пациента тренажеры
RPS Розанна начальная школа
RPS Рок ножницы бумага
RPS Рок, бумага, ружье
RPS Рокфорд государственные школы
RPS Роль играет моделирование
RPS Роль играет стратегия
RPS Руководитель радиационной защиты
RPS Система играет роль
RPS Система координат точки
RPS Система обработки денежных
RPS Система планирования разведки
RPS Система программирования в реальном времени
RPS Система роботизированной прекурсоров
RPS Система удаленного питания
RPS Системы зарегистрированные публикации
RPS Системы защиты реактора
RPS Случайные предустановленной подмножеств
RPS Ссылка фото выбор
RPS Станция удаленной обработки
RPS Стойки & шестерня рулевого
RPS Студия керамики палисандр
RPS Схема крепления Цена
RPS Удаленная система планирования
RPS Услуга предоставления запасных частей
RPS Услуги недвижимости
RPS предписано позитронная спектроскопия

Что означает RPS в тексте

В общем, RPS является аббревиатурой или аббревиатурой, которая определяется простым языком. Эта страница иллюстрирует, как RPS используется в обмена сообщениями и чат-форумах, в дополнение к социальным сетям, таким как VK, Instagram, Whatsapp и Snapchat. Из приведенной выше таблицы, вы можете просмотреть все значения RPS: некоторые из них образовательные термины, другие медицинские термины, и даже компьютерные термины. Если вы знаете другое определение RPS, пожалуйста, свяжитесь с нами. Мы включим его во время следующего обновления нашей базы данных. Пожалуйста, имейте в информации, что некоторые из наших сокращений и их определения создаются нашими посетителями. Поэтому ваше предложение о новых аббревиатур приветствуется! В качестве возврата мы перевели аббревиатуру RPS на испанский, французский, китайский, португальский, русский и т.д. Далее можно прокрутить вниз и щелкнуть в меню языка, чтобы найти значения RPS на других 42 языках.

Планы в отношении нагрузочного тестирования в Miro

  1. Деградационное тестирование (полноценная интеграция с CI/CD). В идеале постоянное НТ должно быть встроено в пайплайн и так же как функциональные тесты влиять на принятие решения о релизе.
  2. Тестирование микросервисов. Мы в процессе переезда с монолита, и всё больше работы появляется в этом направлении.
  3. Вовлечение большего числа команд. У нас их несколько десятков и пока не все включены в процесс.
  4. Улучшение инструментария. При бурном росте не всегда получается выдержать хорошую архитектуру, так что есть немного техдолга.
  5. Дополнение внутренней документации НТ примерами конкретных кейсов: как тестировали, что и как выявили, как доработали. Общая документация — это хорошо, но дополнение её солидным набором описаний конкретных кейсов — бесценно.
  6. Более исследовательская работа: профилирование, хаос-тестинг и т.д.

Масштабируем базу по диску

Проверим, является ли узким местом диск. Увеличиваем квоту контейнера в 8 раз, смотрим:

Открытый тест: 500 RPS / 109 мс

Закрытый тест: 745 RPS

В закрытом тесте пропускная способность выросла со 130 RPS до 745 — почти линейный рост. Значит, мы действительно упираемся в диск.

Оценим предел вертикального масштабирования. Снимаем с контейнера ограничение на операции ввода-вывода вообще:

Открытый тест: 3000 RPS / 602 мс

Закрытый тест (20 инстансов): 2980 RPS / 62 мс

Заметим, что закрытому тесту явно не хватает 20 параллельных запросов, чтобы нагрузить сервис. Мы съели вообще весь диск на всём сервере с базой:

Зелёное — число операций чтения (растёт вниз)

Конечно, в продакшене так себя вести нельзя: придут злые девопсы и будут нас ругать. Вообще, упираться в диск очень не хочется: его сложно масштабировать, мы будем мешать соседям по серверу, а они будут мешать нам.

Попытаемся уместить данные в память, чтобы диск перестал быть узким местом.

Этапы нагрузочного тестирования

  1. Детализация требований — что требуется от системы в терминах нагрузки и производительности, какой тип теста проводим и какие метрики необходимо собрать для проверки требований. Как я писал ранее, общие требования нужны ещё до тестирования, а когда процесс начат, нужно их декомпозировать в предельно конкретные и технические требования. Также нужно выбрать тип теста, реализуемого в тестовом сценарии, и составить список метрик, на сбор которых нужно настроить приложение, сценарий и инфраструктуру. Это аналитическая задача.
  2. Подготовка тестового окружения — где будем моделировать прод и пользователей. Необходимо выбрать одно из доступных или создать новое тестовое окружение под разработанные требования и настроить сбор метрик, нужных для оценки степени соответствия требованиям. Это задача DevOps специалистов.
  3. Выбор инструмента тестирования и подготовка сценария — как будем моделировать поведение пользователей. В сценарии тоже нужно запрограммировать сбор метрик. Это задача разработки.
  4. Проведение теста и замеры — каковы значения метрик. Это может звучать просто, но весьма редко всё работает с первого раза. Бывает нужно откатиться на один из предыдущих шагов и что-то поправить. На данном этапе проводится анализ некоторых ключевых показателей, чтобы убедиться, что нет критических ошибок теста. Этот шаг — задача тестирования. Основная работа по анализу будет вестись на следующем этапе.
  5. Анализ — соответствует ли система требованиям, есть ли проблемы. Если собираются правильные метрики, всё должно быть относительно просто, хотя и трудоёмко, а если нет — опять может понадобиться откатиться вплоть до первого шага. Здесь, в отличие от предыдущего шага, мы глубоко погружаемся в большое количество метрик чтобы выявить все возможные значимые факты. Это аналитическая задача.
  6. Подготовка отчёта — какие знания мы получили?.. Это самый важный этап. НТ — процесс очень затратный по ресурсам и вы явно захотите получить максимум знаний от него. Снова аналитическая задача.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector