Подтвердить что ты не робот

Как я могу подчеркнуть тест/нагрузку на клиентское серверное приложение?

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

• Сколько клиентов может поддерживать сервер?
• Сколько одновременных запросов может поддерживать сервер?
• Сколько данных мы можем хранить в базе данных? • И т.д.

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

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

Мне была поручена разработка метода для получения таких ответов значимым образом. Я понимаю, что это не вопрос, на который кто-либо может ответить окончательно, но я ищу предложения о том, как люди продолжали делать такую ​​работу в своих системах.

Следует отметить, что у нас есть полный доступ к нашему клиентскому API через язык Python (с учетом SWIG), с которым гораздо легче работать, чем с С++ для такого рода работ.

Итак, мы идем, я бросаю это на пол: действительно интересно посмотреть, какие идеи вы, возможно, придумаете!

4b9b3361

Ответ 1

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

Тест 2: подключайте клиентов и держите их включенными в течение недели, делая случайные действия (FuzzTest), Время прохождения каждого действия. Также сохраняйте отчет о порядке действий, потому что таким образом ваши "клиенты" найдут лазейки в ваших случаях (очень важно, и ОЧЕНЬ трудно проверить рационально).

Тест 3 и 4. Определите основные варианты использования вашей системы и напишите сценарии, которые выполняют эти задачи. Затем запустите несколько клиентов, выполняющих ту же задачу (тест 3), а также несколько клиентов, выполняющих разные задачи (тест 4).

Серия: Теперь другое измерение, в котором вы нуждаетесь, - это количество клиентов. Хорошая серия: 5,10,50,100,500,1000,5000,10000,...

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

Также поздравляет с SWIGing вашими клиентами api на Python! Это отличный способ подготовить все.

Примечание: В IBM есть образец тестирования fuzz на Java, что нереально для вашего случая, но поможет вам создать хороший fuzztest для ваша система

Ответ 2

Если вам удобны тесты кодирования в Python, я нашел funkload, чтобы быть очень способным. Вы не говорите, что ваш сервер настроен на основе http, поэтому вам, возможно, придется адаптировать свои тестовые объекты к вашему собственному типу клиент/сервер.

Как только у вас есть тест на Python, funkload может запускать его во многих потоках, отслеживать время ответа и суммировать для вас в конце теста.

Ответ 3

Для производительности вы смотрите на две вещи: латентность (отзывчивость приложения) и пропускную способность (сколько опций за интервал). Для латентности вам необходимо иметь приемлемый контрольный показатель. Для пропускной способности вы должны иметь минимально допустимую пропускную способность.

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

Без знания аппаратного обеспечения, вы можете реально наблюдать тенденции во времени, а не абсолюты.

Знание конфигурации программного обеспечения не менее важно. У вас есть кластерная конфигурация сервера, сбалансирована ли загрузка, есть ли что-нибудь еще на сервере? Можете ли вы масштабировать свое программное обеспечение или вам нужно масштабировать аппаратное обеспечение, чтобы удовлетворить спрос.

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

Возьмите эту информацию и создайте script, который может принять ваш клиент. Вам нужно указать, сколько времени займет ваш script, чтобы выполнить действие в отношении того, сколько времени потребуется ожидаемому пользователю. Начните увеличивать свои номера, как упоминалось выше, до того, как вы достигли точки, когда увеличение клиентов приводит к большему снижению производительности.

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

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

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

Хранилище базы данных основано на физическом пространстве; вы можете определить размер строки из длины поля и ожидаемой совокупности данных. Экстраполируйте это статистически или создайте генерацию данных script (полезно для сценариев нагрузочного тестирования и должно быть активом для вашей организации), а затем сопоставьте сгенерированные данные с бизнес-объектами. Ваши клиенты будут заботиться о том, сколько "бизнес-объектов" они могут хранить, пока вы будете заботиться о том, сколько необработанных данных может быть сохранено.

Другие вещи, которые следует учитывать: какова ожидаемая доступность? Как насчет того, сколько времени потребуется, чтобы подключить сервер к сети. Доступность 99,9% не очень хороша, если требуется два дня, чтобы вернуть онлайн один раз, когда он идет вниз. С другой стороны, более низкая доступность более приемлема, если для перезагрузки требуется 5 секунд, и у вас есть падение.

Ответ 4

Если у вас есть бюджет, LoadRunner идеально подходит для этого.