Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Планировщики задач в Linux: Ваш выбор?

Доброго времени суток! Решили изучить, какие инструменты для запуска задач по расписанию используются чаще всего. Ваш голос поможет составить точную картину. Голосуйте за Ваш основной планировщик!
Anonymous Poll
70%
cron — классика, проверенная временем
25%
systemd timers — современный и интегрированный
0%
anacron — для ноутбуков и нерегулярного аптайма
0%
Клауд/оркестратор (K8s CronJobs, AWS CloudWatch)
4%
Свой скрипт/другое (напиши в комментах!)
Мониторим свое приложение: пишем кастомные метрики для Prometheus

Встроенных метрик системы часто недостаточно. Хочется знать, сколько пользователей онлайн, сколько запросов в секунду обрабатывает Ваше приложение, какая бизнес-логика выполняется. Давайте научим ваше приложение разговаривать с Prometheus!

🛠 Пример:
from prometheus_client import Counter, Gauge, start_http_server
import time

# Создаем метрики
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP Requests')
USERS_ONLINE = Gauge('users_online', 'Number of online users')

# В обработчике запроса
def handle_request():
REQUEST_COUNT.inc() # Увеличиваем счетчик
USERS_ONLINE.set(get_online_users()) # Устанавливаем значение

# Запускаем HTTP сервер для метрик
start_http_server(8000)


➤ Counter - только увеличивается (запросы, ошибки)
➤ Gauge - может увеличиваться и уменьшаться (пользователи онлайн, температура)
➤ Histogram - распределение значений (время ответа)

🌐 @helcode | #python
👍1
Балансировщики нагрузки: или как разделить ношу на несколько плеч

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

➤ Round Robin - по очереди
➤ Least Connections - тому, у кого меньше подключений
➤ IP Hash - один и тот же пользователь всегда попадает на один сервер

Типы балансировщиков:
➤ L4 (Transport) - работает на уровне TCP/UDP
➤ L7 (Application) - работает на уровне HTTP, умнее

Популярные решения:
➤ nginx - простой и эффективный
➤ HAProxy - профессиональное решение
➤ Cloud Load Balancers - от облачных провайдеров

А Вы какой балансировщик используете? С какими интересными кейсами сталкивались?

Балансировщик нагрузки - это как администратор в клубе: решает, кого впустить, кому сказать "мест нет", а VIP-клиентов (по IP hash) всегда проводит к их любимому столику (серверу).


🌐 @helcode
2🥱1🤝1
Nginx как балансировщик: включаем многопоточность для нашего приложения

У Вас несколько экземпляров приложения и нужно распределять между ними нагрузку. Nginx может быть не только веб-сервером, но и отличным балансировщиком.

🛠 Пример (конфиг для балансировки):
upstream backend {
server backend1.example.com:8000 weight=3;
server backend2.example.com:8001;
server backend3.example.com:8002 backup;
}

server {
listen 80;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}


weight=3 - в 3 раза больше запросов на этот сервер
backup - использовать только если остальные упали
proxy_set_header - передавать заголовки клиента

А Вы настраивали health checks в nginx? Какие стратегии балансировки используете?

Nginx в роли балансировщика это как шеф-повар, который не готовит сам, а раздает задания поварам-стажерам (бэкендам), следя, чтобы никто не перегрузился.


🌐 @helcode
👀3
Кеширование: или как не делать одну и ту же работу дважды

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

➤ Client-side caching - браузер кеширует статику
➤ Server-side caching - Redis, Memcached для данных
➤ CDN caching - кеширование контента географически ближе к пользователям
➤ Database caching - кеш-запросов в самой БД

Когда использовать:
➤ Данные редко меняются
➤ Вычисления тяжелые
➤ Частые одинаковые запросы

А вы какой подход к кешированию используете? Redis, Memcached или что-то другое? Делитесь опытом!

Кеш - это как шпаргалка на экзамене: зачем каждый раз вычислять интеграл, если можно посмотреть в готовый ответ? Главное - вовремя обновлять шпаргалки, когда билеты меняются.


🌐 @helcode
👍4
Redis: 5 команд, которые сделают вас мастером кеширования

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

Пример:
# Положить значение
SET user:123 "John Doe" EX 3600 # EX - время жизни в секундах

# Получить значение
GET user:123

# Проверить существование ключа
EXISTS user:123

# Установить несколько значений за раз
MSET user:123 "John" user:456 "Jane"

# Увеличить счетчик
INCR page_views


EX 3600 устанавливает время жизни ключа в 1 час. Автоматическое удаление устаревших данных - одна из крутейших фич Redis.

Какую самую необычную задачу вы решали с помощью Redis?

Redis - это диктофон для ваших данных: записал, прослушал, а через час оно само стирается. Удобно!


🌐 @helcode | #bash
👍1
Кешируем результаты API-запросов в Redis

Ваш скрипт делает запросы к медленному API, которое отвечает одними и теми же данными. Давайте сохраним результат в Redis и будем использовать его вместо повторных запросов!

🛠 Пример:
import redis
import requests
import json
import time

r = redis.Redis(host='localhost', port=6379, db=0)

def get_cached_data(user_id):
cache_key = f"user:{user_id}"
cached = r.get(cache_key)

if cached:
print("Данные из кеша!")
return json.loads(cached)

# Если нет в кеше - делаем запрос к API
print("Делаем запрос к API...")
response = requests.get(f"https://api.example.com/users/{user_id}")
data = response.json()

# Сохраняем в кеш на 5 минут
r.setex(cache_key, 300, json.dumps(data))
return data

# Использование
user_data = get_cached_data(123)


setex устанавливает значение с временем жизни. Через 5 минут ключ автоматически удалится.

А вы кешируете запросы к внешним API? Какие библиотеки или подходы используете?

Кеширование API-запросов - это как записывать сериал на флешку: не нужно ждать загрузки каждый раз, когда хотите пересмотреть.


P.S. Если Вам интересно, как мы настраивали кеширование в нашем боте и с чем столкнулись на практике - пишите об этом в комментариях! Спойлер: ошибок было действительно много...


🌐 @helcode | #python
👍4
Очереди сообщений: или как разгрузить ваш основной сервис

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

Ключевые понятия:
➤ Producer - производитель (отправляет сообщения)
➤ Consumer - потребитель (обрабатывает сообщения)
➤ Queue - очередь (хранит сообщения)
➤ Broker - посредник (управляет очередями)

Популярные решения:
➤ RabbitMQ - классика, много возможностей
➤ Redis Streams - просто, если уже есть Redis
➤ Apache Kafka - для больших объемов данных

Вы используете очереди в своих проектах? Для каких задач?


Очередь сообщений - это как почтовый ящик: можно бросать письма, даже когда почтальон спит. Он разберет их утром.


🌐 @helcode
1🔥1
RabbitMQ: управляем очередями как профессионалы

RabbitMQ - один из самых популярных брокеров сообщений. Вот основные команды для управления им из командной строки.

Пример:
# Создать очередь
rabbitmqadmin declare queue name=video_processing durable=true

# Отправить сообщение
rabbitmqadmin publish exchange=amq.default routing_key=video_processing payload="hello"

# Посмотреть статистику
rabbitmqctl list_queues name messages_ready messages_unacknowledged

# Создать пользователя
rabbitmqctl add_user myuser mypassword

# Настроить права
rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"


durable=true делает очередь устойчивой - сообщения не потеряются при перезагрузке RabbitMQ.

Какие самые интересные паттерны с очередями Dы реализовывали? Work queues, pub/sub?

Команда rabbitmqctl - это как пульт управления для Dаших очередей: можно посмотреть, кто в очереди стоит и сколько народу ждет своей очереди.


🌐 @helcode | #bash
👀51
Пишем простую систему обработки задач с Redis RQ

Нужен простой способ выполнять фоновые задачи без настройки сложных брокеров? Redis RQ (Redis Queue) - минималистичное и эффективное решение для Python.

Код:
# worker.py
import requests
from rq import Queue
from redis import Redis
from worker import count_words

# Подключаемся к Redis
redis_conn = Redis()
q = Queue(connection=redis_conn)

# Отправляем задачу в очередь
job = q.enqueue(count_words, 'https://example.com')
print(f"Задача {job.id} добавлена в очередь!")

# Запускаем воркер в отдельном терминале:
# rq worker


# tasks.py
import requests

def count_words(url):
response = requests.get(url)
word_count = len(response.text.split())
print(f"На странице {url} слов: {word_count}")
return word_count


RQ использует Redis как брокер. Воркеры постоянно слушают очередь и выполняют задачи по мере их поступления.

А Вы пробовали RQ или другие простые системы очередей? Как впечатления?


Redis RQ - это как нанять стажера на подработку: отдаешь задачу и забываешь, а он тихо ее выполняет где-то в фоне.


🌐 @helcode | #python
👍2
Контейнеризация vs Виртуализация: битва технологий

Нужно изолировать приложения, но не знаете что выбрать - виртуальные машины или контейнеры? Давайте разберемся в разнице.

➤ Виртуализация: полная эмуляция оборудования. Каждая VM имеет свою ОС. Тяжеловесная, но полная изоляция.
➤ Контейнеризация: изоляция на уровне процессов. Все контейнеры используют ядро хостовой ОС. Легковесная, быстрый старт.

Сравнение:

Виртуальные машины:
✓ Полная изоляция
✓ Разные ОС на одном железе
✗ Высокие накладные расходы

Контейнеры:
✓ Быстрый запуск
✓ Низкие накладные расходы
✗ Общее ядро ОС


Вы используете виртуализацию или контейнеризацию? В каких случаях что используете?


Виртуализация - это как снять отдельную квартиру для каждого гостя. Контейнеризация - как расселить гостей по комнатам в одном большом доме. Экономичнее, но соседи ближе.


🌐 @helcode
👍3
Docker Compose: оркестрируем многокомпонентные приложения

Ваше приложение состоит из веб-сервера, базы данных и кеша. Запускать каждый контейнер вручную - мука. Docker Compose позволяет описать всю инфраструктуру в одном файле.

Пример (docker-compose.yml):
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
- redis

db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data

redis:
image: redis:alpine

volumes:
db_data:


depends_on гарантирует, что база и Redis запустятся до веб-сервера. Volumes сохраняют данные между перезапусками.

Какие самые сложные композ-файлы Вам приходилось писать?

Docker Compose - это как дирижер оркестра: одним взмахом палочки запускает всю инфраструктуру в идеальной гармонии.


🌐 @helcode | #yaml
🔥2
Поднимаем локальное окружение с WordPress + MySQL за 5 минут

Нужно быстро протестировать плагин или тему WordPress? Не нужно устанавливать веб-сервер, PHP и MySQL на свою машину. Docker Compose сделает все за Вас!

Пример (docker-compose.yml):
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql

wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
depends_on:
- db

volumes:
db_data:


Как использовать:
docker-compose up -d
# Открываем http://localhost:8080


Весь WordPress и MySQL запускаются в изолированных контейнерах. После остановки данные сохраняются в volume.

Локальное окружение на Docker - это как играть в симулятор жизни: можно экспериментировать, не боясь сломать что-то важное.


🌐 @helcode | #yaml #bash
👍1
Serverless: или код без серверной головной боли

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

Подходы к задаче:
➤ FaaS (Function as a Service) - запуск отдельных функций
➤ Платите за выполнение - только когда код работает
➤ Автоматическое масштабирование - от 0 до тысяч параллельных выполнений

Популярные платформы:
➤ AWS Lambda
➤ Google Cloud Functions
➤ Azure Functions

А также российские аналоги (таковы современные реалии...):
- Yandex Cloud Functions 🇷🇺
- VK Cloud Solutions 🇷🇺
- SberCloud Cloud Functions 🇷🇺
- Selectel Serverless 🇷🇺

Плюсы:
✓ Нет управления серверами
✓ Автоматическое масштабирование
✓ Плата только за использование

Минусы:
✗ Cold start проблемы
✗ Ограничения по времени выполнения
✗ Vendor lock-in

Вы уже пробовали serverless? Для каких задач он подошел лучше всего?

Serverless - это как такси: платишь только за поездку, не нужно покупать машину, заправлять ее и делать техобслуживание.


🌐 @helcode
🔥2🤯1
AWS CLI: управляем облаком из терминала

Постоянно заходить в веб-консоль AWS неудобно. AWS CLI позволяет управлять всеми сервисами прямо из терминала. Вот самые полезные команды.

Пример:
# Настроить профиль
aws configure

# Посмотреть EC2 инстансы
aws ec2 describe-instances

# Создать S3 бакет
aws s3 mb s3://my-unique-bucket-name

# Загрузить файл в S3
aws s3 cp file.txt s3://my-bucket/

# Создать Lambda функцию
aws lambda create-function --function-name my-function \
--runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler --zip-file fileb://function.zip


AWS CLI использует те же права доступа, что и веб-консоль. Настройте IAM-роли правильно!

Какие ваши любимые команды AWS CLI?

AWS CLI - это как пульт от всего облака: не нужно вставать с кресла, чтобы управлять целым ЦОДом.


🌐 @helcode | #bash
🔥3
Пишем свою первую Lambda функцию на Python

Хотите попробовать serverless, но кажется сложным? Давайте создадим простейшую Lambda функцию, которая возвращает "Hello, World!".

🛠 Пример:
import json

def lambda_handler(event, context):
# event содержит данные запроса
name = event.get('name', 'World')

return {
'statusCode': 200,
'body': json.dumps({
'message': f'Hello, {name}!'
})
}


Как развернуть:
# Упаковываем код в zip
zip function.zip lambda_function.py

# Создаем функцию в AWS
aws lambda create-function --function-name hello-world \
--runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler --zip-file fileb://function.zip

# Тестируем
aws lambda invoke --function-name hello-world \
--payload '{"name": "Digital Automation Lab"}' output.txt


Функция получает event (данные запроса) и context (информация о выполнении), а возвращает ответ в определенном формате.

А вы уже пробовали Lambda? Какие функции написали?

Написание Lambda функции - это как отправка письма по почте: написал, отправил, а почтальон (AWS) уже знает, куда его доставить и как обработать.


🌐 @helcode | #python
👍21
Infrastructure as Code: или как управлять серверами как кодом

Вы вручную настраиваете серверы, а потом не можете воспроизвести ту же конфигурацию? IaC - это подход, при котором инфраструктура описывается в коде и разворачивается автоматически.

Аспекты:
➤ Декларативный подход - описываем ЖЕЛАЕМОЕ состояние
➤ Идемпотентность - многократное применение дает один результат
➤ Версионирование - инфраструктура в Git

Популярные инструменты:
➤ Terraform - мультиоблачный, свой язык HCL
➤ CloudFormation - только AWS, YAML/JSON
➤ Pulumi - использование реальных языков программирования

Вы уже используете IaC? Какой инструмент выбрали и почему?

IaC - это как рецепт в кулинарии: можно воспроизвести тот же торт сто раз, и он всегда будет одинаково вкусным. Без рецепта - как угадывать ингредиенты.


🌐 @helcode
👍2
Terraform: основные команды для управления инфраструктурой

Terraform стал стандартом для IaC. Вот шпаргалка по основным командам, которые нужно знать каждому инженеру.

Код:
# Инициализация проекта
terraform init

# Просмотр плана изменений
terraform plan

# Применение изменений
terraform apply

# Уничтожение инфраструктуры
terraform destroy

# Просмотр состояния
terraform show

# Обновление состояния
terraform refresh


Всегда запускайте terraform plan перед apply! Это покажет, что именно изменится, и спасет от неожиданностей.

Какие самые сложные вещи вы описывали в Terraform? Базы данных, Kubernetes?

Команда terraform destroy - это как красная кнопка: нажимаешь, и вся тщательно построенная инфраструктура исчезает. Страшно, но иногда очень нужно.


🌐 @helcode | #bash
🤩21🔥1
Мониторим изменения в файлах inotifywait

Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?

inotifywait - утилита для отслеживания событий файловой системы

# Установка
sudo apt install inotify-tools

# Мониторим изменения в JS файлах
inotifywait -m -e modify,create,delete --format "%w%f" ./src/*.js |
while read file; do
echo "Файл $file изменен, перезагружаем сервер..."
pkill -f "node server.js"
node server.js &
done


🛠 Варианты использования:
- Автоперезагрузка dev-сервера
- Синхронизация файлов при изменении
- Запуск тестов при изменении кода

🌐 @helcode | #bash
👍2
Анализируем логи с awk

Нужно быстро проанализировать логи и получить статистику?

awk для сложной обработки текста

# Топ IP-адресов в access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# Статистика HTTP-статусов
awk '{print $9}' access.log | sort | uniq -c | sort -nr

# Средний размер ответа по URL
awk '{sum[$7] += $10; count[$7]++} END {for (url in sum) print url, sum[url]/count[url]}' access.log


Преимущества:
➤ Работает с огромными файлами
➤ Гибкие условия фильтрации
➤ Можно считать суммы, средние, группировать

🌐 @helcode | #bash
👍4