ИСТОК.
Программно-испытательный комплекс
Нагрузочные испытания однонаправленных шлюзов

ИСТОК.

Доказать доставку там, где никто не может ответить «получено».

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

Генератор SENDER · :8080 Изделие ОДНОНАПРАВЛЕННЫЙ ШЛЮЗ Верификатор RECIPIENT · :8081 ОБРАТНОГО КАНАЛА НЕТ — ПОДТВЕРЖДЕНИЯ НЕВОЗМОЖНЫ MQTT · TCP · MODBUS TCP · OPC UA · SFTP
4.32ТБ
передано за суточный прогон
440Мбит/с
устойчивая интенсивность, 24 часа без спада
143млн
значений телеметрии принято и проверено
0
искажённых сообщений и кадров
Задача

Диод либо доставляет всё, либо молча теряет часть

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

Что скрыто

Потери без следа

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

Что скрыто

Искажение вместо потери

Дошедший, но повреждённый кадр опаснее утраченного: он попадает в корпоративный контур как достоверное значение с производственной линии.

Что скрыто

Цена ручного протокола

Показатели, переписанные оператором в конце многочасового прогона, невозможно перепроверить и нечем защитить перед заказчиком.

Решение

Две службы по разные стороны шлюза

Генератор формирует детерминированный поток с контрольными суммами и метками времени источника. Верификатор принимает, декодирует, проверяет и считает. Сходимость двух независимых наборов счётчиков и есть доказательство доставки.

01

Полнота — по разрывам последовательности

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

02

Целостность — двумя независимыми механизмами

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

03

Своевременность — с контролем достоверности

Перцентили p50, p95, p99 и p99.9 по скользящему окну. Комплекс сам проверяет синхронность часов сторон и помечает результат признаком достоверности — недостоверная задержка не попадёт в отчёт под видом измеренной.

04

Воспроизводимость — от зерна генератора

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

Протоколы

Пять протоколов, одновременно и независимо

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

ПротоколРоль генератораРоль верификатораМодель данныхЭндпоинт
MQTTиздатель, QoS настраиваетсяподписчиксообщение с SHA-256/test/{batch,stream,large}
TCPклиент, поток кадровслушательсообщение с SHA-256/test/tcp/…
Modbus TCPведомый или ведущийведущий или ведомыйкадр станка, CRC16/test/modbus/industrial
OPC UAсервер, публикация узловклиент-подписчиккадр станка, CRC16/test/opcua/industrial
SFTPклиент, загрузка файловчтение landing-каталогафайл/test/sftp/{batch,stream}

Адресация Modbus и идентификаторы узлов OPC UA берутся из единой карты тегов. Комплекс выгружает готовые описания адресного пространства для настройки шлюза, снимая самый частый источник ошибок при вводе стенда в работу.

Профили нагрузки

От одного сообщения в секунду до предела канала

Stream

Реальное время

Равномерная отправка с заданной частотой. Имитация непрерывного потока показаний.

Batch

Параллелизм

N задач-отправителей делят заданный объём. Предельная пропускная способность при конкуренции.

Large

Крупный блок

Пакеты от 5 до 100 МБ. Полоса пропускания и поведение на предельном размере кадра.

Industrial

Цех целиком

N станков × M индикаторов × F Гц. Эталонный профиль АСУ ТП по Modbus TCP и OPC UA.

Combined

Всё сразу

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

Управление

Только по API

Запуск, останов и съём показателей — HTTP-запросами. Ручных операций на стенде нет, прогон воспроизводим.

{ "duration": 86400, "mqtt": { "thread_count": 5, "packet_size": 307200, "rate_limit": 400 }, "tcp": { "thread_count": 2, "packet_size": 307200, "rate_limit": 200 }, "sftp": { "thread_count": 1, "packet_size": 1048576, "rate_limit": 1 }, "modbus": { "machines": 100, "indicators_per_machine": 50, "frequency_hz": 1 }, "opcua": { "machines": 100, "indicators_per_machine": 50, "frequency_hz": 1 } }

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

ПараметрЕдиницаДиапазонСемантика
packet_sizeбайт1 … 100 МБцелевой размер полезной нагрузки, добивка пробелами
thread_countшт.от 1параллельные задачи-отправители
rate_limitсообщ./сот 1суммарная скорость по всем задачам; 0 — без ограничения
machinesшт.от 1имитируемых единиц оборудования
indicators_per_machineшт.от 1значений в кадре станка
frequency_hzГцот 1частота обновления кадра каждой единицы
durationс1 … ∞продолжительность прогона; 0 — до команды останова
Метрология

Отчёт, которому можно верить, — тот, что сам сообщает о своей недостоверности

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

ACCURATE — измерение корректно SUSPECT — обнаружен дрейф часов UNRELIABLE — задержка недостоверна

К признаку прилагается предписанное действие оператора. Показатели своевременности принимаются к рассмотрению только при значении ACCURATE — это правило заложено в сам отчёт, а не в добросовестность того, кто его читает.

Суточный прогон

Сутки под нагрузкой по пяти протоколам

Профиль /test/combined, продолжительность 86 400 секунд, 200 имитируемых станков. Показатели сняты автоматически, без участия оператора.

4.50 ТБ 2.25 ТБ 0 4.32 ТБ 0 ч 12 ч 24 ч
Передано данных
4.32 ТБ
Полезная нагрузка
3.87 ТБ
Сообщений доставлено
13 654 990
Кадров телеметрии
2 859 488
Значений индикаторов
142 974 384
Интенсивность
52.5 МБ/с
Объём за час
184.4 ГБ
Расхождений SHA-256
0
Ошибок CRC16
0
Снимков статистики
288
Логирование и отчётность

Четыре независимых канала регистрации

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

Журнал событий

Структурированный JSON, посуточная ротация

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

Снимки статистики

Полный отчёт на диск каждые пять минут

288 снимков за сутки плюс файл последнего состояния для внешнего мониторинга. Итог прогона не теряется при аварийном завершении и не требует присутствия человека в момент окончания теста.

Журнал отказов

Транспорт, операция, текст ошибки

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

Метрики

Prometheus по /metrics

Счётчики доставки и целостности, объём раздельно по кадру и полезной нагрузке, гистограммы задержки, разрывы последовательности телеметрии — с разбивкой по каждому протоколу.

Развёртывание

Статический бинарник, никаких зависимостей на площадке

ПараметрЗначение
Целевая платформаAstra Linux SE, x86_64 — статическая сборка musl
РеализацияRust, две независимые службы без общего состояния
Поставкабинарники или контейнеры, конфигурация в YAML с переопределением из окружения
Контроль готовности/health, /ready — состояние каждого транспорта до начала испытаний
Съём результатов/stats — JSON, /metrics — Prometheus, снимки на диск
Ресурсыштатный профиль на 200 станков — единицы процентов CPU на типовом сервере стенда
Итог

Сутки нагрузки, ноль искажений, отчёт без единой ручной записи

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

Запросить показ

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

ИСТОК · программно-испытательный комплекс Нагрузочные испытания однонаправленных шлюзов