1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-diffy

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
sbt
Loading...
README.md

Twitter приняла решение архивировать этот проект, так как он был построен на устаревшей технологической стеке, что делает его непрактичным для поддержки в текущем виде. Кроме того, мы заново разрабатываем этот проект внутренне, чтобы адаптировать его к новым сценариям использования для проверки наших услуг. По мере того, как мы будем развивать эти новые подходы, мы будем переоцёживать, как и когда следует перерелизировать эти новые решения как открытые исходные коды. Спасибо за ваше понимание. Мы больше не будем принимать pull requests или отвечать на issues для этого проекта.

Обратите внимание, что @puneetkhanduri, оригинальный автор этого проекта и бывший сотрудник Twitter, поддерживает собственную версию этого проекта, названную Opendiffy.

Diffy

GitHub license Build status Coverage status Project status Gitter Maven Central

Что такое Diffy?Diffy находит потенциальные ошибки в вашей службе, используя запущенные экземпляры вашего нового кода и вашего старого кода параллельно. Diffy действует как прокси и многоканально передает все запросы, которые он получает, каждому из запущенных экземпляров. Затем он сравнивает ответы и отчет о любых регрессиях, которые могут возникнуть из этих сравнений. Основная идея Diffy заключается в том, что если два экземпляра службы возвращают "похожие" ответы для достаточно большого и разнообразного набора запросов, то эти два экземпляра можно рассматривать как эквивалентные, и новая реализация не содержит регрессий.

Для более подробного анализа Diffy ознакомьтесь с этой статьей.## Как работает Diffy?

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

  1. Кандидатный экземпляр, запущенный вашим новым кодом
  2. Основной экземпляр, запущенный вашим последним известно-хорошим кодом
  3. Вторичный экземпляр, запущенный тем же известно-хорошим кодом, что и основной экземпляр

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

  1. Чистые различия, наблюдаемые между кандидатом и основным экземплярами.
  2. Ненадёжный шум, наблюдаемый между основным и вторичным экземплярами. Поскольку оба этих экземпляра запущены известно-хорошим кодом, вы должны ожидать, что ответы будут согласованными. Если нет, ваша служба может иметь ненадёжное поведение, что является ожидаемым.

Топология Diffy

Diffy измеряет, насколько часто основной и вторичный экземпляры не согласуются друг с другом по сравнению с тем, насколько часто основной и кандидат не согласуются друг с другом. Если эти измерения примерно одинаковы, то Diffy определяет, что нет ничего не так и что ошибку можно игнорировать.## Как начать?

Запуск примера

Скрипт example.sh, включённый здесь, собирает и запускает примерные серверы, а также экземпляр Diffy. Убедитесь, что следующие порты доступны (9000, 9100, 9200, 8880, 8881, & 8888) и запустите ./example/run.sh start.

Как только ваш локальный экземпляр Diffy будет развернут, вы отправите ему несколько запросов, таких как curl --header "Canonical-Resource: Json" localhost:8880/json?Twitter. Затем вы можете перейти в ваш браузер по адресу http://localhost:8888, чтобы увидеть, какие различия наблюдаются между нашими примерными экземплярами.

Дополнительная информация

Это было круто, но теперь вы хотите сравнить старую и новую версии своей собственной службы. Вот как вы можете начать использовать Diffy для сравнения трёх экземпляров вашей службы:

  1. Разверните ваш старый код на localhost:9990. Это ваш основной экземпляр.

  2. Разверните ваш старый код на localhost:9991. Это ваш второй экземпляр.

  3. Разверните ваш новый код на localhost:9992. Это ваш кандидат.

  4. Скачайте последнюю версию бинарного файла Diffy с Maven Central или соберите свой собственный из исходного кода с помощью ./sbt assembly.

  5. Запустите бинарник Diffy с помощью следующих параметров командной строки:

    java -jar diffy-server.jar \
    -candidate=localhost:9992 \
    -master.primary=localhost:9990 \
    -master.secondary=localhost:9991 \
    -service.protocol=http \
    -serviceName=My-Service \
    -proxy.port=:8880 \
    -admin.port=:8881 \
    -http.port=:8888 \
    -rootUrl='localhost:8888'
  6. Отправьте несколько тестовых запросов к вашему экземпляру Diffy на его прокси-порту: ``` curl localhost:8880/ваш/путь/к/приложению?с=параметрами_запроса

  7. Обратите внимание на появление различий в вашем браузере по адресу http://localhost:8888.

Использование Diffy с Docker

Вы можете получить официальный образ Docker с помощью docker pull diffy/diffy

И запустить его с помощью

docker run -ti \
  -p 8880:8880 -p 8881:8881 -p 8888:8888 \
  diffy/diffy \
    -candidate=localhost:9992 \
    -master.primary=localhost:9990 \
    -master.secondary=localhost:9991 \
    -service.protocol=http \
    -serviceName="Test-Service" \
    -proxy.port=:8880 \
    -admin.port=:8881 \
    -http.port=:8888 \
    -rootUrl=localhost:8888

Теперь вы должны иметь возможность обращаться к:

  • http://localhost:8888 для просмотра веб-интерфейса
  • http://localhost:8881/admin для административной консоли
  • Использовать порт 8880 для отправки запросов к API

Для сборки из исходного кода вы можете запустить docker build -t diffy .

Часто задаваемые вопросы

По причинам безопасности POST, PUT, DELETE по умолчанию игнорируются. Добавьте -allowHttpSideEffects=true к вашим аргументам командной строки для включения этих глаголов.

HTTPS

Если вы пытаетесь запустить Diffy через HTTPS API, требуемая конфигурация:

-service.protocol=https

И в случае, если порт HTTPS отличается от 443:

-https.port=123

Лицензия

Разрешено на условиях лицензии Apache License, Version 2.0 («лицензия»); вы не можете использовать этот софт, если вы не подчиняетесь условиям Лицензии.В соответствии с применимым законом или письменным соглашением, программное обеспечение, распространённое в соответствии с Лицензией, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ВОЗМОЖНОСТИ, как явных, так и подразумеваемых. См. Лицензию для конкретного языка, регулирующего права и ограничения, предусмотренные Лицензией.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-diffy.git
git@api.gitlife.ru:oschina-mirror/mirrors-diffy.git
oschina-mirror
mirrors-diffy
mirrors-diffy
master