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
HuggingFace для занятых: нейронки без лишней мороки 🤖

HuggingFace — это как GitHub для ML моделей. Но вместо кода тут нейронки, а вместо веток — разные версии весов. И поиск тут работает в разы удобнее: сразу видно метрики, примеры использования и сценарии применения.

Pipeline — главный инструмент для быстрого старта. Он инкапсулирует три этапа работы с моделью: подготовку данных, инференс и пост-обработку. На практике выглядит так:

from transformers import pipeline

# Базовый пайплайн для классификации
classifier = pipeline('sentiment-analysis')

# Продвинутый пайплайн с указанием модели и устройства
classifier = pipeline(
task='sentiment-analysis',
model='blanchefort/rubert-base-cased-sentiment',
device=0 # 0 для GPU, -1 для CPU
)


Каждая модель на HuggingFace — как пакет на PyPI, только круче. Открываете карточку модели и видите:
🟣 Точность на тестовых данных
🟡 Размер модели и требования к железу
🔵 Готовые примеры кода
🟢 Список языков и форматов данных
🔘 Рейтинг от комьюнити

Для продакшена стоит использовать кэширование и батчинг:

# Кэшируем модель локально
from transformers import set_caching_enabled
set_caching_enabled(True)

# Батчинг для оптимизации
texts = ["Первый текст", "Второй текст", "Третий текст"]
results = classifier(texts, batch_size=32, truncation=True)


Искать модели просто: заходите в Models, выбираете задачу (Text Classification, Translation, Speech Recognition) и сортируете по рейтингу. Топовые модели всегда наверху, с ними точно не промахнетесь.

Для тяжелых моделей есть ускорители:

# Квантизация для уменьшения веса модели
classifier = pipeline('sentiment-analysis',
model='blanchefort/rubert-base-cased-sentiment',
torch_dtype='auto', # автоматически выберет оптимальный формат
device_map='auto' # распределит по доступным устройствам
)


А для тонкой настройки под свои задачи HuggingFace предлагает Trainer API — но это уже тема для отдельного поста.

🏴‍☠️ @happy_devops
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Как пережить собеседование и не потерять веру в себя

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

За красивыми словами о культурном фите и командных ценностях прячется жесткая реальность: нас оценивают, сравнивают и часто отвергают. А после очередного rejection letter самооценка падает ниже уровня продакшена в пятницу вечером.

Но собеседование — не экзамен на профпригодность. Это диалог двух профессионалов. Интервьюер ищет не энциклопедию на ножках, а человека, который умеет думать и решать проблемы. Не знаешь точный флаг kubectl? Расскажи, как будешь искать решение. Забыл синтаксис ansible? Объясни логику работы.

Записывайте каждое собеседование. Не ответы — ощущения. Где начали нервничать? Какие вопросы поставили в тупик? Что можно было сказать иначе? Превратите каждый фейл в точку роста.

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

Ну и лайфхак напоследок: после сложных вопросов выдыхайте. Буквально. Глубокий вдох поможет мозгу переключиться и найти решение. А rejection letter сохраните — через год перечитаете и посмеетесь.

🏴‍☠️ @happy_devops
🔥5
Кстати. У нас есть островок здравого смысла в этом безумном море — чат "HappyDevops Club" для тех, кто устал от всякой мишуры и хочет нормального общения.

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

А еще у нас можно просто потрещать за жизнь. Потому что DevOps — не только про CI/CD и Kubernetes. Иногда нужно обсудить, куда податься после очередного сокращения, как не психануть от токсичного менеджера или где найти толковых джунов в команду.

У нас нет священных коров и запретных тем. Хочешь обсудить, почему новый фреймворк — это переоцененный хайп? Вперед! Считаешь, что все делают мониторинг неправильно? Докажи! Узнал классный хак для отладки продакшена? Делись!

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

🏴‍☠️ ЧАТ @happy_devops | https://news.1rj.ru/str/+HlvAVVBNC2Y5ZmRi
Пошаговый гайд по масштабированию в продакшене: от теории к практике 🚀

Разберем каждый этап масштабирования с реальными примерами и псевдокодом. Погнали!

Вертикальное масштабирование. Начинаем с простого — увеличиваем мощность серверов. Мониторим нагрузку через Prometheus:

# CPU под нагрузкой больше 80%
rate(node_cpu_seconds_total{mode="system"}[1m]) > 0.8

# RAM забит под завязку
node_memory_MemFree_bytes / node_memory_MemTotal_bytes < 0.1


Когда метрики в красной зоне — апгрейдим железо. Но это временное решение, пора думать о горизонтальном масштабировании.

Балансировка нагрузки — наш следующий шаг. Простой конфиг Nginx для Round Robin:

upstream backend {
server app1.example.com:8080;
server app2.example.com:8080;
server app3.example.com:8080;
}


Теперь запросы равномерно распределяются между серверами. При падении одной ноды трафик автоматически уйдет на живые сервера.

База данных — самое интересное. Начинаем с репликации в PostgreSQL:

-- На мастере
CREATE PUBLICATION app_pub FOR ALL TABLES;

-- На реплике
CREATE SUBSCRIPTION app_sub
CONNECTION 'host=master dbname=app'
PUBLICATION app_pub;


Когда и этого мало — включаем шардинг. Пример логики маршрутизации:

def get_shard(user_id):
shard_num = user_id % TOTAL_SHARDS
return f"shard_{shard_num}"

def save_data(user_id, data):
shard = get_shard(user_id)
shard_db = get_database(shard)
shard_db.save(data)


Асинхронная обработка творит чудеса. Выносим тяжелые задачи в очереди:

# Вместо прямой отправки
def process_order(order):
send_notification() # блокирующая операция
generate_invoice() # тоже долго
update_warehouse() # и это тоже

# Используем очереди
def process_order(order):
queue.publish('notifications', order_id)
queue.publish('invoices', order_id)
queue.publish('warehouse', order_id)
return 'Processing started'


Кэширование — must have для высоких нагрузок. Redis спасает от лишних запросов к базе:

def get_user_data(user_id):
# Сначала смотрим в кэш
cached = redis.get(f"user:{user_id}")
if cached:
return json.loads(cached)

# При промахе идем в базу
data = database.query(user_id)
redis.set(f"user:{user_id}", json.dumps(data), ex=3600)
return data


Оптимизация кода не менее важна. Например, в Go используем горутины для параллельной обработки:

func processItems(items []Item) {
resultChan := make(chan Result, len(items))

for _, item := range items {
go func(i Item) {
result := heavyProcessing(i)
resultChan <- result
}(item)
}

// Собираем результаты
var results []Result
for range items {
results = append(results, <-resultChan)
}
}


И наконец, graceful degradation. Отключаем тяжелые фичи при высокой нагрузке:

def search_products(query):
if is_high_load():
# Простой поиск по точному совпадению
return basic_search(query)
else:
# Полнотекстовый поиск с фильтрами
return full_search(query)

def is_high_load():
return cpu_usage > 80 or response_time > 500


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

PS: Ссылка на картинку в хорошем разрешении

🏴‍☠️ @happy_devops
🔥53👍3
Увольнение: трагедия или новые возможности?

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

Первые дни после увольнения мозг генерит два типа мыслей. Первая: «Да как они посмели, я же их продакшен с колен поднимал!» Вторая: «А точно я не самозванец, и кому теперь нужен девопс без проектов?» Обе мысли ведут в никуда.

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

Старая работа схлопнулась как кластер в пятницу — и освободила место для чего-то нового. Для тех проектов, где вас оценят не за готовность сидеть ночами, а за умение выстраивать процессы. Где можно будет внедрять современные практики, а не поддерживать легаси «потому что так исторически сложилось».

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

🏴‍☠️ @happy_devops
👍53🔥1
Типичные грабли шардирования: выбираем правильный ключ 🔑

В позавчерашнем примере мы шардили базу по 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 секунд у тебя готовая среда с терминалом:

# Проверим, что окружение поднялось
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
🔥6👍4👎1
Книга "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