Нагрузочное тестирование системы DIRECTUM на 5000 одновременно работающих пользователях. Часть 3. Методика тестирования.

7 1

Часть 2

Все нагрузочное тестирование состояло из трех тестов:

        1. Имитация обращений 5000 пользователей к серверу сеансов;

        2. Обработка задач службой workflow с использованием нескольких процессов;

        3. Имитация нагрузки на СУБД при работе 5000 пользователей.

Остановимся более подробно на каждом из тестов.

Тест №1. Имитация обращений 5000 пользователей к серверу сеансов

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

Примечание. Настраивается ведение лога в файле настроек сервера сеансов SBSessionSrvSettings.xml, следующим образом:

На основе анализа логов сервера сеансов был выделен профиль нагрузки.

Таблица 1. Профиль нагрузки на сервер сеансов

Вид обращения к серверу сеансов

Частота (число операций для 100 пользователей в час)

Обновление информации об активности клиента

22142

Получение даты создания базы данных

106

Получение ИД аппаратного окружения

106

Получение даты инсталляции

106

Получение количества лицензий

4

Получение даты обновления shared-справочника

2790

Получение версии сервера сеансов

59

Проверка блокировки объекта

8059

Блокировка объекта

2045

Установить дату обновления shared-справочника

38

Разблокировка объекта

1894

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

Тест №2. Обработка задач службой workflow

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

Таблица 2. Профиль нагрузки на службу workflow

Операция

Частота

(число операций в час при работе 5000 пользователей)

Старт задачи

2000

Выполнение задания

4500

Всего операций службы workflow

6500

Также предварительно в очередь workflow было поставлено 3000 задач, которые находились в режиме ожидания и в процессе тестирования не обрабатывались.

Для проведения тестирования было создано два вида типовых маршрутов на базе стандартного «Совещания»:

        1.  В начало был добавлен блок «Задание», в качестве исполнителя которого использовалась вычисляемая роль, в которой случайным образом выбирались 1 … 6 пользователей. По этому ТМ создавались задачи, которые использовались для создания нагрузки.

        2. В начало был добавлен блок «Ожидание». По этому ТМ создавались задачи перед тестирование, которые использовались для создания предварительной очереди для workflow (3000 задач, про которые упоминалось выше).

Для проведения тестирования предварительно в базе данных были созданы задачи в состоянии Инициализация по ТМ №1 и свободному маршруту в соотношении 1:4. Задачи создавались утилитой, описанной в предыдущей части.

Для самого тестирования была написана утилита, которая в отдельных потоках выполняла следующие действия:

        1. Переводила задачи из состояния Инициализация в состояние В работе и ставила их в очередь обработки службой;

        2. Переводила задания из состояния В работе в состоянии Выполнено и ставила задачу по заданию в очередь обработки службы.

Тест №3. Имитация нагрузки на СУБД при работе 5000 пользователей 

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

Таблица 3. Профиль нагрузки на СУБД
(операции пользователей, сгруппированные в кейсы)

Номер кейса

Операция

Вероятность выполнения операции

Планируемое время отклика, сек

Частота,

число операций для 100 пользователей в час

1

Создание, сохранение, старт задачи

100%

3

40

Просмотр прав на задачу

18%

1

7

2

Показ дерева задач

100%

1

601

Открытие задачи

58%

3

349

3

Выполнение задания

100%

4

90

4

Открытие версии документа

100%

3

864

Изменение версии документа

22%

5

190

5

Открытие карточки документа

100%

3

114

Изменение карточки документа

68%

3

78

6

Создание документа

100%

4

66

Просмотр прав на документ

45%

1

30

7

Проверка подписей документа

100%

4

114

8

Открытие справочника РКК («Регистрационно-контрольные карточки»)

100%

3

94

Создание РКК

16%

4

15

9

Открытие карточки РКК

100%

3

99

Изменение РКК

54%

4

53

10

Открытие справочника ОРГ («Организации»)

100%

3

479

Создание ОРГ

12%

4

57

11

Открытие карточки ОРГ

100%

3

240

Изменение ОРГ

35%

4

84

12

Получение содержимого папки

100%

1

515

Изменение содержимого папки

19%

1

98

Для проведения данного тестирования был использован инструмент Visual Studio Test Edition 2008. Предназначен он для нагрузочного тестирования веб-приложений, но как оказалось можно использовать и для другого тестирования.

Суть тестирования заключалась в следующем:

        1. Каждый виртуальный пользователь сопоставлялся с реальным пользователем в системе DIRECTUM;

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

        3. При тестировании каждый пользователь с определенной периодичностью выполнял кейсы. Кейсы представляли собой параметризированные sql-запросы реальных операций.

Вот маленький кусочек кейса

            Dim CommandText As New StringBuilder()

Dim UserID As Integer = Me.Context.WebTestUserId

Dim SQLConnection As New SqlConnection()

Dim UsersParams As New LoadTestPlagin.UserParams

UsersParams = UserParamsList(UserID)

Dim DirUserID As String = UsersParams.DirUserID

SQLConnection = UsersParams.Connection

Dim SqlCommand As New SqlCommand()

SqlCommand.Connection = SQLConnection

Randomize()

Dim Index As Integer = CInt(Int(5 * Rnd()) + 1)

Dim EdocID As Integer = UsersParams.IDDocForChangeVerArr.GetValue(Index - 1)

CommandText.AppendLine("select")

CommandText.AppendLine(" EDocumentType.Kod")

CommandText.AppendLine("from")

CommandText.AppendLine(" SBEDoc EDocument,")

CommandText.AppendLine(" MBEDocType EDocumentType")

CommandText.AppendLine("where")

CommandText.AppendLine(" EDocument.XRecID = " & EdocID.ToString)

CommandText.AppendLine(" and EDocumentType.TypeID = EDocument.TypeID")

SqlCommand.CommandText = CommandText.ToString

SqlCommand.ExecuteNonQuery()

CommandText.Length = 0
7
Авторизуйтесь, чтобы оценить материал.
Александр Кривенец

Спасибо за интересную статью, но хотелось бы узнать ещё и конфигурацию железа, на котором всё это "жило", чтобы лучше оценить.

Спасибо.

Авторизуйтесь, чтобы написать комментарий