Happy Devops — сообщество адекватных инженеров – Telegram
Happy Devops — сообщество адекватных инженеров
1.91K subscribers
182 photos
8 videos
2 files
298 links
Сообщество адекватных инженеров | Все про DevOps и эксплуатацию.

Культура, инструменты, подходы и решения

Живо общаемся (чат): https://news.1rj.ru/str/+eNGNnbY_2mVkZTEy

По всем вопросам в бота: @HDFeedBackBot
Web: https://happydevops.ru
Download Telegram
Книга "Apache Kafka" от O'Reilly — не просто очередной гайд по популярной технологии. За сухим названием прячется настоящая библия распределенных систем и потоковой обработки данных.

Авторы не стали пересказывать документацию — они препарировали Kafka до винтика. От базовых концептов через внутреннее устройство к масштабированию и отказоустойчивости. А главное — без воды и абстрактных рассуждений. Сразу в бой: архитектура, паттерны, граничные случаи и подводные камни.

Отдельный респект за главу про консистентность и гарантии доставки сообщений. На пальцах разложили, почему at-least-once delivery — не серебряная пуля, и как выбирать между надежностью и производительностью. Да и вообще, книга отлично показывает trade-offs в распределенных системах.

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

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

Короче, must read для тех, кто работает с high-load и распределенными системами. Даже если вы не используете Kafka, принципы и паттерны из книги пригодятся в любой современной архитектуре.

🏴‍☠️ @happy_devops
8
База данных для тех, кто устал от выбора базы данных

На дворе двадцатые годы, а мы до сих пор страдаем при выборе базы данных. MySQL? PostgreSQL? MongoDB? А может Redis? И каждый вендор кричит, что именно его решение — самое быстрое, масштабируемое и вообще единственно верное.

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

Круто, что создали его не маркетологи, а профессора из Университета Карнеги-Меллона. Они собрали исчерпывающую информацию о 250+ базах данных — от динозавров вроде IBM DB2 до молодых проектов типа CockroachDB.

За каждой статьей стоят пруфы: научные статьи, технические спецификации, реальные бенчмарки. Никакого "мы самые быстрые" без пруфов. И самое вкусное — интерактивные сравнения. Можно выбрать несколько баз и сравнить их по десяткам параметров. Прям мечта для технического обоснования!

И совет напоследок: не ведитесь на хайп. Загляните на dbdb.io перед тем, как притащить очередную модную NoSQL базу в продакшен. Сэкономите себе пару седых волос.

🏴‍☠️ @happy_devops
5🔥4👍3
SSH-конфиг: 10 трюков для продвинутых админов ⚡️

SSH — инструмент, с которым девопс проводит полжизни. Грамотный конфиг сделает эту жизнь приятнее. Собрал настройки, которые реально экономят время в повседневной работе.

Host позволяет создавать шаблоны для групп серверов. Звездочка в имени хоста автоматически подставит нужный домен и пользователя для всех подходящих машин:
Host web-*
HostName %h.prod.company.com
User deployer


ProxyJump открывает прямой путь к серверам за бастионами. Одна строчка заменит три-четыре команды для прыжков между хостами:
Host target
ProxyJump jumphost1,jumphost2


ForwardAgent избавит от копирования ключей на промежуточные серверы. SSH-агент прокинет локальные ключи по всей цепочке хостов:
Host staging
ForwardAgent yes
AddKeysToAgent yes


LocalForward сделает удаленные сервисы локальными. База данных, Redis, Prometheus — всё станет доступно как localhost:
Host db
LocalForward 5432 db.internal:5432


ControlMaster экономит время на повторных подключениях. Первая сессия станет мастером для всех следующих — они подключатся мгновенно:
Host *
ControlMaster auto
ControlPath ~/.ssh/ctrl-%C


Compression спасет при работе через медленный VPN. Сжатие трафика ускорит отклик в несколько раз:
Host slow
Compression yes
CompressionLevel 9


IdentitiesOnly прекратит путаницу с ключами. SSH будет использовать только указанный ключ, игнорируя все остальные:
Host github.com
IdentitiesOnly yes
IdentityFile ~/.ssh/github


ServerAliveInterval сохранит соединение активным. Незаметные пинги не дадут серверу закрыть сессию по таймауту:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3


Match добавит гибкости в настройки. Запретите рут-доступ в нерабочее время или смените порт для определенных IP:
Match exec "date +%H | grep -q '1[7-9]'"
PermitRootLogin no


RemoteForward расшарит локальные сервисы наружу. Два способа пробросить порт 80 на удаленный сервер — через конфиг или через ключ:
Host devbox
RemoteForward 8080 localhost:80
GatewayPorts yes

# или через ключ при подключении:
ssh -R 8080:localhost:80 devbox


Конфиг собирается в ~/.ssh/config с правами 600. И помни — SSH из коробки даст тебе намного больше, чем кажется на первый взгляд.

🏴‍☠️ @happy_devops
👍113🔥3
Психологическое здоровье в IT: табу, которое пора нарушить

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

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

А ведь базовые практики заботы о себе не требуют сверхчеловеческих усилий. Включите в календарь 10-минутные перерывы между созвонами. Настройте уведомления — пусть рабочий мессенджер молчит после семи вечера (если вы не на oncall конечно). Выделите час в день на прогулку или спортзал. Научитесь говорить "нет" авральным задачам, которые на самом деле не горят.

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

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

🏴‍☠️ @happy_devops
🔥8👍1
Инструмент для отладки Dockerfile: buildg 🛠

В мире, где каждый второй проект — это монолит, раскиданный по сотне контейнеров, отладка Dockerfile превращается в квест. Добавил пару RUN команд, собрал образ, а он не работает. Собрал заново — та же история. И вот ты уже час гадаешь, что пошло не так.

buildg — новый инструмент на базе BuildKit для интерактивной отладки Dockerfile. Он позволяет ставить брейкпоинты на любую строчку, проверять состояние файловой системы после каждой команды и запускать терминал прямо внутри сборки.

Выглядит это так:
FROM ubuntu AS dev
RUN echo hello > /hello
RUN echo world > /world


Запускаем buildg debug, ставим брейкпоинт на третью строчку командой break 3, и погнали! После остановки можно зайти внутрь командой exec и посмотреть содержимое файлов. Никаких echo и printf — чистая интерактивная отладка, как в нормальном дебаггере.

Особенно приятно, что buildg работает с VS Code, Neovim и Emacs через Debug Adapter Protocol. Теперь можно отлаживать Docker-файлы в любимом редакторе с полноценным GUI. И да, он поддерживает rootless режим — никаких sudo прав не требуется.

В комплекте идет поддержка всех фич BuildKit: кэширование, SSH-агент, секреты. А для тех, кто использует nerdctl — buildg уже встроен как подкоманда.

💻 https://github.com/ktock/buildg

🏴‍☠️ @happy_devops
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍2
AI-инструменты для разработки: от идеи до готового приложения за пару часов 🚀

Революция в веб-разработке набирает обороты — новые AI-сервисы превращают описание проекта в рабочий код буквально на лету. Давайте разберем самые крутые из них.

bolt.new — браузерная студия для быстрого прототипирования. Тут все работает прямо в браузере: описываете желаемый результат, правите дизайн, загружаете референсные картинки. С React-проектами справляется отлично, хотя с Vue и Nuxt пока дружит не очень. Готовый код можно скачать или сразу отправить в продакшн.

v0.dev — прямой конкурент bolt в создании лендингов, но со своими козырями. Главная фишка — использование библиотеки компонентов shadcn, благодаря которой ваш UI будет выглядеть современно и стильно. Недавно добавили интеграцию с GitHub-репозиториями, а деплой на Vercel делается буквально в пару кликов.

lovable.dev — тут мы переходим в высшую лигу. Это не просто генератор, а полноценная full-stack среда разработки в браузере. Поддержка баз данных Supabase, синхронизация с GitHub, полный доступ к исходникам — все включено. Описываете идею приложения или игры, и lovable превращает её в готовый продукт.

Cursor — это уже серьезная IDE для тех, кто готов работать с кодом на естественном языке. Говорите, что нужно сделать или изменить в проекте, а он пишет код. Умеет работать с документацией, искать решения онлайн, создавать и фронтенд, и бэкенд, интегрироваться с API. Нужны базовые знания о структуре проекта, но результат того стоит.

Windsurf — младший брат Cursor, но с амбициями. Работает локально, справляется с несколькими файлами одновременно, а недавно получил интеграцию с MCP (model context protocol). Это позволяет AI напрямую общаться с базами данных, серверами и файлами — звучит как фантастика, но работает уже сейчас.

Собрать рабочее приложение с этими инструментами проще простого: накидываете прототип в bolt.new, подгружаете скриншот любимого сайта для вдохновения, а финальную доводку делаете в Cursor или Windsurf. Деплой на Netlify или Vercel займет пару кликов.

И главное — все эти сервисы дают бесплатные тарифы для экспериментов. Идеально для создания прототипов или обучения современной веб-разработке.

🏴‍☠️ @happy_devops
1🔥1
Продуктивность без выгорания: инсайды от опытных DevOps 🚀

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

В чем же их секрет? А в том, что они перестали быть заложниками "надо срочно" и "все горит". Внедрили практику тайм-блоков — два часа на инфру, час на мониторинг, полчаса на код-ревью. Пока время не вышло — никаких переключений. А главное — научились говорить "нет" внезапным таскам, которые прилетают поверх планов.

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

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

И самое главное — после работы реально отключаются. Никаких уведомлений в мессенджерах, никакой почты по ночам. Если что-то критичное — в команде есть дежурный инженер. А остальные в это время занимаются своей жизнью: спортом, хобби, семьей. И знаете что? Именно такой подход делает их эффективнее тех, кто пытается быть онлайн 24/7.

🏴‍☠️ @happy_devops
👍84
This media is not supported in your browser
VIEW IN TELEGRAM
LLM Resource Hub — бесплатная база знаний для работы с языковыми моделями 🤖

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

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

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

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

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

🏴‍☠️ @happy_devops
🔥4
Приземление данных и технологический суверенитет — два мощных тренда, круто изменивших глобальную IT-индустрию за последние пару лет. Большие корпорации оказались между молотом и наковальней: с одной стороны давят регуляторы и государства, с другой — падает эффективность бизнеса из-за новых ограничений.

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

Только в реальности все сложнее. Глобализация дала нам GitHub и опенсорс, совместные научные проекты и единые стандарты. Технологические барьеры между странами тормозят инновации и обмен опытом. Разработчикам приходится изобретать велосипед заново, вместо того чтобы брать готовые решения и развивать их дальше.

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

Похоже, баланс между открытостью и защитой интересов придется искать еще долго. Пока одни страны закрываются и строят свои "национальные интернеты", другие продвигают идеи цифровой глобализации 2.0 — с новыми правилами игры и честной конкуренцией. А инженерам стоит внимательно следить за регуляторикой и готовиться к новым сценариям развертывания инфраструктуры. И да, учить китайский — никогда не знаешь, где придется поднимать следующий кластер.

Ваня на своем канале «Деплой» рассуждает на туже тему, и делает это очень мощно. В его фирменном стиле он раскладывает тему приземления данных по полочкам. Очень грамотный пост.
1😁1💯1
AIOps против MLOps: разбираем модный хайп 🤖

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

AIOps — не про искусственный интеллект в традиционном понимании. Тут нет магии и роботов, захватывающих мир. По сути, это набор инструментов для автоматизации рутины в мониторинге и эксплуатации. Представьте себе систему, которая сама находит аномалии в метриках, группирует алерты и предлагает решения типовых проблем.

AIOps-инженер занимается прогнозированием отказов серверов на основе исторических данных, настраивает автоматическую корреляцию сообщений об ошибках из разных систем мониторинга, строит модели для предсказания всплесков нагрузки. Такой специалист живёт в мире логов, метрик и алертов, превращая их в осмысленные сигналы для команды.

А MLOps? Тут совсем другая история. MLOps занимается жизненным циклом ML-моделей: от разработки до деплоя в продакшен. Это как CI/CD, только заточенный под специфику машинного обучения. Датасеты, эксперименты, версионирование моделей — вот это всё.

MLOps-инженер налаживает пайплайны для обучения моделей, следит за качеством данных, настраивает мониторинг drift detection, собирает метрики для A/B тестов. Он работает на стыке классического девопса и data sciense, помогая превращать jupyter-ноутбуки в промышленные решения.

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

Не ведитесь на маркетинговую шумиху. AIOps не сделает из вас специалиста по ML, а знание MLOps не поможет настроить мониторинг. Каждый инструмент решает свои задачи. И если вам надо выбрать, с чего начать — отталкивайтесь от боли, которую хотите закрыть.

🏴‍☠️ @happy_devops
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1
Forwarded from Downtime Bar&Grill
📣Анонс мероприятия

Всем привет!
Серое небо и короткий световой день сподвигают нас к организации теплых вечерних встреч в домашнем формате. Первая из них случится уже на следующей неделе в кофейне с символичным названием "культурный код" по адресу Москва, улица Чаянова 12, метро Новослободская. Там мы, fournines.ru, совместно с Андреем Синицыным (золотым профессионалом и автором двух крутых тг каналов) погрузимся в захватывающий мир SRE, посмотрим на него с технической и менеджерской сторон, сломаем отказоустойчивую систему, послушаем много интересного и ответим на все-все вопросы (ну и куда же без захватывающих историй).

📆 Дата: 11.12.24

Время: с 19:30 до 22:00

📍Место: «Культурый код», Москва, метро Новослободская, улица Чаянова 12

Вход бесплатный, а по промокоду
FREECOFFEE

можно получить бесплатный кофе🤫
Количество мест ограничено!

По всем вопросам и для брони места и бесплатного кофе пишите @dagureevaa

#события @downtime_bar
Please open Telegram to view this post
VIEW IN TELEGRAM
Debug Adapter Protocol: включаем универсальный режим отладки 🎯

Мы тут ндавно писали про классный дебаггер и там упомянули DAP. В бота неожиданно пришло пару вопросов про него, разбираемся вместе

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

DAP (Debug Adapter Protocol) решает эту головоломку раз и навсегда. Представьте: один протокол, который работает с любым отладчиком, в любой IDE. VS Code, Eclipse, Atom или вообще свой редактор — без разницы. И это не просто красивые слова — DAP внедряют даже консервативные компании, которые обычно не спешат с новыми технологиями.

// Пример конфигурации DAP в VS Code
{
"type": "node",
"request": "launch",
"name": "Debug Node.js",
"program": "${workspaceFolder}/app.js",
"skipFiles": [
"<node_internals>/**"
],
"resolveSourceMapLocations": [
"${workspaceFolder}/**",
"!**/node_modules/**"
]
}


DAP общается с отладчиком через JSON-RPC. Звучит сложно, но на деле упрощает жизнь. Хотите точки останова в TypeScript? Или может пошаговую отладку Python? DAP справится с обоими случаями без дополнительной настройки. Протокол поддерживает все стандартные функции отладки: пошаговое выполнение, условные брейкпоинты, просмотр переменных и выражений.

# Базовый обработчик событий DAP
async def handle_initialize(self, args):
response = {
# Поддержка подтверждения завершения настройки
"supportsConfigurationDoneRequest": True,
# Показ значений при наведении мыши
"supportsEvaluateForHovers": True,
# Отключаем откат на шаг назад при отладке
"supportsStepBack": False,
# Разрешаем менять значения переменных на лету
"supportsSetVariable": True,
# Поддержка перезапуска отладочной сессии
"supportsRestartRequest": True,
# Информация о загруженных модулях
"supportsModulesRequest": True,
# Возможность прервать отлаживаемый процесс
"supportTerminateDebuggee": True,
# Отложенная загрузка стека вызовов
"supportsDelayedStackTraceLoading": True
}
return response


На практике эти флаги определяют, какие фичи доступны в вашем отладчике. Например, supportsSetVariable позволит менять значения переменных прямо во время отладки — незаменимо для проверки граничных случаев. А supportsDelayedStackTraceLoading оптимизирует работу с большими проектами, подгружая информацию о стеке вызовов по мере необходимости.

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

PS Для тех, кто не знал: у нас есть бот для обратной связи @HDFeedBackBot Туда можно задать свои вопросы, например на тему технологий или аспектов нашей работы, про которые вы хотите увидеть пост. В нашей редакции работают крутые инженеры и мы обязательно разберемся и что-нибудь напишем

🏴‍☠️ @happy_devops
👍1
DevOps живет в состоянии непрерывного развития — стоит только освоить один инструмент, появляется три новых, а у проверенных решений открываются неожиданные грани.

Мы запускаем серию глубоких технических погружений: каждую неделю берем одну тему и докапываемся до сути, раскладывая по полочкам все нюансы — от service mesh и мониторинга до шардирования и распределенных хранилищ.

А между техническими постами поговорим о карьерном росте, профессиональном выгорании и культуре DevOps в эпоху распределенных команд и удаленной работы.

Эту неделю мы посвятим Service Mesh Architecture — разберем, как правильно готовить микросервисы с Istio и Linkerd, настраивать трассировку и балансировку, и почему service mesh — это не всегда серебряная пуля.

🏴‍☠️ @happy_devops
👍6
Service Mesh в микросервисной архитектуре часто сравнивают с нервной системой организма. И не зря — он контролирует взаимодействие сервисов, следит за их здоровьем и реагирует на проблемы. Только вот внедряют его обычно, когда организм уже болен: микросервисы размножились, латентность выросла, а в логах творится полный хаос.

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

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

Service Mesh берет эту головную боль на себя. Он добавляет к каждому сервису прокси-компонент (sidecar), который перехватывает весь входящий и исходящий трафик. Теперь сервисам не нужно знать друг о друге — они общаются через прокси, а уже он решает, куда и как доставить запрос.

Звучит как еще один слой сложности? Да, но эта сложность того стоит. Service Mesh дает готовые решения для типичных проблем распределенных систем. Трассировка запросов? Включается одним конфигом. Защита от каскадных отказов? Circuit breaker из коробки. Постепенный переход на новую версию сервиса? Canary deployment без единой строчки кода.

Но не спешите внедрять Service Mesh только потому, что это модно. Для небольших систем он может оказаться из пушки по воробьям. Накладные расходы на прокси, сложность отладки, дополнительные ресурсы — это та цена, которую придется заплатить. Прежде чем решиться, задайте себе вопрос: действительно ли ваши сетевые проблемы стоят этих затрат?

А вот если у вас правда болит голова от управления трафиком между сервисами — Service Mesh может стать тем самым обезболивающим. В следующих постах разберем конкретные примеры и поговорим, как готовить Service Mesh правильно.

🏴‍☠️ @happy_devops
👍7
Борьба с латентностью в микросервисной архитектуре — это вечная битва. Service Mesh и конкретно Istio дают мощный арсенал инструментов для этой войны. Только вот документация Istio напоминает инструкцию к боевому истребителю — куча кнопок, а как их правильно нажимать, не всегда понятно.

Начнем с основ конфигурации timeout и retry. В реальном мире сервисы тормозят, падают и теряют пакеты. Сетевые таймауты и повторные попытки — это наша первая линия обороны. Вот базовая конфигурация VirtualService для управления таймаутами:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: payment-service
spec:
hosts:
- payment-service
http:
- route:
- destination:
host: payment-service
subset: v1
timeout: 3s
retries:
attempts: 3
perTryTimeout: 1s
retryOn: connect-failure,refused-stream,5xx


Этот конфиг говорит: "Если платежный сервис не ответил за 3 секунды или вернул ошибку — делаем еще три попытки, каждая по секунде". Обратите внимание на retryOn — здесь перечислены условия для повторных попыток. В продакшене часто добавляют gateway-error и reset для борьбы с сетевыми глюками.

Но одни таймауты не спасут от каскадных отказов. Тут в бой вступает circuit breaker. Его задача — вовремя понять, что сервис болеет, и перестать его мучить запросами. Настраивается через DestinationRule:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: payment-circuit-breaker
spec:
host: payment-service
trafficPolicy:
outlierDetection:
consecutive5xxErrors: 5
interval: 10s
baseEjectionTime: 30s
maxEjectionPercent: 50
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 10


Тут мы говорим: "После 5 ошибок подряд в течение 10 секунд выключаем проблемный под на 30 секунд". MaxEjectionPercent защищает от ситуации, когда все поды вырублены — минимум 50% останутся в строю. А connectionPool не дает завалить сервис лавиной запросов.

Теперь самое интересное — rate limiting. В продакшене часто бывает, что один сервис-сосед начинает долбить твой сервис миллионом запросов в секунду. Rate limiting помогает зарубить такие атаки на корню:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: payment-ratelimit
spec:
workloadSelector:
labels:
app: payment-service
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.local_ratelimit
typedConfig:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
statPrefix: http_local_rate_limiter
tokenBucket:
maxTokens: 1000
tokensPerFill: 100
fillInterval: 1s
filterEnabled:
runtime_key: local_rate_limit_enabled
default_value:
numerator: 100
denominator: HUNDRED


Этот монстр ограничивает входящий трафик до 100 запросов в секунду с возможностью буста до 1000 запросов. Важный момент — rate limiting лучше делать на уровне отдельных эндпоинтов, а не всего сервиса. Какие-то API могут быть тяжелыми и требовать жестких ограничений, а какие-то — легкими и способными переварить больше трафика.

Для мониторинга всей этой красоты нужны правильные метрики. Базовый набор:
- istio_request_duration_milliseconds — латентность запросов
- istio_requests_total — количество запросов с разбивкой по кодам ответа
- istio_request_bytes — размер запросов
- envoy_cluster_upstream_rq_pending_overflow — сработавшие circuit breaker
- envoy_cluster_upstream_rq_retry — количество повторных попыток
- envoy_http_ratelimit_total_requests_denied — отклоненные rate limiter запросы

🏴‍☠️ @happy_devops
🔥8👍1
Алерты стоит ставить не только на высокую латентность, но и на аномальное количество ретраев и срабатываний circuit breaker. Это часто помогает поймать проблемы до того, как они выльются в полноценный инцидент.

И последний совет: не включайте все фичи сразу. Начните с базовых таймаутов и ретраев, убедитесь что все работает как надо. Потом добавьте circuit breaker, настройте его пороги. И только потом, если нужно, переходите к rate limiting. Постепенное внедрение позволит избежать ситуации, когда Service Mesh сам становится источником проблем.

🏴‍☠️ @happy_devops
🔥6
В современном Service Mesh Envoy — это основная рабочая сила, а Istio — генерал, который командует армией прокси-серверов. Каждый сервис получает свой персональный Envoy (sidecar), а Istio через control plane раздает этим Envoy указания: кого пускать, кого блокировать, как балансировать нагрузку.

Когда микросервис хочет поговорить с соседом, его запрос сначала попадает в локальный Envoy. Тот сверяется с картой маршрутов от Istio и принимает решение: пропустить запрос, перенаправить на другую версию сервиса или вообще отклонить. Такая архитектура превращает сеть микросервисов в управляемую структуру — какие бы правила не придумал оператор, они моментально распространяются на все прокси.

Вот пример базовой конфигурации Envoy для обработки входящего HTTP-трафика:

static_resources:
listeners:
- name: http_listener
address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: local_service
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

clusters:
- name: local_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: local_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8081


А вот как настраивается более продвинутая конфигурация с retry policy и circuit breaker:

clusters:
- name: local_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
circuit_breakers:
thresholds:
- priority: DEFAULT
max_connections: 1000
max_pending_requests: 1000
max_requests: 1000
max_retries: 3
retry_policy:
retry_on: connect-failure,refused-stream,unavailable
num_retries: 3
per_try_timeout: 1s
load_assignment:
cluster_name: local_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8081


В финальной конфигурации часто добавляют health checks и outlier detection:

clusters:
- name: local_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
health_checks:
- timeout: 1s
interval: 5s
unhealthy_threshold: 3
healthy_threshold: 1
http_health_check:
path: "/health"
outlier_detection:
consecutive_5xx: 5
base_ejection_time: 30s
max_ejection_percent: 50


Роль Envoy в этой схеме сложно переоценить. Он не просто пробрасывает трафик, а собирает детальную телеметрию: латентность запросов, коды ответов, размеры payload. Все эти данные стекаются в центральную систему мониторинга, позволяя видеть полную картину взаимодействия сервисов.

В итоге Service Mesh на базе Istio и Envoy — это как операционная система для микросервисов. Разработчикам не нужно думать о network resilience, service discovery или сборе метрик. Все эти задачи делегированы инфраструктурному слою. А значит, команды могут сфокусироваться на бизнес-логике, не изобретая велосипеды для базовых сетевых операций.

🏴‍☠️ @happy_devops
🔥4
Распределенная трассировка в микросервисной архитектуре — это как GPS для запросов. Только вместо карты города перед нами карта вызовов между сервисами. И если без GPS еще можно как-то найти нужную улицу, то без трейсинга в распределенной системе мы как слепые котята.

Service Mesh и конкретно Istio + Envoy дают мощный инструментарий для трассировки. Весь трафик проходит через прокси, а значит, мы можем видеть каждый запрос, его путь и время выполнения. Но настроить это все правильно — задача нетривиальная.

Начнем с базовой конфигурации. В Istio включаем трейсинг через конфиг:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
zipkin:
address: jaeger-collector.observability:9411


Тут мы говорим: "Собирай все запросы (sampling: 100) и отправляй их в Jaeger через Zipkin протокол". На проде sampling обычно ставят 1-10%, иначе можно захлебнуться в данных.

Теперь нужно научить наши сервисы пробрасывать trace контекст. Istio автоматически добавляет заголовки x-request-id, x-b3-traceid и другие. Но для полной картины стоит добавить инструментацию в код:

from opentelemetry import trace
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.instrumentation.requests import RequestsInstrumentor

app = Flask(__name__)
FlaskInstrumentor().instrument_app(app)
RequestsInstrumentor().instrument()

@app.route('/api/order')
def create_order():
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_order") as span:
span.set_attribute("order_type", "regular")
result = process_order()
return result


Такой код не только подхватит trace контекст из заголовков, но и добавит свои спаны с дополнительной информацией. В Jaeger мы увидим не просто вызовы между сервисами, а конкретные операции внутри каждого сервиса.

А вот пример конфигурации для отлова проблем производительности:

apiVersion: networking.istio.io/v1alpha3
kind: Telemetry
metadata:
name: trace-sampling
spec:
selector:
matchLabels:
app: orders
tracing:
- randomSamplingPercentage: 100.0
customTags:
http.status_code:
header:
name: :status
defaultValue: "200"
request.size:
header:
name: content-length
defaultValue: "0"


Здесь мы добавляем кастомные теги для каждого трейса — HTTP статусы и размеры запросов. Это поможет быстрее находить проблемные паттерны.

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

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

🏴‍☠️ @happy_devops
🔥2
Service Mesh — не серебряная пуля. После недели глубокого погружения в тему становится очевидно: это мощный инструмент, который может как решить кучу проблем, так и создать новые.

С одной стороны, Service Mesh дает нам богатый набор фич из коробки: трассировку запросов, умную балансировку нагрузки, гранулярный контроль трафика. Envoy в качестве прокси показывает отличную производительность, а Istio берет на себя всю головную боль с конфигурацией и обновлением правил. Добавьте сюда автоматический сбор метрик, защиту от каскадных отказов и canary deployments — получается внушительный список преимуществ.

Но у каждого плюса есть своя цена. Дополнительный прокси-слой — это overhead по CPU и памяти. Control plane требует отдельных ресурсов и внимания. Отладка проблем становится сложнее, потому что теперь между сервисами есть еще один слой абстракции. А уж если что-то пошло не так с самим Service Mesh — готовьтесь к веселому дебагу.

В итоге все сводится к старому доброму "зависит от контекста". Если у вас десяток микросервисов и простая топология — Service Mesh может оказаться из пушки по воробьям. Но если счет идет на сотни сервисов, если вам нужен серьезный мониторинг и контроль трафика — инвестиция в Service Mesh окупится сторицей.

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

🏴‍☠️ @happy_devops
🔥4👍2
База данных — сердце любой системы, и когда оно начинает барахлить, страдает весь организм. А ведь так часто бывает: приложение растет, данных становится больше, и в один прекрасный момент запросы, которые раньше выполнялись за миллисекунды, превращаются в минутные пытки.

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

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

NoSQL решения вроде MongoDB созданы для работы с неструктурированными данными и горизонтального масштабирования. Они прекрасно справляются с большими нагрузками, но теряют эффективность при сложных связанных запросах.

Колоночные хранилища ClickHouse и Vertica раскрывают свой потенциал в аналитических системах. Они обрабатывают огромные массивы данных на лету при условии правильно спроектированной схемы и настроенных агрегаций.

Time-series базы данных InfluxDB и Prometheus специализируются на работе с метриками и логами. Их внутренняя архитектура оптимизирована под запись и чтение временных рядов, что делает их незаменимыми для мониторинга.

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

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

На этой неделе разберем тонкости настройки разных типов баз: от PostgreSQL до MongoDB и Elasticsearch. Поговорим про инструменты диагностики, разберем популярные проблемы и обсудим стратегии масштабирования.

🏴‍☠️ @happy_devops
👍4
Forwarded from Синицын, бл🤬
💥 Анонс! Анонс! Анонс! 💥

Каждому нужен близкий человек, которому можно кидать мемы. Это почти физиологическая потребность. У меня, к сожалению, такого человека нет и поэтому я просто решил кидать мемы всем🤷‍♂️

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

🎹 ДевопсРадио v.1.0.1

Канал ведет специально обученный бот, который сам, на основе невероятного ИИ (обученного на всратом чувстве юмора, моем и группы товарищей), ищет и отбирает мемы по всему интернету. Телеграм, Реддит, ВК, Лепра и еще пачка всяких мемных помоек регулярно подвергаются его обходу. Он пока не очень умный, поэтому я все-таки аппрувлю то, что он находит. Но! Один мем в сутки он постит самостоятельно и я не знаю какой, пока он не появится в канале 😊 Свободу роботам и все дела 🤖

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

Но это еще не все. "Радио" в названии не так-то просто присутствует, в следующем релизе я реально запилю радио. Я очень привык работать под всякую приятную музычку типа lounge, chiilout, ambient, nu-jazz и тому подобное. Но с замедлением ютуба у меня отобрали мои любимые 10-часовые подборки лаунжа. А еще на ютубе есть специальная фоновая музыка для СДВГ-шников и вот примерно такое и будет транслироваться на моем радио. А мой суперумный бот будет помогать скачать понравившиеся треки.

Там еще куча разного интересного в бэклоге есть, но не буду рассказывать про все сразу, пусть будет небольшая интрига😏

Пока что просто отборные (и немножко проклятые) мемы❤️

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

🔜 Подписывайтесь на ДевопсРадио 🎹

〰️〰️〰️〰️〰️〰️〰️
🗞 @boombah_in_da_house
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3