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

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

➤ 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
Работаем с CSV в командной строке

Нужно быстро обработать CSV файл без открытия Excel?

Комбинация утилит для работы с CSV

# Установка csvkit для удобной работы
pip install csvkit

# Просмотр структуры
csvstat data.csv

# Фильтрация строк
csvgrep -c "status" -m "active" data.csv

# Выбор колонок
csvcut -c "name,email,phone" data.csv

# Сортировка
csvsort -c "date" -r data.csv

# А если нет csvkit - используем awk:
awk -F',' '$3 > 1000 {print $1 "," $3}' data.csv


Идеально для быстрого анализа данных, подготовки данных для скриптов

🌐 @helcode | #bash
👍3
Шифруем файлы с GPG

Нужно безопасно передать конфиденциальные файлы или хранить пароли?

Шифрование с помощью GPG

# Генерация ключевой пары
gpg --full-generate-key

# Шифрование файла для получателя
gpg --encrypt --recipient alice@company.com secret_document.txt

# Расшифровка
gpg --decrypt secret_document.txt.gpg > decrypted.txt

# Шифрование симметричным ключом (только пароль)
gpg --symmetric --cipher-algo AES256 file.txt


🛠 Лучшие практики:

➤ Используйте надежные парольные фразы
➤ Храните закрытый ключ в безопасном месте
➤ Для конфигов используйте симметричное шифрование

🌐 @helcode | #bash
👍2
Работа с API через curl

Нужно протестировать API или автоматизировать запросы?

curl с правильными заголовками и аутентификацией

# Базовый GET запрос
curl -X GET "https://api.example.com/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN"

# POST с JSON телом
curl -X POST "https://api.example.com/users" \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@example.com"}'

# Загрузка файла
curl -X POST "https://api.example.com/upload" \
-F "file=@document.pdf" \
-F "description=Important document"

# Сохраняем cookies для сессии
curl -c cookies.txt -X POST "https://api.example.com/login" \
-d "username=user&password=pass"


Полезные флаги:

-v для verbose вывода
--retry 3 для повторения при ошибках
--max-time 10 для таймаута

🌐 @helcode | #bash
👍3
Docker: оптимизация образов

Docker образы слишком большие и медленно собираются?

Многоступенчатая сборка и оптимизация слоев

# Многоступенчатая сборка для Python
FROM python:3.9-slim as builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .

ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]


🛠 Советы по оптимизации:

➤ Используйте .dockerignore
➤ Объединяйте RUN команды
➤ Копируйте requirements.txt отдельно для кеширования
➤ Используйте легковесные базовые образы (alpine, slim)

🌐 @helcode | #docker
👍3