Swoole — стресс-тест системы службы обмена сообщениями webSocket
Swoole — стресс-тест системы службы обмена сообщениями webSocket

Обзор

Служба веб-сокетов на основе Swoole, третья статья в предыдущей серии о системе сообщений, в основном знакомит с содержанием стресс-тестирования веб-сокетов. Ядро программирования — это математика, а суть тестирования — расчет. Профессиональный термин называется оценкой мощности. Тест обычно используется для моделирования программы и проверки правильности работы программы. Есть два момента, на которые необходимо обратить внимание: оптимальное значение QPS и максимальное значение, полученное на основе отзывов системы. тестовые данные, оптимизация тестовых явлений и отражений.

Основное использование Jmeter

Когда вся разработка готова, начните готовиться к выходу в Интернет: тестированию и развертыванию сервиса. При тестировании следует обратить внимание на строгую логику кода, корректность работы кода и стабильность работы сервиса. данные как индикаторы. Компьютерное программирование – это, в конечном счете, вся математика.

шаг.01 Группа потоков Настройки группы потоков

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

Язык кода:txt
копировать
Number of Threads(users)  //Количество одновременных потоков (пользователей)
Loop Count //Количество повторений

шаг.02 Добавить испытуемого

Щелкните правой кнопкой мыши в левом дереве навигации. Test Plan,выбирать Add > Threads(Users) > Thread Group , щелкните правой кнопкой мыши Thread Group,выбирать Add > Сэмплер, вы можете увидеть следующие новые параметры сэмплера, подробности следующие.

Язык кода:txt
копировать
WebSocket Open Connection	// создать WebSocket соединять
WebSocket Ping/Pong     	// контрольный кадр, отправить ping и получить pong
WebSocket request-response Sampler //	Отправлять и получать текстовые или двоичные файлы WebSocket рамка
WebSocket Single Write Sampler	// Отправить текстовый или двоичный файл WebSocket рамка
WebSocket Single Read Sampler	// Получить текстовый или двоичный файл WebSocket рамка
WebSocket Close	                // закрытие Websocket соединять

step.03 Добавить дерево результатов выбирать Add > Listener , все деревья результатов находятся ниже этого.

Добавьте агрегированный отчет и выполните тест. Результаты показаны ниже.

Подготовьте тестовые данные

Практика 01 - Подготовьте тестовые данные

1. Случайным образом прочитайте 1000 пользователей в таблице пользователей и проведите стресс-тест.

Язык кода:txt
копировать
select user_id from user where user_status = 1
ORDER BY RAND() limit 1000;

2. Создайте данные, необходимые для тестирования (например, 100 000 элементов).

Язык кода:txt
копировать
drop procedure idata;
delimiter ;;
create procedure idata()
begin
  declare i int;
  set i=1;
  while(i<=100000 )do
    insert into t2 values(i, i, i);
    set i=i+1;
  end while;
end;;
delimiter ;
call idata();

3. Запросите команду максимального количества ссылок.

Язык кода:txt
копировать
show variables like '%max_connections%';

4. Запросите команду состояния потока связи.

Язык кода:txt
копировать
show processlist; 

5. Команда для определения статуса связи сервера Mysql.

Язык кода:txt
копировать
netstat -ant|grep ESTABLISHED|grep 3306 | wc -l

Практика 02 — Раздел кода

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

Язык кода:txt
копировать
$str = '62210,45783,36209,146502,24599,168338,166511,1917...';
$uidTestArr = explode(',',$str);
foreach ($uidTestArr as $uid){
    if(isset($uid) && intval($uid) > 0){
        $json = file_get_contents('http://open.stark.com/login/gettoken?uid='. $uid);
        $json = json_decode($json,true);
        $temp[] =   [ 'uid' => $uid , 'token' => $json['token']  ];
    }
}
$index = rand(0,count($temp) - 1);
$randData =  $temp[$index];

//Результаты случайного выполнения
/**
Array
(
    [uid] => 166511
    [token] => f46540f11a40afeb9998cbe76661ec8234a87054
)
*/

Демо-версия тестового кода Crontab: сначала заполните тестовые данные, учтите фактическую пропускную способность Crontab, оптимизируйте интервал выполнения запланированной задачи, используйте Curl иshell_exec для реализации, выполните результат и верните данные {"code":200, "result": [],"msg":"ОК"}

Язык кода:txt
копировать
$str = "62210,45783,36209,146502,24599,168338,166511,1917,135799,8326...";
//Удалим возможные разрывы строк и пробелы
$str = str_replace(array(PHP_EOL, ' ' ,'',$str));
$testUsers = explode(',',$str);
for ($i=0;$i<10000;$i++){
    $index = rand(0,99);
    $uid = $testUsers[$index];
    $msg = '{\"rid\":225,\"uid\":'.$uid.',\"top_rid\":225,\"module\":\"novel_chapter\",\"module_name\":\"1022 last dance \u7b2c13\u7ae0\",\"module_id\":1019712,\"module_nid\":163961,\"comment_uid\":268,\"comment_nickname\":\"\u6d4b\u8bd5\u5c0f\u5b9d\u8d1d\",\"content\":\"\u4f60\u597d\u554a\",\"gift_id\":0,\"gift_name\":\"\",\"gift_number\":0}';
    $url = 'http://msgdev.stark.com/api/comment/message';
    $json = shell_exec( "curl -d 'uid={$uid}&msg={$msg}' {$url} " );
    echo   'i:'.$i.',json:'.$json.PHP_EOL;
}

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

Язык кода:txt
копировать
//Вернем текущую метку времени в миллисекундах
функция мсектайм() {
    $stamptime = микровремя();
    $arr = взорваться(' ',$stamptime);
    $msectime = sprintf('%.0f', (floatval($arr[0]) + floatval($arr[1])) * 1000);
    вернуть $мсектиме;
}

Подведите итог:

  1. Параллельные ссылки и параллельные запросы. Параллельные ссылки потребляют лишь немного больше памяти, а параллельные запросы убивают процессор.
  2. Предварительная оценка пропускной способности системного трафика в конечном итоге является проблемой расчета. Независимо от размера трафика, окончательным решением является принятие стратегии «разделяй и властвуй».
  3. Эффективность ручного управления слишком низкая, используйте программу для проверки программы.
  4. Сократите ненужные записи в журнал, чтобы уменьшить передачу операций ввода-вывода на диск.
  5. Кэширование и Mysql — это баланс, который необходимо рассчитать.

Особое примечание к пункту 5: необходимо подчеркнуть одну вещь: не пугайтесь так называемых 1 или 10 миллионов заголовков трафика. Например, при посещении 1000 Вт/ч Qps становится 27777/с. популярные интерфейсы, запрошенные каждым пользователем 30, это правда теста. Используйте базу данных в памяти для ускорения в ключевых местах, и препятствия будут легко решены:

Язык кода:txt
копировать
10000000 / 60 / 60 / 30  = 925/s
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose