Увольнение: трагедия или новые возможности?
Никто не застрахован от сообщения в корпоративном мессенджере: «Привет, есть время на созвон?» И вот ты уже собираешь вещи со стола, а доступы к серверам испаряются один за другим. В нашей индустрии увольнение перестало быть чем-то постыдным — это часть игры, особенно когда очередной стартап решает, что джуниор девопс вполне потянет работу целого отдела.
Первые дни после увольнения мозг генерит два типа мыслей. Первая: «Да как они посмели, я же их продакшен с колен поднимал!» Вторая: «А точно я не самозванец, и кому теперь нужен девопс без проектов?» Обе мысли ведут в никуда.
Любой минус можно развернуть в плюс. Пока у других тикеты горят, у вас появилось время на рефлексию. Какие технологии реально приносили пользу? Где костыли поддерживали мертвый код? Что хотелось изучить, но вечно не хватало времени?
Старая работа схлопнулась как кластер в пятницу — и освободила место для чего-то нового. Для тех проектов, где вас оценят не за готовность сидеть ночами, а за умение выстраивать процессы. Где можно будет внедрять современные практики, а не поддерживать легаси «потому что так исторически сложилось».
Используйте это время с умом. Пересоберите свой личный «образ»: обновите резюме, прокачайте скиллы, разберите завалы в личном гитхабе. И не спешите хвататься за первый попавшийся оффер. Ищите проект, где сможете расти, а не латать дыры в инфраструктуре.
🏴☠️ @happy_devops
Никто не застрахован от сообщения в корпоративном мессенджере: «Привет, есть время на созвон?» И вот ты уже собираешь вещи со стола, а доступы к серверам испаряются один за другим. В нашей индустрии увольнение перестало быть чем-то постыдным — это часть игры, особенно когда очередной стартап решает, что джуниор девопс вполне потянет работу целого отдела.
Первые дни после увольнения мозг генерит два типа мыслей. Первая: «Да как они посмели, я же их продакшен с колен поднимал!» Вторая: «А точно я не самозванец, и кому теперь нужен девопс без проектов?» Обе мысли ведут в никуда.
Любой минус можно развернуть в плюс. Пока у других тикеты горят, у вас появилось время на рефлексию. Какие технологии реально приносили пользу? Где костыли поддерживали мертвый код? Что хотелось изучить, но вечно не хватало времени?
Старая работа схлопнулась как кластер в пятницу — и освободила место для чего-то нового. Для тех проектов, где вас оценят не за готовность сидеть ночами, а за умение выстраивать процессы. Где можно будет внедрять современные практики, а не поддерживать легаси «потому что так исторически сложилось».
Используйте это время с умом. Пересоберите свой личный «образ»: обновите резюме, прокачайте скиллы, разберите завалы в личном гитхабе. И не спешите хвататься за первый попавшийся оффер. Ищите проект, где сможете расти, а не латать дыры в инфраструктуре.
🏴☠️ @happy_devops
👍5❤3🔥1
Типичные грабли шардирования: выбираем правильный ключ 🔑
В позавчерашнем примере мы шардили базу по user_id и это кажется логичным и очевидным решением. Все данные одного юзера в одном месте, джойны не разъезжаются по базам — красота! Но это только на первый взгляд. В реальности такой подход приносит кучу проблем.
Представим соцсеть, где user_id используется как ключ шардирования. У одних пользователей тысячи постов и миллионы подписчиков, у других — пара репостов котиков. В итоге один шард разрывается от нагрузки, пока остальные скучают без дела. Получаем классический hot shard — и вся идея равномерного распределения летит в трубу.
А еще есть запросы вроде "показать популярные посты за неделю" или "найти общих друзей". Придется опрашивать все шарды, собирать результаты и сортировать на лету. Латенси растет, ресурсы тратятся впустую — а все из-за неудачного выбора ключа.
Как выбрать ключ с умом? Отталкиваемся от паттернов доступа к данным. Для ленты новостей отлично подойдет шардинг по дате создания поста — свежий контент всегда под рукой. В e-commerce хорошо работает географический шардинг — заказы обычно привязаны к региону доставки.
В играх с открытым миром шардируем по координатам игровых зон. В системах логирования — по временным интервалам. В микросервисной архитектуре часто шардируют по tenant_id, чтобы данные одного клиента были изолированы.
Универсальное правило — ключ должен обеспечивать равномерное распределение данных и минимизировать cross-shard запросы. Если 80% запросов укладываются в один шард — значит ключ выбран правильно.
И не бойтесь сложных схем! Составной ключ из
PS Ссылка на картинку в хорошем разрешении
🏴☠️ @happy_devops
В позавчерашнем примере мы шардили базу по user_id и это кажется логичным и очевидным решением. Все данные одного юзера в одном месте, джойны не разъезжаются по базам — красота! Но это только на первый взгляд. В реальности такой подход приносит кучу проблем.
Представим соцсеть, где user_id используется как ключ шардирования. У одних пользователей тысячи постов и миллионы подписчиков, у других — пара репостов котиков. В итоге один шард разрывается от нагрузки, пока остальные скучают без дела. Получаем классический hot shard — и вся идея равномерного распределения летит в трубу.
А еще есть запросы вроде "показать популярные посты за неделю" или "найти общих друзей". Придется опрашивать все шарды, собирать результаты и сортировать на лету. Латенси растет, ресурсы тратятся впустую — а все из-за неудачного выбора ключа.
Как выбрать ключ с умом? Отталкиваемся от паттернов доступа к данным. Для ленты новостей отлично подойдет шардинг по дате создания поста — свежий контент всегда под рукой. В e-commerce хорошо работает географический шардинг — заказы обычно привязаны к региону доставки.
В играх с открытым миром шардируем по координатам игровых зон. В системах логирования — по временным интервалам. В микросервисной архитектуре часто шардируют по tenant_id, чтобы данные одного клиента были изолированы.
Универсальное правило — ключ должен обеспечивать равномерное распределение данных и минимизировать cross-shard запросы. Если 80% запросов укладываются в один шард — значит ключ выбран правильно.
И не бойтесь сложных схем! Составной ключ из
{region_id, created_at} или {category_id, product_id} часто работает лучше, чем один простой параметр. Главное — тщательно проанализировать характер нагрузки перед выбором стратегии шардирования.PS Ссылка на картинку в хорошем разрешении
🏴☠️ @happy_devops
❤4👍2
Katacoda — песочница для DevOps без головной боли 🚀
Учиться на продакшене — так себе идея. А развернуть локально Kubernetes, Terraform или OpenShift порой сложнее, чем написать собственный оркестратор. Katacoda решает эту проблему: берёт на себя всю инфраструктуру и даёт нам готовую среду прямо в браузере.
В основе лежит запуск Docker-контейнеров с предустановленным набором инструментов. Выбираешь сценарий на сайте, кликаешь "Start Scenario" — и через 30 секунд у тебя готовая среда с терминалом:
Главная фишка — интерактивные туториалы с автопроверкой. Система следит за каждой командой и подсказывает, если что-то идёт не так. Вот как выглядит проверка деплоймента:
За счёт веб-интерфейса отпадает нужда в мощной машине — весь тяжёлый lifting берёт на себя облако. Можно даже пробовать сложные штуки вроде распределённых систем или микросервисной архитектуры. Разворачивай хоть Kafka, хоть Elasticsearch — ничего не сломаешь.
И главное — не придётся объяснять начальству, почему твои эксперименты с Istio положили половину тестовой среды. А когда всё получится — просто перенесёшь рабочие конфиги в свою инфраструктуру.
🏴☠️ @happy_devops
Учиться на продакшене — так себе идея. А развернуть локально Kubernetes, Terraform или OpenShift порой сложнее, чем написать собственный оркестратор. Katacoda решает эту проблему: берёт на себя всю инфраструктуру и даёт нам готовую среду прямо в браузере.
В основе лежит запуск Docker-контейнеров с предустановленным набором инструментов. Выбираешь сценарий на сайте, кликаешь "Start Scenario" — и через 30 секунд у тебя готовая среда с терминалом:
# Проверим, что окружение поднялось
echo "Привет из Katacoda!"
# launch.sh инициализирует кластер Kubernetes
cat launch.sh
#!/bin/bash
minikube start --wait=false
minikube status
export KUBECONFIG=/etc/kubernetes/admin.conf
# Подождём, пока все поды поднимутся
kubectl wait --for=condition=Ready pod --all -n kube-system --timeout=180s
# Проверим, что кластер работает
kubectl get nodes
Главная фишка — интерактивные туториалы с автопроверкой. Система следит за каждой командой и подсказывает, если что-то идёт не так. Вот как выглядит проверка деплоймента:
# Создадим тестовый деплоймент
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80
# Katacoda проверит результат
verify_deployment() {
POD_NAME=$(kubectl get pods -l app=web -o name)
if [ -z "$POD_NAME" ]; then
echo "Под не создан. Попробуй ещё раз!"
return 1
fi
echo "Отлично! Деплоймент работает"
}
verify_deployment
За счёт веб-интерфейса отпадает нужда в мощной машине — весь тяжёлый lifting берёт на себя облако. Можно даже пробовать сложные штуки вроде распределённых систем или микросервисной архитектуры. Разворачивай хоть Kafka, хоть Elasticsearch — ничего не сломаешь.
И главное — не придётся объяснять начальству, почему твои эксперименты с Istio положили половину тестовой среды. А когда всё получится — просто перенесёшь рабочие конфиги в свою инфраструктуру.
🏴☠️ @happy_devops
Katacoda
Katacoda - Interactive Learning Platform for Software Engineers
Learn the latest technologies with our hands-on labs
🔥6👍4👎1
Книга "Apache Kafka" от O'Reilly — не просто очередной гайд по популярной технологии. За сухим названием прячется настоящая библия распределенных систем и потоковой обработки данных.
Авторы не стали пересказывать документацию — они препарировали Kafka до винтика. От базовых концептов через внутреннее устройство к масштабированию и отказоустойчивости. А главное — без воды и абстрактных рассуждений. Сразу в бой: архитектура, паттерны, граничные случаи и подводные камни.
Отдельный респект за главу про консистентность и гарантии доставки сообщений. На пальцах разложили, почему at-least-once delivery — не серебряная пуля, и как выбирать между надежностью и производительностью. Да и вообще, книга отлично показывает trade-offs в распределенных системах.
Код в книге без сахара — только хардкор и продакшен-грейд решения. Сразу видно, что авторы реально работали с Kafka в боевых условиях, а не теоретизировали в башне из слоновой кости. Каждый пример снабжен разбором граничных случаев и советами по отладке.
А еще они не постеснялись написать про косяки и ограничения Kafka. Вместо маркетинговых лозунгов — честный разговор о том, где эта технология реально рулит, а где лучше поискать другие варианты.
Короче, must read для тех, кто работает с high-load и распределенными системами. Даже если вы не используете Kafka, принципы и паттерны из книги пригодятся в любой современной архитектуре.
🏴☠️ @happy_devops
Авторы не стали пересказывать документацию — они препарировали 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
На дворе двадцатые годы, а мы до сих пор страдаем при выборе базы данных. MySQL? PostgreSQL? MongoDB? А может Redis? И каждый вендор кричит, что именно его решение — самое быстрое, масштабируемое и вообще единственно верное.
Сайт dbdb.io — находка для измученных душ. Это интерактивная энциклопедия баз данных, где собрана вся ключевая информация без маркетингового шума. Здесь каждая база разложена по полочкам: архитектура, особенности хранения данных, производительность и ограничения.
Круто, что создали его не маркетологи, а профессора из Университета Карнеги-Меллона. Они собрали исчерпывающую информацию о 250+ базах данных — от динозавров вроде IBM DB2 до молодых проектов типа CockroachDB.
За каждой статьей стоят пруфы: научные статьи, технические спецификации, реальные бенчмарки. Никакого "мы самые быстрые" без пруфов. И самое вкусное — интерактивные сравнения. Можно выбрать несколько баз и сравнить их по десяткам параметров. Прям мечта для технического обоснования!
И совет напоследок: не ведитесь на хайп. Загляните на dbdb.io перед тем, как притащить очередную модную NoSQL базу в продакшен. Сэкономите себе пару седых волос.
🏴☠️ @happy_devops
✍5🔥4👍3
SSH-конфиг: 10 трюков для продвинутых админов ⚡️
SSH — инструмент, с которым девопс проводит полжизни. Грамотный конфиг сделает эту жизнь приятнее. Собрал настройки, которые реально экономят время в повседневной работе.
Host позволяет создавать шаблоны для групп серверов. Звездочка в имени хоста автоматически подставит нужный домен и пользователя для всех подходящих машин:
ProxyJump открывает прямой путь к серверам за бастионами. Одна строчка заменит три-четыре команды для прыжков между хостами:
ForwardAgent избавит от копирования ключей на промежуточные серверы. SSH-агент прокинет локальные ключи по всей цепочке хостов:
LocalForward сделает удаленные сервисы локальными. База данных, Redis, Prometheus — всё станет доступно как localhost:
ControlMaster экономит время на повторных подключениях. Первая сессия станет мастером для всех следующих — они подключатся мгновенно:
Compression спасет при работе через медленный VPN. Сжатие трафика ускорит отклик в несколько раз:
IdentitiesOnly прекратит путаницу с ключами. SSH будет использовать только указанный ключ, игнорируя все остальные:
ServerAliveInterval сохранит соединение активным. Незаметные пинги не дадут серверу закрыть сессию по таймауту:
Match добавит гибкости в настройки. Запретите рут-доступ в нерабочее время или смените порт для определенных IP:
RemoteForward расшарит локальные сервисы наружу. Два способа пробросить порт 80 на удаленный сервер — через конфиг или через ключ:
Конфиг собирается в
🏴☠️ @happy_devops
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
👍11❤3🔥3
Психологическое здоровье в IT: табу, которое пора нарушить
Выгорание среди айтишников достигло масштабов эпидемии, а мы продолжаем делать вид, что все нормально. За закрытыми дверями офисов и в домашних кабинетах разработчики, девопсы и тестировщики борются с тревогой, депрессией и стрессом — и часто остаются один на один со своими проблемами.
В нашей индустрии не принято говорить о психологическом здоровье. Мы шутим про опасный код в пятницу, про костыли в легаси и про очередной срыв дедлайна. А потом глотаем таблетки от головной боли и заедаем стресс энергетиками.
А ведь базовые практики заботы о себе не требуют сверхчеловеческих усилий. Включите в календарь 10-минутные перерывы между созвонами. Настройте уведомления — пусть рабочий мессенджер молчит после семи вечера (если вы не на oncall конечно). Выделите час в день на прогулку или спортзал. Научитесь говорить "нет" авральным задачам, которые на самом деле не горят.
Компании тратят миллионы на железо и софт, но экономят на психологической поддержке сотрудников. А ведь стоимость потери классного специалиста из-за выгорания в разы выше, чем цена превентивных мер — корпоративного психолога, тренингов по управлению стрессом или просто человечного отношения к сотрудникам.
Каждый раз, когда мы замалчиваем проблемы с ментальным здоровьем, мы укрепляем стену непонимания. Пора начать открыто говорить об этом и строить здоровую культуру, где забота о себе — не слабость, а осознанный выбор профессионала.
🏴☠️ @happy_devops
Выгорание среди айтишников достигло масштабов эпидемии, а мы продолжаем делать вид, что все нормально. За закрытыми дверями офисов и в домашних кабинетах разработчики, девопсы и тестировщики борются с тревогой, депрессией и стрессом — и часто остаются один на один со своими проблемами.
В нашей индустрии не принято говорить о психологическом здоровье. Мы шутим про опасный код в пятницу, про костыли в легаси и про очередной срыв дедлайна. А потом глотаем таблетки от головной боли и заедаем стресс энергетиками.
А ведь базовые практики заботы о себе не требуют сверхчеловеческих усилий. Включите в календарь 10-минутные перерывы между созвонами. Настройте уведомления — пусть рабочий мессенджер молчит после семи вечера (если вы не на oncall конечно). Выделите час в день на прогулку или спортзал. Научитесь говорить "нет" авральным задачам, которые на самом деле не горят.
Компании тратят миллионы на железо и софт, но экономят на психологической поддержке сотрудников. А ведь стоимость потери классного специалиста из-за выгорания в разы выше, чем цена превентивных мер — корпоративного психолога, тренингов по управлению стрессом или просто человечного отношения к сотрудникам.
Каждый раз, когда мы замалчиваем проблемы с ментальным здоровьем, мы укрепляем стену непонимания. Пора начать открыто говорить об этом и строить здоровую культуру, где забота о себе — не слабость, а осознанный выбор профессионала.
🏴☠️ @happy_devops
🔥8👍1
Инструмент для отладки Dockerfile: buildg 🛠
В мире, где каждый второй проект — это монолит, раскиданный по сотне контейнеров, отладка Dockerfile превращается в квест. Добавил пару RUN команд, собрал образ, а он не работает. Собрал заново — та же история. И вот ты уже час гадаешь, что пошло не так.
buildg — новый инструмент на базе BuildKit для интерактивной отладки Dockerfile. Он позволяет ставить брейкпоинты на любую строчку, проверять состояние файловой системы после каждой команды и запускать терминал прямо внутри сборки.
Выглядит это так:
Запускаем 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
В мире, где каждый второй проект — это монолит, раскиданный по сотне контейнеров, отладка 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 уже встроен как подкоманда.
🏴☠️ @happy_devops
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - ktock/buildg: Interactive debugger for Dockerfile, with support for IDEs (VS Code, Emacs, Neovim, etc.)
Interactive debugger for Dockerfile, with support for IDEs (VS Code, Emacs, Neovim, etc.) - ktock/buildg
🔥6✍2👍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
Революция в веб-разработке набирает обороты — новые 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
bolt.new
Bolt AI builder: Websites, apps & prototypes
Prompt, run, edit & publish apps
✍1🔥1
Продуктивность без выгорания: инсайды от опытных DevOps 🚀
Сочетать DevOps и нормальную жизнь — задачка не из простых. В пять вечера закрываешь последний тикет, а в шесть утра прилетает алерт из прода. И пока одни коллеги выгорают, другие умудряются и с работой справляться, и на хобби время находить, и даже в отпуск ездить.
В чем же их секрет? А в том, что они перестали быть заложниками "надо срочно" и "все горит". Внедрили практику тайм-блоков — два часа на инфру, час на мониторинг, полчаса на код-ревью. Пока время не вышло — никаких переключений. А главное — научились говорить "нет" внезапным таскам, которые прилетают поверх планов.
Еще один лайфхак — короткие спринты в стиле помодоро. Полчаса работаем, потом десять минут отдыхаем. За перерыв успеваем и кофе выпить, и размяться, и даже пост в личный блог накатать. После четырех таких циклов — полноценный перерыв на обед или прогулку.
А еще эти ребята помешаны на автоматизации. Любую задачу, которая отнимает больше получаса в день — автоматизируют. Один раз потратить день на скрипт, зато потом месяцами экономить время на рутине. Создают шаблоны для типовых операций, пишут алиасы под частые команды, ведут библиотеку готовых решений.
И самое главное — после работы реально отключаются. Никаких уведомлений в мессенджерах, никакой почты по ночам. Если что-то критичное — в команде есть дежурный инженер. А остальные в это время занимаются своей жизнью: спортом, хобби, семьей. И знаете что? Именно такой подход делает их эффективнее тех, кто пытается быть онлайн 24/7.
🏴☠️ @happy_devops
Сочетать DevOps и нормальную жизнь — задачка не из простых. В пять вечера закрываешь последний тикет, а в шесть утра прилетает алерт из прода. И пока одни коллеги выгорают, другие умудряются и с работой справляться, и на хобби время находить, и даже в отпуск ездить.
В чем же их секрет? А в том, что они перестали быть заложниками "надо срочно" и "все горит". Внедрили практику тайм-блоков — два часа на инфру, час на мониторинг, полчаса на код-ревью. Пока время не вышло — никаких переключений. А главное — научились говорить "нет" внезапным таскам, которые прилетают поверх планов.
Еще один лайфхак — короткие спринты в стиле помодоро. Полчаса работаем, потом десять минут отдыхаем. За перерыв успеваем и кофе выпить, и размяться, и даже пост в личный блог накатать. После четырех таких циклов — полноценный перерыв на обед или прогулку.
А еще эти ребята помешаны на автоматизации. Любую задачу, которая отнимает больше получаса в день — автоматизируют. Один раз потратить день на скрипт, зато потом месяцами экономить время на рутине. Создают шаблоны для типовых операций, пишут алиасы под частые команды, ведут библиотеку готовых решений.
И самое главное — после работы реально отключаются. Никаких уведомлений в мессенджерах, никакой почты по ночам. Если что-то критичное — в команде есть дежурный инженер. А остальные в это время занимаются своей жизнью: спортом, хобби, семьей. И знаете что? Именно такой подход делает их эффективнее тех, кто пытается быть онлайн 24/7.
🏴☠️ @happy_devops
👍8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
LLM Resource Hub — бесплатная база знаний для работы с языковыми моделями 🤖
На днях энтузиасты собрали в единый хаб все ключевые материалы по большим языковым моделям. База напоминает университетскую библиотеку, где каждый стеллаж заполнен специализированной литературой — от базовых учебников до продвинутых исследований.
В первом разделе собраны готовые нейронки с документацией и примерами использования. Во втором — тщательно отобранные видеоуроки, которые помогут разобраться даже в самых сложных концепциях машинного обучения. Дальше идут курсы от преподавателей MIT, Stanford и Berkeley — те самые, что обычно доступны только студентам этих вузов.
Отдельного внимания заслуживает коллекция научных статей и технических заметок. Создатели базы отобрали публикации, которые уже проверены временем и помогли не одному поколению ML-инженеров. К каждой статье прилагаются датасеты и код — бери и применяй в своих проектах.
Материалы на английском, зато свежие — многие обновляются каждую неделю. База постоянно пополняется статьями из ведущих ML-конференций, исследованиями от крупных лабораторий и кодом для решения типовых задач в работе с большими моделями.
Создатели проекта не гонятся за хайпом, а собирают только проверенные инструменты и знания. Каждый ресурс проходит тщательный отбор, прежде чем попасть в базу. Такой подход гарантирует качество материалов и экономит время на поиск действительно полезной информации.
🏴☠️ @happy_devops
На днях энтузиасты собрали в единый хаб все ключевые материалы по большим языковым моделям. База напоминает университетскую библиотеку, где каждый стеллаж заполнен специализированной литературой — от базовых учебников до продвинутых исследований.
В первом разделе собраны готовые нейронки с документацией и примерами использования. Во втором — тщательно отобранные видеоуроки, которые помогут разобраться даже в самых сложных концепциях машинного обучения. Дальше идут курсы от преподавателей MIT, Stanford и Berkeley — те самые, что обычно доступны только студентам этих вузов.
Отдельного внимания заслуживает коллекция научных статей и технических заметок. Создатели базы отобрали публикации, которые уже проверены временем и помогли не одному поколению ML-инженеров. К каждой статье прилагаются датасеты и код — бери и применяй в своих проектах.
Материалы на английском, зато свежие — многие обновляются каждую неделю. База постоянно пополняется статьями из ведущих ML-конференций, исследованиями от крупных лабораторий и кодом для решения типовых задач в работе с большими моделями.
Создатели проекта не гонятся за хайпом, а собирают только проверенные инструменты и знания. Каждый ресурс проходит тщательный отбор, прежде чем попасть в базу. Такой подход гарантирует качество материалов и экономит время на поиск действительно полезной информации.
🏴☠️ @happy_devops
🔥4
Приземление данных и технологический суверенитет — два мощных тренда, круто изменивших глобальную IT-индустрию за последние пару лет. Большие корпорации оказались между молотом и наковальней: с одной стороны давят регуляторы и государства, с другой — падает эффективность бизнеса из-за новых ограничений.
Мир разделяется на цифровые регионы. Все строят свои экосистемы, защищают персональные данные граждан, развивают локальные технологии. На первый взгляд звучит здраво — пора слезать с иглы западного софта и железа. Локализация выглядит панацеей от санкционных рисков и цифрового колониализма.
Только в реальности все сложнее. Глобализация дала нам GitHub и опенсорс, совместные научные проекты и единые стандарты. Технологические барьеры между странами тормозят инновации и обмен опытом. Разработчикам приходится изобретать велосипед заново, вместо того чтобы брать готовые решения и развивать их дальше.
К тому же "железный занавес" в интернете работает так себе. Обойти блокировки не сложно, а вот бизнесу приходится тратить ресурсы на соответствие новым правилам. Компании вынуждены строить зеркальную инфраструктуру, дублировать данные, плодить сущности — и все ради формального соответствия требованиям. В итоге страдает конкурентоспособность национальных игроков.
Похоже, баланс между открытостью и защитой интересов придется искать еще долго. Пока одни страны закрываются и строят свои "национальные интернеты", другие продвигают идеи цифровой глобализации 2.0 — с новыми правилами игры и честной конкуренцией. А инженерам стоит внимательно следить за регуляторикой и готовиться к новым сценариям развертывания инфраструктуры. И да, учить китайский — никогда не знаешь, где придется поднимать следующий кластер.
Ваня на своем канале «Деплой» рассуждает на туже тему, и делает это очень мощно. В его фирменном стиле он раскладывает тему приземления данных по полочкам. Очень грамотный пост.
Мир разделяется на цифровые регионы. Все строят свои экосистемы, защищают персональные данные граждан, развивают локальные технологии. На первый взгляд звучит здраво — пора слезать с иглы западного софта и железа. Локализация выглядит панацеей от санкционных рисков и цифрового колониализма.
Только в реальности все сложнее. Глобализация дала нам GitHub и опенсорс, совместные научные проекты и единые стандарты. Технологические барьеры между странами тормозят инновации и обмен опытом. Разработчикам приходится изобретать велосипед заново, вместо того чтобы брать готовые решения и развивать их дальше.
К тому же "железный занавес" в интернете работает так себе. Обойти блокировки не сложно, а вот бизнесу приходится тратить ресурсы на соответствие новым правилам. Компании вынуждены строить зеркальную инфраструктуру, дублировать данные, плодить сущности — и все ради формального соответствия требованиям. В итоге страдает конкурентоспособность национальных игроков.
Похоже, баланс между открытостью и защитой интересов придется искать еще долго. Пока одни страны закрываются и строят свои "национальные интернеты", другие продвигают идеи цифровой глобализации 2.0 — с новыми правилами игры и честной конкуренцией. А инженерам стоит внимательно следить за регуляторикой и готовиться к новым сценариям развертывания инфраструктуры. И да, учить китайский — никогда не знаешь, где придется поднимать следующий кластер.
Ваня на своем канале «Деплой» рассуждает на туже тему, и делает это очень мощно. В его фирменном стиле он раскладывает тему приземления данных по полочкам. Очень грамотный пост.
Telegram
Деплой
Здесь дополнительный контент с видосов, рефлексия на IT-сферу и просто наши мысли.
Клуб Деплой++: https://boosty.to/in.office
О нас: https://clck.ru/3HYpHS
Комментарии: @dev_yttg_chat
В канал пишет: @StressoID
Реклама: @deploymarina
Клуб Деплой++: https://boosty.to/in.office
О нас: https://clck.ru/3HYpHS
Комментарии: @dev_yttg_chat
В канал пишет: @StressoID
Реклама: @deploymarina
❤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
Все вокруг заговорили об 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 общается с отладчиком через JSON-RPC. Звучит сложно, но на деле упрощает жизнь. Хотите точки останова в TypeScript? Или может пошаговую отладку Python? DAP справится с обоими случаями без дополнительной настройки. Протокол поддерживает все стандартные функции отладки: пошаговое выполнение, условные брейкпоинты, просмотр переменных и выражений.
На практике эти флаги определяют, какие фичи доступны в вашем отладчике. Например,
И самое приятное — DAP становится стандартом де-факто. Microsoft, JetBrains, Amazon — все крупные игроки его поддерживают. Даже такие специфические инструменты как удаленная отладка контейнеров или отладка встраиваемых систем постепенно переходят на DAP. А для разработчиков это значит меньше времени на настройку окружения и больше времени на написание кода.
PS Для тех, кто не знал: у нас есть бот для обратной связи @HDFeedBackBot Туда можно задать свои вопросы, например на тему технологий или аспектов нашей работы, про которые вы хотите увидеть пост. В нашей редакции работают крутые инженеры и мы обязательно разберемся и что-нибудь напишем
🏴☠️ @happy_devops
Мы тут ндавно писали про классный дебаггер и там упомянули 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
microsoft.github.io
Official page for Debug Adapter Protocol
Debug Adapter Protocol documentation and specification page.
👍1
DevOps живет в состоянии непрерывного развития — стоит только освоить один инструмент, появляется три новых, а у проверенных решений открываются неожиданные грани.
Мы запускаем серию глубоких технических погружений: каждую неделю берем одну тему и докапываемся до сути, раскладывая по полочкам все нюансы — от service mesh и мониторинга до шардирования и распределенных хранилищ.
А между техническими постами поговорим о карьерном росте, профессиональном выгорании и культуре DevOps в эпоху распределенных команд и удаленной работы.
Эту неделю мы посвятим Service Mesh Architecture — разберем, как правильно готовить микросервисы с Istio и Linkerd, настраивать трассировку и балансировку, и почему service mesh — это не всегда серебряная пуля.
🏴☠️ @happy_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
В теории все красиво — разбили монолит на микросервисы, и теперь каждая команда независимо развивает свою часть. На практике же независимость микросервисов — это миф. Они постоянно общаются между собой, и каждый новый сервис добавляет новые связи в систему. При десяти сервисах это еще терпимо. При пятидесяти начинаются первые звоночки. А когда их становится больше сотни — сетевой хаос накрывает проект с головой.
Представьте себе крупный интернет-магазин. Заказ проходит через десяток сервисов: корзина, платежи, склад, доставка, уведомления... И каждый сервис должен знать, как общаться с остальными. Где они находятся, какие у них эндпоинты, как авторизоваться, что делать при таймаутах. Добавьте сюда версионирование 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 для управления таймаутами:
Этот конфиг говорит: "Если платежный сервис не ответил за 3 секунды или вернул ошибку — делаем еще три попытки, каждая по секунде". Обратите внимание на retryOn — здесь перечислены условия для повторных попыток. В продакшене часто добавляют gateway-error и reset для борьбы с сетевыми глюками.
Но одни таймауты не спасут от каскадных отказов. Тут в бой вступает circuit breaker. Его задача — вовремя понять, что сервис болеет, и перестать его мучить запросами. Настраивается через DestinationRule:
Тут мы говорим: "После 5 ошибок подряд в течение 10 секунд выключаем проблемный под на 30 секунд". MaxEjectionPercent защищает от ситуации, когда все поды вырублены — минимум 50% останутся в строю. А connectionPool не дает завалить сервис лавиной запросов.
Теперь самое интересное — rate limiting. В продакшене часто бывает, что один сервис-сосед начинает долбить твой сервис миллионом запросов в секунду. Rate limiting помогает зарубить такие атаки на корню:
Этот монстр ограничивает входящий трафик до 100 запросов в секунду с возможностью буста до 1000 запросов. Важный момент — rate limiting лучше делать на уровне отдельных эндпоинтов, а не всего сервиса. Какие-то API могут быть тяжелыми и требовать жестких ограничений, а какие-то — легкими и способными переварить больше трафика.
Для мониторинга всей этой красоты нужны правильные метрики. Базовый набор:
-
-
-
-
-
-
🏴☠️ @happy_devops
Начнем с основ конфигурации 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
И последний совет: не включайте все фичи сразу. Начните с базовых таймаутов и ретраев, убедитесь что все работает как надо. Потом добавьте circuit breaker, настройте его пороги. И только потом, если нужно, переходите к rate limiting. Постепенное внедрение позволит избежать ситуации, когда Service Mesh сам становится источником проблем.
🏴☠️ @happy_devops
🔥6
В современном Service Mesh Envoy — это основная рабочая сила, а Istio — генерал, который командует армией прокси-серверов. Каждый сервис получает свой персональный Envoy (sidecar), а Istio через control plane раздает этим Envoy указания: кого пускать, кого блокировать, как балансировать нагрузку.
Когда микросервис хочет поговорить с соседом, его запрос сначала попадает в локальный Envoy. Тот сверяется с картой маршрутов от Istio и принимает решение: пропустить запрос, перенаправить на другую версию сервиса или вообще отклонить. Такая архитектура превращает сеть микросервисов в управляемую структуру — какие бы правила не придумал оператор, они моментально распространяются на все прокси.
Вот пример базовой конфигурации Envoy для обработки входящего HTTP-трафика:
А вот как настраивается более продвинутая конфигурация с retry policy и circuit breaker:
В финальной конфигурации часто добавляют health checks и outlier detection:
Роль Envoy в этой схеме сложно переоценить. Он не просто пробрасывает трафик, а собирает детальную телеметрию: латентность запросов, коды ответов, размеры payload. Все эти данные стекаются в центральную систему мониторинга, позволяя видеть полную картину взаимодействия сервисов.
В итоге Service Mesh на базе Istio и Envoy — это как операционная система для микросервисов. Разработчикам не нужно думать о network resilience, service discovery или сборе метрик. Все эти задачи делегированы инфраструктурному слою. А значит, команды могут сфокусироваться на бизнес-логике, не изобретая велосипеды для базовых сетевых операций.
🏴☠️ @happy_devops
Когда микросервис хочет поговорить с соседом, его запрос сначала попадает в локальный 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 включаем трейсинг через конфиг:
Тут мы говорим: "Собирай все запросы (sampling: 100) и отправляй их в Jaeger через Zipkin протокол". На проде sampling обычно ставят 1-10%, иначе можно захлебнуться в данных.
Теперь нужно научить наши сервисы пробрасывать trace контекст. Istio автоматически добавляет заголовки x-request-id, x-b3-traceid и другие. Но для полной картины стоит добавить инструментацию в код:
Такой код не только подхватит trace контекст из заголовков, но и добавит свои спаны с дополнительной информацией. В Jaeger мы увидим не просто вызовы между сервисами, а конкретные операции внутри каждого сервиса.
А вот пример конфигурации для отлова проблем производительности:
Здесь мы добавляем кастомные теги для каждого трейса — HTTP статусы и размеры запросов. Это поможет быстрее находить проблемные паттерны.
Теперь о том, как это использовать в бою. Первое — ищите длинные операции. Jaeger умеет показывать критический путь и аномально долгие спаны. Второе — смотрите на ошибки. Если один сервис постоянно ретраит запросы к другому, что-то явно не так. Третье — следите за паттернами вызовов. Иногда один глупый запрос может вызвать каскад из сотни других запросов.
И последний совет — не пытайтесь трейсить все подряд. Определите критичные бизнес-операции и сфокусируйтесь на них. Иначе рискуете утонуть в море бесполезных данных.
🏴☠️ @happy_devops
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