1.8 Инструмент записи и воспроизведения трафика Star’s Go записывает реальный трафик онлайн-запросов для тестирования воспроизведения.
1.8 Инструмент записи и воспроизведения трафика Star’s Go записывает реальный трафик онлайн-запросов для тестирования воспроизведения.

Шаринган, китайское название: Шаринган — это своего рода техника ученика в комиксе «Наруто». Он обладает способностью копирования и иллюзий. В мире иллюзий контролируются все факторы, включая время, местоположение, качество и т. д. оператором.

1. Введение

Sharingan — это инструмент записи и воспроизведения трафика, основанный на golang. Он записывает реальный трафик онлайн-запросов для тестирования воспроизведения. Он подходит для реконструкции проекта, регрессионного тестирования и т. д.

1.1. Предыстория

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

  • Стоимость создания и поддержки тестовых примеров для общих тестовых решений (таких как модульное тестирование, системное тестирование и т. д.),Особенно в сложных бизнес-сценариях。「Создайте тестовые данныеКатастрофа
  • Зависимость от многочисленных сторонних сервисов,Среда автономного тестирования нестабильна.,Часто случается, что нижестоящие сервисы недоступны, что приводит к сбою тестов.。「Поддержание затрат на тестовую средувысокий

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

1.2. План

  • Записывайте реальный трафик запросов онлайн-сервисов (включая нисходящий трафик вызовов),Воспроизведение в автономном режиме,Решить задачу построения тестовых данных Катастрофа. 「копировать способность」
  • Соответствие нисходящим вызовам Mock во время воспроизведения,Больше не зависит от конкретных нижестоящих услуг.,Решить проблему высокой стоимости обслуживания тестовой среды. «Способность иллюзии»

1.3. Характеристики

  • Поддерживает запись нисходящего трафика. По сравнению с такими решениями, как tcpcopy и goreplay, воспроизведение не зависит от нисходящей среды.
  • Поддерживает одновременную запись и воспроизведение трафика. Запись мало влияет на обслуживание, а воспроизведение происходит быстрее.
  • Поддерживает сброс времени, удаление шума, пакетное воспроизведение, отчеты о покрытии, анализ общего протокола и многое другое.
  • Поддерживает воспроизведение трафика записи и не загрязняет данные приложения.
  • Не зависит от бизнес-фреймворков и имеет низкий уровень погружения в приложения.

2. Быстрый старт

2.1. Примеры использования.

Язык кода:javascript
копировать
# Step1: Скачать проект Шарингана
$ git clone https://github.com/didi/sharingan.git
$ cd sharingan

# Step2: Используйте настроенную версию golang, на примере go1.13 «Медленно? Попробуйте посетить веб-сайт за границей»
$ sudo sh install.sh go1.13 # Поддержка go1.10 ~ go1.15, ограничено Mac, Linux, AMD64 «Ошибка выполнения? Пожалуйста, проверьте FAQ внизу»
$ export GOROOT=/tmp/recorder-go1.13
$ export PATH=$GOROOT/bin:$PATH

# Step3: Скомпилируйте и запустите реплеер-агент в фоновом режиме "По умолчанию будут заняты порты 3515 и 8998, которые можно изменить".
# [Воспроизведение открытых В документах есть ссылка для прямой загрузки bin-файла], сборка не требуется
$ cd replayer-agent
$ go build
$ nohup ./replayer-agent >> run.log 2>&1 &

# Step4: Скомпилируйте и запустите пример в фоновом режиме «по умолчанию он занимает порт 9999 и может быть изменен».
$ cd ../example
$ go build -tags="replayer" -gcflags="all=-N -l"
$ nohup ./example >> run.log 2>&1 &

# Step5: Открыть страницу воспроизведения
$ Откройте браузер, http://127.0.0.1:8998. # Просто замените неродной IP
$ Выберите точку трафика для воспроизведения на странице для выполнения.          # Встроенные 3 примера трафика, записанные заранее

2.2. Документы доступа.

  • Запишите документ доступа «Сначала запишите»
  • Воспроизведение открытого документа «Пост-воспроизведение»

3. Технические решения

3.1. Разделение модулей.

  • рекордер: модуль записи трафика, записывает трафик в локальное хранилище файлов, отправляет трафик записывающему агенту и т. д.
  • рекордер-агент: агент записи трафика, запускается как отдельный процесс, контролирует соотношение записи, хранение трафика и т. д.
  • replayer: модуль воспроизведения трафика, перенаправление соединений на Mock Server, время Mock, добавление идентификации трафика и т. д.
  • агент-реплейсер: агент воспроизведения трафика, запускаемый как отдельный процесс, может запрашивать трафик, запрашивать/сообщать о шуме, разнице трафика, пакетном воспроизведении, генерировать отчеты о покрытии и т. д.

3.2. Общая схема архитектуры.

3.3. План записи.

  • Измените исходный код golang, чтобы открыть интерфейс Hook для внешнего мира. «Все изменения прошли официальные тест-кейсы»
  • Предоставляет API для подключения сетевых вызовов между различными горутинами. «Общий трафик http, mysql и redis не требует специальных настроек».
  • Предоставьте отдельный агент для фильтрации трафика и контроля пропорций.
  • Дополнительная информация: Принцип реализации записи трафика.

3.4. План воспроизведения.

  • Перенаправление соединения: перенаправить все сетевые вызовы службы Connect на Mock Server. "Идет с вами при установке реплеера-агента"
  • Сопоставление трафика: Mock Server будет сопоставлять возврат на основе фактического нисходящего запроса службы. «Имитация нисходящего вызова»
  • Сброс времени: перемотка времени выполнения программы на время выполнения записи, чтобы избежать помех, вызванных временными факторами.
  • Удаление шума. Предоставьте API для удаления известного шумового трафика, например, идентификатора трассировки, который различен для каждого запроса.
  • Общий анализ протоколов: он может анализировать http, mysql, redis, thrift и другие протоколы для облегчения сравнения различий.
  • Дополнительная информация: Принцип реализации воспроизведения трафика.

4. Путь эволюции

Что касается записи и воспроизведения трафика, мы провели множество внутренних исследований и в основном прошли следующие три этапа:

4.1. Moonlight Box (последовательная запись, последовательное воспроизведение)

Запись: используйте tcpdump для записи трафика, измените уровень маршрутизатора для сериализации запросов и используйте время для разделения запросов.

Воспроизведение: используйте iptables для перенаправления трафика в фиктивную службу, сопоставления запроса и его обратного макета. Поддерживает сброс времени, сравнение трафика и т. д.

Недостатки: Охват записываемого трафика низкий, одновременно можно записать только один запрос. переадресация iptables, серьезные шумовые помехи.

4.2, Fastdev (параллельная запись, последовательное воспроизведение)

Запись: преобразуйте исходный код golang и используйте технологию делегирования goroutine+work для последовательного различения запросов. Принцип отслеживания ссылок

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

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

4.3 Шаринган (параллельная запись, параллельное воспроизведение)

Запись: интерфейс и реализация разделены. Часть преобразования исходного кода golang предоставляет только интерфейс, а конкретная реализация записи обеспечивает поддержку отдельного пакета. Убедитесь, что изменения исходного кода golang прошли официальное тестирование и поддерживают все версии 1.10–1.14, оптимизируя производительность службы записи;

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

5. Дисплей эффектов

5.1. Воспроизведение трафика.

5.1.1. Одиночное воспроизведение.

В ситуациях, когда имеется много сложных нисходящих запросов, поддерживается фильтрация нисходящих протоколов.

5.1.2. Пакетное воспроизведение.

Параллельность пакетного воспроизведения по умолчанию равна 10, которую можно изменить, добавив параметр -parallel.

5.2. Отчет о покрытии.

5.2.1. Общий отчет.

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

5.2.1. Подробности покрытия.

Адрес: https://github.com/didi/sharingan

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

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