Шаринган, китайское название: Шаринган — это своего рода техника ученика в комиксе «Наруто». Он обладает способностью копирования и иллюзий. В мире иллюзий контролируются все факторы, включая время, местоположение, качество и т. д. оператором.
Sharingan — это инструмент записи и воспроизведения трафика, основанный на golang. Он записывает реальный трафик онлайн-запросов для тестирования воспроизведения. Он подходит для реконструкции проекта, регрессионного тестирования и т. д.
С развитием микросервисной архитектуры зависимости между сервисами становятся все более сложными, а тестирование программного обеспечения также сталкивается с новыми проблемами: частые обновления системы, многочисленные зависимости сервисов и т. д.
Для этого нам необходимо разработать набор инструментов для смягчения вышеуказанных проблем.
# 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 примера трафика, записанные заранее
Что касается записи и воспроизведения трафика, мы провели множество внутренних исследований и в основном прошли следующие три этапа:
Запись: используйте tcpdump для записи трафика, измените уровень маршрутизатора для сериализации запросов и используйте время для разделения запросов.
Воспроизведение: используйте iptables для перенаправления трафика в фиктивную службу, сопоставления запроса и его обратного макета. Поддерживает сброс времени, сравнение трафика и т. д.
Недостатки: Охват записываемого трафика низкий, одновременно можно записать только один запрос. переадресация iptables, серьезные шумовые помехи.
Запись: преобразуйте исходный код golang и используйте технологию делегирования goroutine+work для последовательного различения запросов. Принцип отслеживания ссылок
Воспроизведение: используйте фиктивную библиотеку для перенаправления системного вызова подключения и пересылки трафика в фиктивную службу. Поддерживает панель мониторинга, удаление шума и т. д. принцип имитации обезьяны
Недостатки: интерфейсы и реализации записи смешаны, и сложно поддерживать несколько версий golang. Параллельное воспроизведение не поддерживается. Трафик не может быть проксирован на этапе запуска, и трафик запланированных задач серьезно пострадает.
Запись: интерфейс и реализация разделены. Часть преобразования исходного кода golang предоставляет только интерфейс, а конкретная реализация записи обеспечивает поддержку отдельного пакета. Убедитесь, что изменения исходного кода golang прошли официальное тестирование и поддерживают все версии 1.10–1.14, оптимизируя производительность службы записи;
Воспроизведение: добавление идентификации трафика для поддержки одновременного воспроизведения; поддержка проксирования трафика на этапе запуска; использование настроенной версии golang для устранения помех трафика запланированных задач; сброс времени больше не зависит от локальных файлов и поддерживает отдельное развертывание агента воспроизведения; разбор протокола.
В ситуациях, когда имеется много сложных нисходящих запросов, поддерживается фильтрация нисходящих протоколов.
Параллельность пакетного воспроизведения по умолчанию равна 10, которую можно изменить, добавив параметр -parallel.
Отчет о покрытии поддерживает накопление результатов покрытия, то есть поддерживает унифицированное формирование результатов покрытия после многократного одиночного воспроизведения и пакетного воспроизведения.
Адрес: https://github.com/didi/sharingan
Пользователи сети могут продолжать изучать новые функции.