JuniorPerformance Marketer > Google Ads > Тестирование гипотез и запуск изменений
Короткий ответ A/B-тест — это сравнение двух вариантов (объявления, лендинга, настройки) на разделённых случайным образом сегментах аудитории, чтобы понять, какой вариант даёт лучший результат по заранее выбранной метрике, а не полагаться на предположения. Как это работает подробнее Трафик делится на две (или больше) группы, каждая видит свой вариант, а дальше по накопленным данным сравнивают метрики — CTR, CVR, CPA — и делают вывод, какой вариант работает лучше. Уточнение: случайное распределение обычно выполняет сама рекламная платформа или инструмент тестирования (например, встроенный сплит Meta Ads), а не вручную через фильтры аудитории. Пример. Два объявления с разными заголовками в одной группе объявлений Meta Ads получают одинаковый бюджет и аудиторию в течение недели; сравниваются CTR и CPA после накопления минимум нескольких сотен кликов на вариант. Что использовать на практике Практика. Перед запуском важно зафиксировать гипотезу, основную метрику и минимальный срок/объём данных, иначе результат буд
ab-testingad-creatives
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ A/B-тест — это контролируемый эксперимент со случайным распределением пользователей на контрольную и тестовую группы, который позволяет сделать причинный вывод об эффекте изменения. Сравнение «до/после» этого не даёт, так как на метрику могли повлиять сезонность, маркетинг и другие внешние факторы. Как это работает подробнее рандомизация делит похожую по составу аудиторию на группы, единственное систематическое различие между которыми — наличие изменения. Это позволяет приписать разницу в метриках именно ему, а не внешним факторам. Пример кода Что использовать на практике перед запуском фиксируют гипотезу, основную метрику, длительность и ожидаемый эффект. Группы формируются случайно и независимо от характеристик пользователя (устройство, регион, поведение). SQL (PostgreSQL) для простого сравнения групп: Ожидаемый результат: по одной строке на группу A и B с числом пользователей и конверсией. Sanity check — суммарное число пользователей по группам должно быть близко к ожидаемому сплиту рандомиз
ab-testkontrolnaya-gruppa
JuniorDevOps Engineer > Контейнеры и доставка > Мониторинг, логирование и observability
Короткий ответ Alertmanager — отдельный компонент, который принимает уже сработавшие алерты от одного или нескольких серверов Prometheus и занимается их дальнейшей судьбой: группировкой, подавлением дублей, задержкой (inhibition), маршрутизацией в нужный канал (Slack, email, PagerDuty) и управлением периодами "тишины" (silences). Как это работает подробнее сам Prometheus только вычисляет alerting rules (PromQL-условия) и, когда условие истинно дольше заданного for, отправляет алерт по HTTP в Alertmanager. Дальше Alertmanager группирует похожие алерты в одно уведомление, подавляет повторные отправки на период repeat_interval и решает, куда маршрутизировать алерт согласно дереву route. Пример кода Что использовать на практике Практика. разделение ответственности позволяет нескольким инстансам Prometheus отправлять алерты в один общий Alertmanager (или кластер из нескольких для отказоустойчивости), а также централизованно настраивать "тишину" на время планового обслуживания без изменения правил в самом Prometheu
alertmanagermonitoring
JuniorPerformance Marketer > Google Ads > Инструменты и автоматизация
Короткий ответ API — программный интерфейс для получения данных и выполнения разрешённых действий без ручного экспорта из рекламного кабинета. Он позволяет автоматизировать регулярные выгрузки, но требует авторизации, соблюдения квот и проверки того, что запрошенные данные совпадают с нужным срезом. Как это работает подробнее Скрипт или коннектор отправляет аутентифицированный запрос с параметрами периода, метрик и уровня детализации, а платформа возвращает структурированный ответ, часто JSON. Доступ обычно ограничен ролями, токенами, версиями API, лимитами и правилами платформы; кабинет остаётся полезной контрольной точкой. Чтение и запись. Доступ на чтение для отчётности безопаснее, чем права изменять кампании; не запрашивайте лишние разрешения. Сверка. Сравнивайте выгрузку с кабинетом на завершённом периоде и одинаковом часовом поясе. Что использовать на практике Начните с отчётного API. Зафиксируйте поля, даты, аккаунт, фильтры и частоту обновления до разработки. Учитывайте эксплуатацию. Запланируйте обно
apiautomation
JuniorPython Developer > Основы Python > Asyncio и асинхронность
Короткий ответ asyncio — библиотека для написания однопоточного конкурентного кода на основе цикла событий; async def объявляет корутину, а await приостанавливает её выполнение до завершения ожидаемой операции, позволяя циклу событий выполнять другие корутины. Как это работает подробнее Корутина, объявленная через async def, при вызове не выполняется сразу, а создаёт объект-корутину; её нужно запустить через event loop (asyncio.run). await передаёт управление обратно циклу событий на время ожидания операции, и цикл может выполнять другие готовые корутины. Пример кода Что использовать на практике Практика. asyncio эффективен для I/O-bound конкурентности с большим числом одновременных ожиданий, так как позволяет обслуживать тысячи «легковесных» задач в одном потоке без накладных расходов на создание ОС-потоков под каждую. Подводные камни Риски. Считают, что async автоматически ускоряет CPU-bound вычисления — выигрыш есть только при реальном ожидании (I/O); вызывают корутину без await и забывают про предупрежден
asynciocoroutines
JuniorDevOps Engineer > Контейнеры и доставка > Облачные платформы
Короткий ответ Region — географически обособленный набор дата-центров; Availability Zone (AZ) — изолированный дата-центр (или группа) внутри региона с независимым питанием, сетью и охлаждением. Размещение ресурсов в нескольких AZ одного региона защищает от отказа одного дата-центра при низкой сетевой задержке между ними. Как это работает подробнее внутри региона несколько AZ соединены быстрыми приватными каналами, но физически разнесены, поэтому сбой электропитания или оборудования в одной AZ не должен задеть остальные. Пример кода Что использовать на практике Рекомендация. критичные сервисы (веб-серверы, узлы базы данных) размещают минимум в двух-трёх AZ, балансировщик распределяет трафик между ними; у части managed-сервисов есть встроенный режим multi-AZ/региональной репликации. Проверка. при падении AZ eu-west-1a балансировщик должен продолжать направлять трафик на web-2 без простоя всего сервиса. Подводные камни Риск. разворачивать всё в одной AZ «для простоты» и считать это отказоустойчивым Риск. путать
availability-zonescloud-computing
JuniorPython Developer > Основы Python > Эволюция API
Короткий ответ Breaking change — это изменение, после которого существующие клиенты API перестают работать корректно без изменений на своей стороне; его нужно анонсировать заранее, потому что клиентов обычно нельзя обновить мгновенно и одновременно с сервером. Как это работает подробнее К breaking change относятся, например, удаление или переименование поля в ответе, изменение типа поля, смена кода статуса ответа на другой смысл, изменение обязательности параметра. Такие изменения ломают код клиентов, которые полагались на старое поведение, даже если новый вариант «лучше» — для клиента важна предсказуемость контракта, а не абстрактная корректность. Пример кода Что использовать на практике Практика. Перед несовместимым изменением принято: уведомить потребителей API заранее, задать срок перехода, при возможности поддержать старое и новое поведение параллельно (например, через версионирование эндпоинта) и только потом удалить старое. Для внутренних API в рамках одной команды процесс может быть проще (достаточно
apibackward-compatibility
JuniorPerformance Marketer > Google Ads > Юнит-экономика
Короткий ответ Для расчёта берут затраты и число новых клиентов за один период. Ширина состава затрат определяет, отражает ли показатель эффективность рекламы или стоимость привлечения на уровне бизнеса. Как это работает подробнее Узкий CAC = Расход на рекламу / Число новых клиентов; полный CAC = (Расход на рекламу + зарплаты + инструменты + агентство) / Число новых клиентов за тот же период. В некоторых компаниях в CAC также включают стоимость инструментов аналитики и CRM, пропорционально распределённую на привлечение, что делает полный CAC заметно выше узкого рекламного CAC. Пример кода Что использовать на практике Для сравнения каналов применяйте единую методологию и сверяйте именно новых клиентов с CRM; отдельно показывайте медиарасходный и полный CAC. Подводные камни Не сравнивайте рекламный CAC одной команды с полным CAC другой: разные знаменатели и наборы затрат делают числа несопоставимыми.
caccustomer-acquisition
MiddlePython Developer > Основы Python > Кеширование
Короткий ответ Cache stampede — ситуация, когда популярный кешированный ключ истекает, и множество одновременных запросов «проваливаются» в основной источник данных сразу, создавая всплеск нагрузки на БД; предотвращают блокировкой пересчёта, ранним обновлением или джиттером TTL. Как это работает подробнее Без защиты каждый из N одновременных запросов, увидевших cache miss, независимо идёт в БД за одними и теми же данными и независимо записывает результат обратно. Пример кода Что использовать на практике Практика. Решения — распределённая блокировка (только один процесс пересчитывает), stale-while-revalidate (отдавать старое значение во время фонового обновления), случайный разброс (jitter) TTL. Подводные камни Риск. Ставить одинаковый фиксированный TTL для всех записей, закешированных в один момент (например, при прогреве) — массовое синхронное истечение почти гарантирует stampede под нагрузкой.
cache-invalidationcache-stampede
JuniorPython Developer > Основы Python > Надёжность сервисов
Короткий ответ Circuit breaker — паттерн, который временно «отключает» вызовы к зависимости после серии сбоев, сразу возвращая ошибку/fallback без реального обращения, давая зависимости время восстановиться. Как это работает подробнее Breaker отслеживает частоту ошибок; при превышении порога переходит в состояние «открыт» (вызовы блокируются сразу); после паузы переходит в «полуоткрыт» и пробует тестовые вызовы. Пример кода Что использовать на практике Практика. Защищает вызывающий сервис от долгого ожидания таймаутов к уже деградировавшей зависимости и предотвращает усиление нагрузки на неё. Подводные камни Риск. Путать circuit breaker с retry (это разные, дополняющие друг друга механизмы); не предусматривать осмысленный fallback при открытом breaker'е.
circuit-breakerfault-tolerance