Дев контур что это

Что такое «тестовый контур» и откуда взялось это словосочетание?

Иногда приходится слышать выражение «тестовый контур» (в контексте какой-либо тестовой программной среды). Интересна история происхождения этого выражения. Википедия по этому вопросу хранит молчание и гугл тоже.

UPD (перенесено из комментариев): довольно много народа употребляет данный термин и никто не может внятно объяснить откуда он взялся. Тем не менее, наверняка у этого «устойчивого выражения» интересная история

2 ответа 2

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

На терминологию влияет и процесс разработки, которые практикует команда или целая организация. Обычно все программисты разрабатывают и тестируют код на своих компьютерах и имеют всё необходимое окружение для этого, например, локальные версии MySQL, Redis или MongoDB. Если разработка ведётся через Docker, то необходимые сервера запускаются в контейнерах локально.

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

Когда задача завершена программистом, он отправляет код в общий репозиторий, из которого собирается версия проекта, которая на жаргоне называется дев (development). Этот контур позволяет проверить, что программисты ничего не сломали друг у друга, он достаточно нестабилен. Здесь выполняются автоматизированные интеграционные тесты.

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

Когда всё готово, проверенная версия попадает на прод (production), он же контур промышленной эксплуатации.

Что такое контур или среда физически? Зависит от средства разработки и от технологий. Часто это Docker-контейнеры, которые разворачиваются на нескольких виртуальных машинах. Для каждого контура мы создаём несколько виртуалок, и запускаем там очередную версию кода.

Если вы работаете в Azure, вы можете сделать несколько серверов БД, каждый для своего окружения. Такие ресурсы можно сгруппировать, назвав группы dev, test и prod.

Если проект разрабатывается давно, и туда уже невозможно внедрить контейнерную разработку, под каждый контур системные администраторы могут выделить несколько разных физических серверов, управляя ими вручную. Трудоёмки, но такие контуры тоже встречаются, потому что некоторые проекты существуют по 15-20 лет.

Источник

Kubernetes tips & tricks: доступ к dev-площадкам

Мы продолжаем серию статей с практическими инструкциями о том, как облегчить жизнь эксплуатации и разработчикам в повседневной работе с Kubernetes. Все они собраны из нашего опыта решения задач от клиентов и со временем улучшались, но по-прежнему не претендуют на идеал — рассматривайте их скорее как идеи и заготовки, предлагайте свои решения и улучшения в комментариях.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

На этот раз будут рассмотрены две темы, условно связанные одной темой: доступом пользователей к dev-окружению.

1. Как мы закрываем dev-контуры от лишних пользователей?

Перед нами часто стоит задача закрыть за basic auth или за белым списком весь dev-контур (десятки/сотни приложений), дабы туда не могли попасть поисковые боты или просто очень сторонние люди.

Обычно для ограничения доступов каждому Ingress и приложению надо создавать отдельные секреты basic auth. Управлять ими очень проблематично, когда набирается с десяток приложений. Поэтому мы организовали централизованное управление доступами.

Для этого был создан nginx с конфигурацией такого типа:

Далее в Ingress’ах приложений мы просто добавляем аннотацию:

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

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

2. Как мы предоставляем доступ к приложениям внутри Kubernetes в dev-окружении?

… будь то Redis, RabbitMQ, PostgreSQL или любимый PHP-разработчиками Xdebug.

Очень часто, переводя приложения в Kubernetes, для обеспечения лучшей безопасности нам приходится закрывать доступ снаружи и вовсе. И тогда разработчики, которые привыкли «ходить своей IDE» в базу или в Xdebug, испытывают серьёзные трудности.

За время эксплуатации этого решения мы успели его неоднократно расширить. В частности:

Получившаяся админка (см. также на Docker Hub) выглядит очень аскетично:
Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Можно заводить новых юзеров или отзывать старые сертификаты:
Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Для этого мы написали Python-скрипт, который при подключении юзера к OpenVPN, используя логин и пароль, сравнивает хэш в базе GitLab и проверяет его статус (активен ли он).

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

А в конфиге OpenVPN просто указываем следующее:

auth-user-pass-verify /etc/openvpn/auth-user.py via-env
script-security 3
client-cert-not-required

Таким образом, если у клиента увольнялся сотрудник, его просто деактивировали в GitLab, после чего он не сможет подключиться и к VPN’у.

Вместо заключения

В продолжении цикла статей с практическими рецептами компании «Флант» по эксплуатации Kubernetes я раскрою такие темы, как выделение отдельных узлов под конкретные задачи (зачем и как?) и настройка под большие нагрузки служб вроде php-fpm/gunicorn, запущенных в контейнерах. Подписывайтесь на наш блог, чтобы не пропускать обновления!

Источник

Стенд для нагрузочного тестирования: от DEV до PROD

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Содержание

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Меня зовут Василий Кудрявцев, и вот уже 10 лет я занимаюсь нагрузочным тестированием, а из них последние 1,5 года – в компании РТЛабс.

И сегодня мы поговорим не об инструментах или общих подходах (для этого есть курсы – один из крупных веду я, а еще у многих есть коллеги-эксперты и тот самый чатик в телеге на 3400+ участников), а об области, которую обычно обходят стороной или собирают на коленке — тестовые стенды для нагрузочного тестирования.

Здесь, на Госуслугах, мы пока только конструируем мечту каждого нагрузочника — свой отдельный, выделенный, рабочий (!) тестовый стенд. Особенно это мечта актуальна для небольших продуктовых команд.

Тем не менее, за последний год мы увеличили количество проводимых тестов почти в 10 раз и команду раза в два. Где же мы проводим более 1000 нагрузочных тестов в год без отдельного стенда, спросите вы? Ответ: мы использовали все стенды по максимуму, под шум (крики) продуктовых команд! 🙂

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

Договоримся о терминологии

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

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

Тест определения максимальной производительности — ступенчатое повышение нагрузки на систему до достижения этого самого уровня.

Как у нас организована нагрузка

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Инструменты:

Протоколы – наиболее часто это REST-ы и web по http, бывают и скрипты нагрузки на БД / очереди

Запуск тестов в Jenkins

Мониторинг в Grafana + Clickhouse

Для мониторинга генераторов нагрузки — Prometheus

Redis и Postgres для хранения тестовых данных, FTP для больших файлов

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

3+ регулярно нагружаемые крупные системы:

Единый портал государственных услуг (ЕПГУ)

Единая система идентификации и аутентификации (ЕСИА)

Система межведомственного электронного взаимодействия (СМЭВ, шина данных)

…и еще с десяток периодически нагружаемых прикладных систем и сервисов

Основные типы тестов:

Проверка стабильной нагрузки — короткий тест с заданным tps

Стресс-тесты — проверка работы под большой нагрузкой в течение короткого времени

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

Команда инженеров:

1 лид и 4 нагрузочника разного опыта и происхождения, со средним опытом в НТ =

Вернемся к нагрузочным стендам

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

DEV — стенд разработки

UAT — стенд регрессионного функционального тестирования

LT — отдельный стенд нагрузочного тестирования

PROD — стенд на базе инфраструктуры Продуктивного контура

Каждый опишем с нескольких сторон по такой схеме:

Summary — короткое резюме от меня

Жиза — как мы используем этот стенд

Что можно — какие тесты можно проводить

Команда — кто здесь понадобится нагрузочнику, насколько самостоятельно выполнение тестов

Advice — совет напоследок обзора стенда

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

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

Жиза: Не самый активный стенд именно для нагрузки, но супер-массовые новые сервисы сначала тестим здесь — социальные выплаты, сервисы для выборов, онлайн-запись в школы. Конечно же, в микросервисах, особенно часто в кубере. Здесь не проверить какой-нибудь scaling, но 50-70% проблем на данном стенде мы закрывали, хоть пользовались им не так часто, как стоило бы.

Отступление в рамках темы

Отдельного внимания здесь в описании DEV заслуживает наше детище для Системы межведомственного электронного взаимодействия (СМЭВ). Изначально мы планировали собрать стенд LT, но заказчики-разработчики пожелали проверять новые решения и тюнинг/рефакторинг старых здесь и сейчас. У нас вышел эдакий Монстр, которого мы прозвали DEV-LT! По необходимости могли и мощностей накинуть для достижения нужных цифр, но и не ждали отлаженных новых релизов и прочих pipeline-ов для проверки разных гипотез.

В итоге за пару месяцев мы протестили отказоустойчивость при отключении разных сервисов системы, протюнили с десяток компонент и повысили общую производительность системы раза в три (с учётом пост-тестов на других стендах, конечно же). Это был суровый марафон, но глаза горели у всех!

Что можно: стресс-тесты и общая максимальная производительность всего комплекса здесь бессмысленны. Только точечный тюнинг и проверка отдельных компонентов тестами со стабильными потоками (количество открытых соединений / thread-ов) или подачей стабильной нагрузки.

Команда: Если времени мало, то практически в онлайне с разработчиком. Если побольше — в режиме чатика. Очень удобно поработать devops-ом: сделать «кнопку» для разработчика и дать ему «пофрустрировать» самому до желаемого результата. Не забудьте про мониторинг, чтобы он получал удовольствие! Главное вовремя остановить, не доводить до уровня «хочу 100к tps выжать, 12 ночи всего, запускаю ещё тест!»

Pros and cons:

+ экономит время тюнинга на поздних этапах, что особенно актуально для багов по производительности (все мы знаем, они бывают ОЧЕНЬ дорогими)

+ можно запускать «на коленке» и получать реальный value

– не подходит для основательных выводов по максималке / не применить к PROD — нужны дополнительные тесты на других контурах

– стенд обычно шаток и разработчики любят его ломать, а иногда его потом сложно восстановить

– сложно с тестированием интеграций, DEV, как правило, изолирован

Advice: Совет подойдёт и для других стендов — «одно изменение за раз!». Разработчики любят побежать азартно вперёд, и применить много «оптимизаций» между тестами за один раз. Потом приходится часто искать, что именно улучшило или ухудшило производительность. Поэтому лучше стараться делать одно улучшение/изменение за раз и оценивать тестом, хотя бы коротким.

UAT (стенд регрессионного функционального тестирования) — относительно стабильный контур по сборкам, но слабый по железу

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Жиза: С этого стенда мы начинали в РТЛабс проводить регулярное НТ — в данном случае проверка релизов на не-ухудшение производительности. В частности, на небольшом железе мы сравниваем «выдерживание» ступени стабильной нагрузки по основным показателям производительности. Дефектов обычно находится не так много, как хотелось бы, потому что у этого стенда всегда много «но» по сравнению с PROD. И это несмотря на то, что по конфигурации компонентов он к нему ближе, чем любой другой.

Что можно: Лучше проводить тесты стабильной нагрузки 10-60 минут. Длительность зависит от вашей ступени стабильной нагрузки, за которую вы сможете адекватно оценить показатели производительности. Если у вас быстрая система с 100-500+ tps и временем отклика в пределах секунды (шина данных, например), то хватит и коротких тестов. Если что-то пользовательское с множеством сценариев — лучше погонять подольше и заодно оценить надежность.

Команда: Как правило, лучший друг нагрузочника — это функциональщик. В данном случае вдвойне, так как это его стенд! Он подскажет, когда и сборка более-менее стабильна и когда можно поломать стенд тестами. С дефектами тут сложнее, чем на DEV — у нас по крайней мере были наводки и на инфраструктурные сбои, а разбор может быть не таким быстрым, как хотелось бы.

Pros and cons:

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

+ обычно неплохая поддержка со стороны ФТ и сопровождения, так как релизы должны ехать в PROD без простоев. А вы, в том числе, занимаете время подготовки релиза 🙂

– придётся выбирать время для тестов, чтобы не мешать ФТ

– сильную нагрузку целиком на систему не подать ввиду слабости стенда по железу, то есть сложно оценить максимальную производительность в целом

Advice: Не убивайте стенд, пожалейте функциональщиков! Не только проведением нагрузки днём, но и забиванием БД тестовыми или созданными в тестах данными. Проработайте процедуры очистки.

LT (отдельный стенд нагрузочного тестирования)

На какой хватит средств какой построите, такой и будет! Но в любом случае он лучше остальных стендов, потому что СВОЙ.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Summary: Здесь всё понятно — идеальный стенд практически для любых целей НТ. Не надо сидеть по ночам / ждать пока он освободится (в пределах одной тестируемой системы, конечно). В некоторых банках даже построили интеграционные стенды НТ. Правда пока я не видел стенд, выдерживающий 100% нагрузку по профилю с Прода, со всех каналов-систем.

Жиза: Выше я рассказывал о том, как мы применяем стенд DEV-LT. Пока мы видим неплохую пользу в совмещении целей для этого контура с учетом имеющейся инфраструктуры PROD для больших тестов (об этом ниже).

Из опыта других компаний могу сказать, что отдельный контур это действительно долго, дорого и замечательно. Причём для стабильного стенда крупной системы «долго» — это скорее всего минимум год, а «дорого» — не только закупка оборудования, но ещё и отдельная команда админов разного профиля. Ведь у вас небольшой PROD, а значит нужны инженеры СПО, ППО, DBA и т.д.

При этом на других стендах можно и нужно ловить 80-90% проблем. Это значит, что в микросервисной архитектуре огромные стенды становятся всё менее полезными.

Что можно: ВСЁ. Ну, правда. Интеграционные нагрузочные тесты можно проводить с эмуляторами, хорошо идут регрессионные тесты, стресс-тест/максималка/надежность/отказоустойчивость и любые другие, которые вы ещё себе придумаете между релизами.

Команда: Если хотите работать эффективно, а не чинить стенд неделями, когда ребята с PROD / тестовых контуров смогут уделить вам время, то только отдельная команда. Если стенд небольшой, можно не выделять отдельно системных администраторов / DBA на задачи одного этого стенда. Но инженеры ППО точно нужны — системы нужно и поднимать с нуля и поддерживать (поднимать) после регулярных тестов и релизов, которые будут их ломать.

Pros and cons:

+ подходит для всех нужных нагрузочных тестов (с интеграционным НТ может быть сложно, но возможно!)

+ не нужно ждать очередь на стенд, есть время для улучшений / экспериментов

+ можно готовить нужные наборы тестовых данных, тестировать объемы

– дорого и долго — и по подготовке железа, и в поддержке

– команде сопровождения нужно долго набираться опыта

– бывает сложно отслеживать все изменения на PROD / тестовых контурах, чтобы тестовый стенд НТ был актуален

Advice: Не надейтесь, что стенд НТ взлетит быстро, особенно если команда собирается с нуля. Исключения — небольшие и простые системы, по ним и PROD просто и быстро собрать.

И раз уж у вас отдельный стенд — пробивайте получение копии БД с PROD (урезанной, обезличенной), это повысит качество тестирования.

Ещё совет— не делайте прогнозирование / домножение результатов, полученных на стенде НТ, для PROD, если у вас LT сильно меньше по ресурсам. Горизонтальное масштабирование — непростая штука. Да простят меня мастера-архитекторы – иногда позволяю себе «умножить на 2» производительность, полученную на стенде НТ, который в 2 раза слабее Прода по ресурсам, при микросервисной архитектуре и не загруженности всех узлов по метрикам серверов. Можно предположить, что на Прод будет не хуже.

Сравнение производительности простой web-ки на node.js при увеличении ресурсов машины в 2 раза.

Как-то студенты курса по НТ проводили простой эксперимент по оценке влияния повышения ресурсов сервера, на котором крутилась простая веб-страничка c node.js под капотом, практически ничего не делающая. Результат налицо. Теперь храню эту картинку и показываю всем, кто любит «умножать на 10».

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

PROD (стенд на базе инфраструктуры Продуктивного контура) – опасно, но крайне эффективно

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Жиза: Чтобы быть уверенными в высокой доступности новых, серьёзных по нагрузке сервисов, финальные тесты мы проводим здесь. Особенно это актуально, когда у нас мало времени, например, при запуске срочных выплат населению страны последних пары лет.

Пользователи Госуслуг засыпают, а мы собираемся на ночной zoom и аккуратно тестируем на PROD-инфраструктуре. Тюним на месте, записываем изменения конфигов «на лету» себе в тикеты «на утро». Отдельно заказываем новые VM туда, где понимаем, что не успеем дотюниться до запуска сервиса.

Конечно, для этого нужна аккуратная и дотошная подготовка скриптов для очистки мусора после тестов и выверенный чёткий план тестирования с автоматизацией запуска тестов.

Что можно: Конечно, не всё. В первую очередь это стресс-тесты — короткие, точные, до первых узких мест, чтобы затем произвести тюнинг. Можно сразу в онлайне, чтобы не уходить потом на ещё одни работы. Не получится использовать инфраструктуру PROD, если у вас интенсивная пользовательская нагрузка 24/7 и нет микросервисов, которые вы можете изолировать от влияния на пользователей на 99%+.

Для тех, кто по каким-то причинам не хочет в этом участвовать, есть отличный аргумент — или мы сейчас проконтролируем что будет, или будем смотреть на это в онлайне, на живых пользователях и чинить, теряя SLA.

Pros and cons:

+ не только НТ, но и тренировка для команды

+ в нехватке времени можно тюнить на лету (конечно, сохраняя улучшения в репозиториях)

– требуется хорошая подготовка плана и скриптов очистки

– не для каждого сервиса возможно НТ на инфраструктуре PROD

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

Ну и конечно, так как НТ на PROD — это часто ночные работы, не замучайте команду в ночь перед запуском важных сервисов. Если не успеваете, лучше ребятам поспать ночь и с утра уже готовиться к проблемам на PROD, быстрее будут реагировать.

Во всём нужна мера, потому что, как говорил один мой знакомый менеджер: «Работа отнимает всё отведенное на неё время».

Вместо заключения

Как видите, у каждого стенда НТ найдутся свои нюансы, а главное – своя польза. Уже давно прошли те времена, когда подрядчик требовал нагрузочный стенд, а заказчик закупал его месяцами, тратя огромные деньги. С новыми средствами НТ и микросервисной архитектурой тесты можно проводить на разных этапах и на разных стендах достаточно быстро.

Я бы описал рекомендованный путь становления процессов НТ в компании по части стендов так:

UAT – отсюда можно стартовать регрессионное НТ

DEV – для новых сервисов, которые будут нагружены

PROD – когда отдельного стенда НТ нет, а ожидается новая большая нагрузка

LT – когда уже научитесь тестировать, поймете систему и действительно сможете использовать дорогое удовольствие с пользой

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

Пишите в комментариях про ваш опыт использования тестовых стендов для НТ. Буду рад почерпнуть что-то новое, в том числе по поводу плюсов и минусов каждого.

Источник

«Как QA в управлении хранилища данных эволюционировал»

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что это

Часть 1. Прошлое. Переломные моменты

Профессиональную сферу DWH (Data Warehouse, или, по-нашему, хранилище данных) отличает высокая технологичность, а также огромное многообразие используемых решений. Крупные компании строят хранилища с самыми разными инструментами и технологиями, отличаются архитектуры, процессы. Но необходимость идти в ногу со временем постоянно вносит свои коррективы.

Tinkoff.ru не исключение. Мы постоянно совершенствуем свои процессы и стремимся развивать не только внешние, но и внутренние продукты. И на примере хранилища данных я хочу рассказать о том, как эволюционировали наши процессы по обеспечению качества. В этой статье я расскажу о том, как ранее был устроен наш рабочий процесс, с какими проблемами мы столкнулись и какие события стали переломными в эволюции нашего процесса QA.

Но сначала я дам некоторую вводную по основным определениям, которые используются в статье:

Хранилище данных (или Data Warehouse, DWH) — это предметно-ориентированная база данных, позволяющая хранить данные для построения бизнес-отчетности и принятия управленческих решений на основе анализа данных в хранилище.

Задача на доработку хранилища (или пакет) — отдельная директория в системе контроля версий (VCS), содержащая набор файлов, использующихся для изменения метаинформации и физических данных хранилища.

А вот теперь можно приступить к основной части рассказа. Итак, поехали.

Откуда выросли проблемы

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

В рамках flow выделялись три основные функциональные роли:

Что получается на выходе каждого этапа flow — показано на рисунке 2.

Давайте выделим перечень проблем, существовавших на тот момент в реализации процесса:

Ручной сбор пакета разработчиками.

Ручное ревью пакета.

Ручной перенос задач на тест.

Необходимость в синхронизации продуктового и тестового контуров.

Проверки данных без использования автоматизации.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 2. Функциональные роли в DWH (SyA — системный аналитик, DEV — разработчик, QA — инженер по тестированию)

Детальнее остановимся на каждой из проблем.

Ручной сбор пакета

ETL-процесс — это процесс извлечения данных из различных источников (БД, файлы), их дальнейшей очистки и преобразования (фильтрация, агрегация, дедупликация, вычисление дополнительных атрибутов и т. д.) с дальнейшей загрузкой полученного результата в хранилище.

Две основные составляющие, с которыми мы работаем (рисунок 3):

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 3. Составляющие ETL-процесса

Разработчик при получении задачи на доработку хранилища:

С помощью конструктора SAS DIS изменяет логику ETL-процесса.

При необходимости пишет SQL (а иногда и python) скрипты для изменения физических данных.

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

Собирает все доработки в отдельную директорию (рисунок 4) для дальнейшей передачи задачи QA-инженеру.

Вот именно эта директория в VCS и является объектом дальнейшего изучения со стороны QA.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 4. Пример содержимого пакета

Недостатки. Сбор руками неудобен, появляется человеческий фактор: можно что-то упустить при формировании пакета, больше времени разработчика тратится на задачи, не связанные с самой разработкой.

Ручное ревью пакета

Итак, пакет готов: разработчик выполнил все требуемые по ТЗ доработки, сформировал пакет с нужными файлами и готов передать задачу в тестирование. Но стоит ли делать это сразу после завершения работ?

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

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

И вроде все прекрасно, но есть нюансы:

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

Невозможно отследить глазами выполнение абсолютно всех требований.

Ручной перенос задач на тест

На рисунке 5 показано, как выполнялся перенос пакетов на тестовый контур. QA запасался терпением, изучал инструкцию, написанную разработчиком, и руками переносил всю необходимую информацию на тестовый контур. Далее он запускал нужные скрипты из пакета, выполнял прочие действия и, наконец, запускал ETL-процессы.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 5. Перенос задачи на тестовый контур

Очевидно, что некоторые недостатки в текущем подходе присутствуют:

Длительность подготовки тестового окружения.

Человеческий фактор и, как следствие, ошибки.

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

Рутинность и однообразность процесса.

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

Очень много проблем с откатами и перенакатами задач.

Откаты и перенакаты не всегда можно было выполнить — тогда ждали синхронизации.

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

В рамках экосистемы, завязанной на SAS, инструментом для работы с метаинформацией стал SAS Data Integration Studio (SAS DIS). Объекты хранилища (описание баз, ETL-процессов, таблиц и т. д.) разрабатываются в SAS DIS и хранятся на SAS-сервере в виде метаданных. Физически таблицы находятся в базах Greenplum и SAS. Подробнее про технологии, которые используются в нашем хранилище, можно почитать здесь и здесь, а также просто воспользовавшись поиском по нашему блогу на «Хабре» поискать по ключевому слову «DWH».

Но у каждого инструмента есть тот или иной недостаток. У SAS DIS это блокировки метаинформации. SAS DIS устроен таким образом, что при выполнении одновременно нескольких переносов задач на тестовый контур все операции над метаинформацией (импорт, правка, удаление и т. д.) формируют очередь. И, что самое главное, при выполнении каждой такой операции любые другие манипуляции над метаинформацией, даже простой просмотр, будут недоступны для всех пользователей. То есть при получении большой очереди операций работать с метаинформацией долгое время будет просто невозможно.

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

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

Необходимость в синхронизации продуктового и тестового контуров

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

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

Кроме того, QA-инженеры перезатирали данные друг друга, и зачастую восстановление исходного состояния без синхронизации было невозможно. Это происходило из-за того, что часть объектов могла использоваться как источники в одних и как целевые таблицы в других пакетах. Тогда при изменениях метаинформации или физических данных происходил конфликт. Изолировать данные и метаинформацию при условии выполнения модульного и интеграционного тестирования на одном контуре не представлялось возможным.

Синхронизация проводилась достаточно долго, начиналась в пятницу вечером и завершалась в понедельник — при хорошем стечении обстоятельств. Плюс ко всему в процессе возникало много проблем.

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

А теперь поговорим о том, какие проверки и каким образом выполнялись на этом этапе нашей эволюции.

Проверки данных без использования автоматизации

Все проверки качества данных в пакете с доработками хранилища на тестовом контуре носили ручной характер. QA-инженеры проверяли:

корректность данных на отсутствие NULL и дублей в ключевых полях;

соответствие DDL-таблицы на тестовом контуре описанию данной таблицы в модели данных;

наполнение каждого из столбцов таблицы;

соответствие данных в таблице эталонному прототипу;

регресс, сравнение с предыдущей версией таблицы, если объект менялся в рамках текущей доработки.

Кроме того, после выполнения всех вышеуказанных проверок запускались все зависимые объекты хранилища (кроме отчетов, то есть только ETL-процессы), чтобы проверить, не поломала ли доработка ранее работавший функционал. Таких ETL-процессов могло быть очень много плюс при прогрузке можно было бы испортить тестовые данные коллеге и т. д.

Итак, общие минусы ручных проверок:

снижение мотивации сотрудников;

Также были минусы интеграционного тестирования:

зависимость от окружения;

возможные конфликты объектов из разных задач;

Вот с такими проблемами мы сталкивались ранее, и их решение стало важной задачей для нашего дальнейшего развития. Какие же первые шаги были предприняты для решения описанных выше проблем?

Вот с чего началась наша эра

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

Какие же события стали переломными в этой ежедневной борьбе?

Авторелиз

Автонакат

Ручные переносы пакетов на тестовый контур заставляли дергаться глаза даже самых матерых QA-инженеров. С этим нужно было что-то делать, и команда python-разработки нашего управления создала его — авторелиз!

Это была специальная утилита, позволяющая переносить задачи на соответствующие контуры (dev/test/prod), причем интерфейс взаимодействия с ней был очень простой:

SSH-подключение к серверу;

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

Это позволило автоматизировать процесс переноса задач, но проблемы с зависанием меты при нескольких параллельных переносах задач на тестовый контур остались актуальными.

Демоны

Демоны — наши внутренние сервисы для улучшения и автоматизации процессов.

Валькирия — очищает изолированные тестовые окружения по тем задачам, что уже протестированы. То есть попросту удаляет все таблицы с данными на тестовом контуре по задачам со статусом testing done. Запускается демон ежедневно в 22:00, и уже на основе результатов работы этого демона Харон будет очищать буфер.

Харон — удаляет из общего буфера таблицы, которые не используются в задачах, ежедневно в 23:00. Это позволяет экономить место на тестовом контуре и не тратить рабочее время на очистку контура вручную.

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

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

При описании демонов использовались такие понятия, как буфер, изолированное тестовое окружение. Давайте разберемся, что это такое, и познакомимся с нашей разработкой — vial.

Модульное тестирование

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

Чтобы в процессе тестирования отдельные задачи не конфликтовали между собой и тестовое окружение дольше оставалось актуальным, был придуман механизм пробирок, или vial-контуров.

Что же это такое — давайте разберем более подробно.

Vial (или «пробирка») — изолированное окружение на тестовом контуре, включающее в себя физические данные только дорабатываемых и создаваемых по задаче объектов. При этом остальные объекты хранилища никак не затрагиваются, и любые работы с данными в пробирке не влияют на остальное хранилище.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 7. Как соотносятся vial и test

С точки зрения хранения данных схема стала такой, как показано на рисунке 7: в базе данных тестового контура создаются отдельные схемы с префиксом preXXXXX (pre — префикс проекта, XXXXX — номер задачи в Jira) и в этих схемах хранятся все необходимые для модульного тестирования данные.

При построении пробирки с продуктового контура берутся бэкапы таблиц источников (Source на рисунке 8) для каждого дорабатываемого в данной задаче ETL-процесса. Причем бэкапы берутся консистентными.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 8. Как формируется vial

А для целевых таблиц ETL-процессов (Target на рисунке 8) берется целых два бэкапа:

За одну и ту же дату, что и таблицы источники, — today.

За предыдущую дату — yesterday.

Зачем берутся два бэкапа?

Для ответа на этот вопрос разберем, как формируются данные на проде.

ETL-процессы хранилища ежедневно запускаются для прогрузки свежих данных из источников в целевые таблицы. Что при этом происходит:

Перед запуском ETL-процесса в источниках накапливаются свежие данные.

В целевой таблице ETL-процесса, Target(yesterday) на рисунке 9, находятся данные с актуальностью на вчера (или на дату прошлого запуска ETL-процесса, если процесс может запускаться несколько раз за сутки).

Далее ETL-процесс запускается и данные в целевой таблице приобретают актуальность на ту же дату, что и данные в источниках, — Target(today).

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

С принципом работы ETL-процессов на проде ознакомились, теперь перейдем к созданию виала.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 9. Механизм обновления хранилища на проде

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

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 10. Принцип формирования vial

На виале при тестировании новой версии этого ETL-процесса мы будем прогружать данные из тех же самых источников — рисунок 10. Но для этого сначала нужно скопировать данные из Target(yesterday)-бэкапа в целевую таблицу на виале.

Теперь наш ETL-процесс готов для прогрузки.

Если кроме изменения метаинформации в задаче есть правка физических данных, то выполняются соответствующие скрипты. Новая метаинформация деплоится на тестовый сервер, и ETL-процесс запускается.

По аналогии с продом процесс отработал на новых данных и сформировалась новая версия целевой таблицы. И вот именно она будет сравниваться с Target(today)-бэкапом на корректность проведенных доработок.

Данная проверка важна, поскольку позволяет отловить:

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

Ошибочные зануления или, наоборот, заполнения атрибутов.

Любые изменения в физических данных, которые не ожидались по ТЗ в конкретной задаче.

Таким образом, для выполнения регресса у нас есть все необходимые данные: целевые таблицы и старого, и нового процесса, прогруженных на одинаковых входных данных. Регресс считаем корректным, если таблицы на виале и таблицы на проде отличаются только выполненными по ТЗ доработками (рисунок 11).

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 11. Регресс

Итоговая общая концепция vial-контура изображена на рисунке 12.

Дев контур что это. Смотреть фото Дев контур что это. Смотреть картинку Дев контур что это. Картинка про Дев контур что это. Фото Дев контур что этоРисунок 12. Общая концепция vial

И что же нам дал vial?

Во-первых, отпала необходимость в синхронизациях. Данные и метаинформация легко стягиваются с продуктового контура точечно для каждой задачи, и это не требует огромных затрат, да и при порче данных достаточно стало перенакатить задачу на виал — и всё! Никаких долгих, муторных ручных откатов.

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

Казалось бы, вот оно — счастье, живи и радуйся! Live-контур-то зачем было придумывать?

Оказывается, не для всех ETL-процессов такая схема регрессионного тестирования подходит. Дело в том, что во многих ETL-процессах источники обновляются гораздо чаще, чем раз в сутки, это так называемые реплики. И в случае с репликами, пока мы перенесем задачу на vial-источники, успеют обновиться и данные в целевой таблице, пробирки будут существенно отличаться от бэкапа, отработавшего еще на прошлой версии источников.

И вот тут на помощь приходит live.

Задача данного контура — прогнать на тех же самых данных, что использовались при создании пробирки на vial, старую версию ETL-процесса. Рассинхрон данных в источниках исключается, и, таким образом, расхождения при сравнении старой и новой целевой таблицы ETL-процесса будут только в случае ошибочной логики или, например, всплывшей неоднозначности — один и тот же SQL-запрос при нескольких запусках возвращает разный результат.

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

Итак, подытожим. У нас был единственный тестовый контур (test), на котором выполнялось и модульное, и интеграционное тестирование. Причем при выполнении модульного тестирования объекты не были изолированы (да, так получилось) и мы много страдали.

Проблема была решена созданием отдельных изолированных тестовых окружений на vial, а также контура для проведения регресса — live. Таким образом, test перестал использоваться для модульного тестирования.

А что же с ним стало?

Test стал использоваться исключительно в качестве тестового контура для проверки интеграции.

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

Поскольку все зависимости мы отслеживали с помощью инстанса (дерево взаимосвязей всех ETL-процессов хранилища), для интеграционного тестирования мы поддерживали мету теста в актуальном состоянии. Сами же интеграционные тесты были автоматизированы. Другого инструмента отслеживания зависимостей не было, поэтому отказаться от теста мы не могли.

Авточекер

Авточекер был первым шагом в автоматизации тестирования хранилища. Ряд проверок для интеграционного тестирования был описан в виде функций на python. Далее в сценарий переноса задачи на интеграционный контур была добавлена опция запуска специального шага сценария, на котором и выполнялись эти функции.

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

Время подводить предварительные итоги.

Проблемы на данном этапе

Итак, на текущем этапе мы запустили авторелиз и изолированные тестовые окружения, а также авточекер. Благодаря им была решена проблема ручного переноса задач, а также сделан первый шаг в автоматизации тестирования.

Но по-прежнему остались проблемы:

Ручной сбор пакета разработчиками.

Необходимость в синхронизации продуктового и тестового контуров.

Ручное ревью пакета.

Недоступность операций над метаинформацией при возникновении очереди (изначально выделена не была, но по ходу статьи упоминалась).

Для тестирования интеграции используется отдельный тестовый контур — test.

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

Спасибо, заходите почитать про наше хранилище!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *