MADT: Моделируем сетевое взаимодействие клиентов и сервисов — удушение, отключение и другие "а что, если?" Тестирование, нагрузочное тестирование

Доклад принят в программу конференции
Олег Якушкин
СПбГУ

Ведет проекты в области Распределенных Сервисных Систем и Искусственного Интеллекта. Преподает 5+ лет (http://apmath.spbu.ru/ru/staff/jakushkin/index.html). Написал 40+ научных статей (https://www.scopus.com/authid/detail.uri?authorId=56404585900).

o.yakushkin@spbu.ru
Тезисы

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

Для облегчения тестирования распределённых приложений в Центре Технологий Распределённых Реестров разрабатывается система MADT, предназначенная для моделирования распределённых приложений и изучения влияния сетевых условий на их работу.

Мы хотим, чтобы тестирование и отладка систем, работающих по сети, были максимально простыми и комфортными для разработчика программиста.

Программист хочет поставить эксперимент:
1. Описал докер-образы компонентов (клиентов, серверов, баз данных и т.д.).
2. Рассказал, какая сеть может связывать их между собой простым кодом на питоне (какие узлы с какими разговаривают, сколько их и где узлы расположены).
3. Описал, что за события в сети должны произойти и когда. Например, роутер Х стал пропускать в 10 раз меньше трафика на 30 секунд, а потом восстановился.

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

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

Более того, описав несколько таких экспериментов и критериев их успешного прохождения, программист дополняет ими свой CI-пайплайн.

Помимо статической маршрутизации, мы поддерживаем важные протоколы динамической маршрутизации:
• RIP (Routing Information Protocol);
• OSPF (Open Shortest Path First);
• BGP (Border Gateway Protocol).

Есть ли альтернативы? Не совсем:
1) GNS3: виртуальные машины, а не контейнеры; для отладки сетей, а не приложений; ethernet, а не IP;
2) eve-ng: ручное описание экспериментов; нет распределённого запуска; максимум в 1024 узла.

И везде нужно уметь настраивать сеть! MADT для программиста, которому приходится учить программу жить с причудами сети на высоком уровне – например, роутер стал пропускать в два раза меньше трафика и стал дублировать 30% пакетов. Другими словами, мы фокусируемся на формировании понимания эффектов, оказываемых сетью на разрабатываемое ПО.

Таким образом, MADT позволяет:
• создавать реалистичные модели IP-сетей большого масштаба;
• разворачивать поверх них распределённые приложения;
• управлять качеством работы отдельных участков моделируемой сети;
• визуализировать состояние работающего в модели распределённого приложения в реальном времени.

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

Другие доклады секции Тестирование, нагрузочное тестирование