MiddlePython Developer > Основы Python > WSGI, ASGI и серверы приложений
Короткий ответ Для CPU-bound нагрузки число воркеров выбирают близким к числу ядер (формула 2*CPU+1 как отправная точка), а для I/O-bound асинхронного приложения важнее, что один event loop может обслуживать много соединений без блокировки, поэтому большое число воркеров не ускоряет ожидание внешних сервисов. Как это работает подробнее каждый UvicornWorker — отдельный процесс с собственным event loop; GIL не даёт параллельно исполнять байткод Python в потоках одного процесса, поэтому параллелизм для CPU-bound ограничен числом процессов. Пример кода Что использовать на практике Рекомендация. начинают с workers = CPU_cores и нагрузочно тестируют с реалистичным профилем; для смешанной нагрузки тяжёлые вычисления выносят в отдельные процессы (Celery), а не раздувают число ASGI-воркеров. Подводные камни Риск. ставить огромное число воркеров на машине с малым числом ядер — приводит к избыточному потреблению памяти и конкуренции за CPU; не учитывать, что блокирующий вызов внутри async-обработчика блокирует весь even
application-servergunicorn
SeniorDevOps Engineer > Контейнеры и доставка > Диагностика сети
Короткий ответ Единого готового рецепта нет: баланс между объёмом постоянно собираемых диагностических данных (трейсинг, сэмплированные дампы трафика, детальные метрики соединений) и их стоимостью (нагрузка на CPU/диск/сеть, объём хранения) зависит от критичности сервиса, частоты проблемы и готовности организации инвестировать в постоянно работающую диагностическую инфраструктуру ради проблем, которые проявляются редко и непредсказуемо. Как это работает подробнее Проблема, которую нельзя воспроизвести по требованию, требует перехода от реактивной диагностики (запустить tcpdump после того, как проблема уже случилась) к проактивному постоянному сбору сигналов низкой стоимости, которые можно детализировать после факта: агрегированные метрики по соединениям (ss-статистика, счётчики ретрансмиссий TCP из /proc/net/snmp или netstat -s), распределённый трейсинг запросов с таймингами на каждом хопе, и опционально — постоянно работающий сэмплированный захват трафика (например, только заголовки, с ротацией) на критичных
networkingobservability
SeniorSMM Manager > Общее > Рекламные платформы и медиазакупка
Короткий ответ Нужен регулярный цикл (например, еженедельный или двухнедельный) с чёткими ролями, единым бэклогом гипотез с приоритизацией и единой системой учёта результатов тестов, чтобы выводы не терялись и не повторялись. Как это работает подробнее системный процесс тестирования превращает разовые эксперименты в накопленную базу знаний о том, что работает для конкретной аудитории и продукта, снижая зависимость от интуиции отдельных специалистов. Что использовать на практике Подход. важно заранее согласовать объём бюджета, выделяемый именно на тестирование, а не на масштабирование уже проверенных гипотез, и минимальный порог значимости результата перед тем, как считать гипотезу подтверждённой или отклонённой. Пример. Команда вводит процесс — 15% месячного бюджета зарезервировано под тест новых гипотез, еженедельный созыв с разбором результатов, общая таблица гипотез со статусами «подтверждена/отклонена/требует повтора». За квартал накоплено 40 задокументированных тестов, из которых 12 подтверждённых гипоте
campaign-optimizationcreative-testing
JuniorPython Developer > Основы Python > Git и командная работа
Короткий ответ Конфликт возникает, когда Git не может автоматически объединить изменения в одном и том же участке файла из двух веток; разрешение — открыть файл, выбрать нужные строки между маркерами <<<<<<</=======/>>>>>>>, убрать маркеры, протестировать результат и закоммитить его. Как это работает подробнее при merge/rebase Git построчно сравнивает версии файла относительно общего предка; если один и тот же диапазон строк изменён в обеих ветках по-разному, автоматическое слияние невозможно, и Git вставляет конфликтные маркеры. Пример кода Что использовать на практике Рекомендация. нужно открыть файл, понять смысл обеих версий, собрать корректный итоговый код, удалить все маркеры, прогнать тесты/линтер, затем git add <file> и git commit (для merge) или git rebase --continue. git status подсказывает, какие файлы ещё в конфликте. Подводные камни Риск. закоммитить файл, не удалив маркеры конфликта; слепо брать «свою» или «чужую» версию через git checkout --ours/-
branchinggit
SeniorDevOps Engineer > Контейнеры и доставка > Безопасность Linux
Короткий ответ Единого шаблона нет: модель зависит от того, какие реальные системные привилегии нужны конкретному сервису (например, только бинд на порт ниже 1024, или доступ к конкретным устройствам), и решение всегда балансирует между максимальным ограничением (лучшая защита при компрометации) и операционной сложностью настройки/отладки более строгих ограничений. Как это работает подробнее Классический подход «запускать всё под root для простоты» даёт процессу полный набор привилегий ядра; правильная практика — выделенный непривилегированный сервисный пользователь, Linux capabilities (например, CAP_NET_BIND_SERVICE вместо полного root, чтобы разрешить бинд на привилегированный порт) и systemd sandboxing-директивы (ProtectSystem, ProtectHome, PrivateTmp, NoNewPrivileges, ReadOnlyPaths, CapabilityBoundingSet), которые ограничивают видимость файловой системы, запрещают получение новых привилегий через SUID-бинарники и урезают набор системных вызовов через SystemCallFilter (seccomp). Пример кода Что использоват
least-privilegelinux
SeniorDevOps Engineer > Контейнеры и доставка > Балансировка нагрузки
Короткий ответ Готового универсального решения нет: степень избыточности (active-active с несколькими живыми дата-центрами одновременно против active-passive с холодным/тёплым резервом) и конкретные механизмы (Anycast, GeoDNS, глобальный L7-балансировщик, репликация состояния между ДЦ) должны выбираться исходя из целевого RTO/RPO, бюджета на дублирующую инфраструктуру и того, насколько приложение вообще готово к работе из нескольких дата-центров одновременно (stateless или stateful с репликацией данных). Как это работает подробнее При active-passive схеме балансировщик и DNS в резервном ДЦ большую часть времени простаивают, включаясь только при обнаружении отказа основного ДЦ (через health checks на уровне DNS или специального failover-контроллера), что проще в эксплуатации, но даёт более долгий RTO (время на обнаружение отказа плюс время на реальное переключение трафика и прогрев резерва); при active-active с Anycast или глобальным L7-балансировщиком трафик распределён между дата-центрами постоянно, и при от
failoverhigh-availability
SeniorDevOps Engineer > Контейнеры и доставка > Архитектура платформы
Короткий ответ Однозначного ответа нет: стратегия зависит от критичности и профиля нагрузки каждой команды (задержко-чувствительные онлайн-сервисы против фоновых batch-задач), допустимого уровня переподписки по CPU/памяти и готовности организации инвестировать в мониторинг и автоматическое масштабирование; решение всегда балансирует между стоимостью простаивающих зарезервированных ресурсов и риском деградации при overcommit. Как это работает подробнее Переподписка означает, что сумма заявленных requests/limits процессов превышает физическую ёмкость хоста, в расчёте на то, что не все сервисы используют пиковые значения одновременно; cgroups позволяют реализовать это через комбинацию soft-лимитов (requests/CPUWeight/MemoryHigh), которые гарантируют минимум и allow burst за счёт простаивающих соседей, и hard-лимитов (limits/CPUQuota/MemoryMax), которые защищают от полного исчерпания ресурсов хоста одним сервисом; степень overcommit по CPU обычно выше, чем по памяти, так как память нельзя 'отобрать' у процесса бе
cgroupslinux
SeniorDevOps Engineer > Контейнеры и доставка > Маршрутизация
Короткий ответ Единственно правильной схемы сегментации не существует: решение зависит от требований к изоляции между средами (регуляторные требования, риск человеческой ошибки при доступе к прод-данным из staging), объёма межсредового трафика и бюджета на NAT/peering-инфраструктуру, и должно обсуждаться с учётом конкретных рисков организации, а не копироваться как типовой шаблон. Как это работает подробнее Разделение сред на отдельные VPC/подсети с явно описанными правилами маршрутизации и файрвола снижает риск, что ошибка конфигурации или инцидент безопасности в менее критичной среде (staging) затронет продакшен; VPC peering или транзитные шлюзы дают прямую маршрутизацию между избранными сетями без прохождения через публичный интернет, а NAT gateway обеспечивает исходящий доступ приватных ресурсов в интернет без прямой маршрутизируемости извне, что уменьшает поверхность атаки, но добавляет точку с ограниченной пропускной способностью и дополнительной стоимостью по трафику. Пример кода Что использовать на пр
ipnat
SeniorDevOps Engineer > Контейнеры и доставка > Балансировка нагрузки
Короткий ответ Нет единственно верной стратегии: выбор между blue-green (мгновенное переключение всего трафика между двумя полными окружениями) и canary (постепенное увеличение доли трафика на новую версию) зависит от стоимости содержания второго полного окружения, скорости обнаружения проблем через метрики и допустимого радиуса поражения при неудачном релизе, и требует явного обсуждения с владельцами продукта критериев успешного/неуспешного релиза. Как это работает подробнее Blue-green переключает весь трафик на новую версию сразу после того, как health checks на новом окружении подтвердили готовность, что даёт простой и быстрый откат (просто переключить балансировщик обратно), но не защищает от проблем, которые проявляются только под реальной production-нагрузкой и не отлавливаются health check; canary направляет небольшую, постепенно растущую долю трафика на новую версию, позволяя сравнивать реальные метрики ошибок/задержек старой и новой версии до полного переключения, но требует более сложной настройки б
blue-greencanary
SeniorDevOps Engineer > Контейнеры и доставка > TLS
Короткий ответ Однозначного решения нет: выбор между ручным управлением, ACME-автоматизацией для внешних сертификатов и выделенным внутренним CA с короткоживущими сертификатами для mTLS зависит от числа сервисов, регуляторных требований, зрелости команды в вопросах PKI и допустимого риска простоя при сбое самой системы выдачи сертификатов. Как это работает подробнее TLS-сертификаты имеют ограниченный срок действия, и при масштабе в десятки и сотни сервисов ручное отслеживание сроков становится ненадёжным источником инцидентов; для mTLS между внутренними сервисами дополнительно нужен собственный центр сертификации (internal CA) или интеграция с системой вроде SPIFFE/SPIRE или Vault PKI, которая умеет выпускать короткоживущие сертификаты автоматически и ротировать их прозрачно для приложений, снижая окно, в течение которого скомпрометированный сертификат остаётся действительным. Пример кода Что использовать на практике Практика. для внешних сертификатов (публичные домены) используют ACME-автоматизацию (Let's En
certificate-rotationcryptography