🤔 Экспортеры в Prometheus?
Наиболее популярные:
- Node Exporter — метрики ОС.
- Blackbox Exporter — проверка доступности по HTTP, TCP, ICMP.
- Cadvisor — мониторинг контейнеров.
- Pushgateway — при необходимости push-метрик.
- Custom Exporters — написанные для специфических сервисов
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Наиболее популярные:
- Node Exporter — метрики ОС.
- Blackbox Exporter — проверка доступности по HTTP, TCP, ICMP.
- Cadvisor — мониторинг контейнеров.
- Pushgateway — при необходимости push-метрик.
- Custom Exporters — написанные для специфических сервисов
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как работает DRCP?
DRCP (Database Resident Connection Pooling) — это механизм в Oracle Database, который уменьшает нагрузку на базу данных за счет повторного использования соединений между клиентами и сервером. DRCP полезен для сред с большим количеством краткоживущих соединений, например, веб-приложений.
🚩Почему нужен DRCP?
Экономит ресурсы – вместо создания новых соединений база использует пул уже существующих.
Снижает нагрузку на сервер – меньше процессов, меньше потребления памяти и CPU.
Ускоряет работу – повторное использование соединений сокращает время на установку нового подключения.
Идеально для многопоточных сред – например, PHP-приложений, где соединения краткосрочные.
🚩Как DRCP работает?
🟠Клиент делает запрос на подключение
Клиент (например, веб-приложение) отправляет запрос на подключение к базе. Вместо создания нового процесса сервер ищет свободное соединение в пуле DRCP.
🟠DRCP предоставляет соединение
Если в пуле есть свободное соединение, оно передается клиенту. Если нет – создается новое (если не превышен лимит).
🟠Клиент выполняет SQL-запрос
После завершения работы клиент "освобождает" соединение. Вместо закрытия соединение возвращается в пул, чтобы быть использованным другим клиентом.
🟠Диспетчер соединений управляет пулом
Connection Broker (диспетчер соединений) следит за балансировкой нагрузки и распределяет соединения между клиентами.
🚩Как включить DRCP?
Включаем DRCP на сервере
Проверяем статус пула
Подключаем клиента с использованием DRCP
Ставь 👍 и забирай 📚 Базу знаний
DRCP (Database Resident Connection Pooling) — это механизм в Oracle Database, который уменьшает нагрузку на базу данных за счет повторного использования соединений между клиентами и сервером. DRCP полезен для сред с большим количеством краткоживущих соединений, например, веб-приложений.
🚩Почему нужен DRCP?
Экономит ресурсы – вместо создания новых соединений база использует пул уже существующих.
Снижает нагрузку на сервер – меньше процессов, меньше потребления памяти и CPU.
Ускоряет работу – повторное использование соединений сокращает время на установку нового подключения.
Идеально для многопоточных сред – например, PHP-приложений, где соединения краткосрочные.
🚩Как DRCP работает?
🟠Клиент делает запрос на подключение
Клиент (например, веб-приложение) отправляет запрос на подключение к базе. Вместо создания нового процесса сервер ищет свободное соединение в пуле DRCP.
🟠DRCP предоставляет соединение
Если в пуле есть свободное соединение, оно передается клиенту. Если нет – создается новое (если не превышен лимит).
🟠Клиент выполняет SQL-запрос
После завершения работы клиент "освобождает" соединение. Вместо закрытия соединение возвращается в пул, чтобы быть использованным другим клиентом.
🟠Диспетчер соединений управляет пулом
Connection Broker (диспетчер соединений) следит за балансировкой нагрузки и распределяет соединения между клиентами.
🚩Как включить DRCP?
Включаем DRCP на сервере
EXEC DBMS_CONNECTION_POOL.START_POOL();
Проверяем статус пула
SELECT * FROM V$CPOOL_STATS;
Подключаем клиента с использованием DRCP
CONNECT user/password@database:pooled
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое Basic Auth?
Basic Auth — это простой способ авторизации в HTTP, при котором имя пользователя и пароль передаются в заголовке запроса, закодированные в Base64. Используется в базовых API или в системе без сессий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Basic Auth — это простой способ авторизации в HTTP, при котором имя пользователя и пароль передаются в заголовке запроса, закодированные в Base64. Используется в базовых API или в системе без сессий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Видим что места нет находим большой файл 5 Гб например удаляем его а пишет что места всё равно нет в чём причина?
В Linux удаленный файл может оставаться в памяти, если он все еще используется запущенным процессом. Это происходит, потому что файл не удаляется физически, пока его дескриптор (file descriptor) открыт.
Файл все еще используется процессом
Файл удален, но все еще открыт (
Файл удален, но был записан в смонтированный том
🚩Проверить, какие процессы держат удаленный файл (`lsof`)
Команда
Вывод
Решение: Перезапустить процесс:
или
🚩Освободить место вручную (`/proc`)
Если процесс нельзя перезапустить, можно освободить занятую память без перезапуска.
Вывод
Очистить файл, не перезапуская процесс
🚩Проверить монтирование (Docker, NFS, tmpfs)
Если файл хранился в смонтированном томе, он может не удалиться сразу.
Проверить монтированные диски:
Если файл был в Docker-контейнере, проверить объемы:
Ставь 👍 и забирай 📚 Базу знаний
В Linux удаленный файл может оставаться в памяти, если он все еще используется запущенным процессом. Это происходит, потому что файл не удаляется физически, пока его дескриптор (file descriptor) открыт.
Файл все еще используется процессом
Файл удален, но все еще открыт (
deleted в /proc) Файл удален, но был записан в смонтированный том
🚩Проверить, какие процессы держат удаленный файл (`lsof`)
Команда
lsof | grep deleted
Вывод
nginx 1234 www-data 4w REG 8,1 5G /var/log/nginx/access.log (deleted)
Решение: Перезапустить процесс:
systemctl restart nginx
или
kill -HUP 1234 # Закрыть процесс (PID = 1234)
🚩Освободить место вручную (`/proc`)
Если процесс нельзя перезапустить, можно освободить занятую память без перезапуска.
ls -l /proc/*/fd/ | grep deleted
Вывод
lrwx------ 1 root root 64 Feb 21 14:23 /proc/5678/fd/4 -> /var/log/nginx/access.log (deleted)
Очистить файл, не перезапуская процесс
> /proc/5678/fd/4
🚩Проверить монтирование (Docker, NFS, tmpfs)
Если файл хранился в смонтированном томе, он может не удалиться сразу.
Проверить монтированные диски:
df -h
mount | grep /var/log
Если файл был в Docker-контейнере, проверить объемы:
docker system df
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 С помощью какого файла можно вывести данные после применения Terraform?
Используется файлoutputs.tf , где описываются выходные значения
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Используется файл
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4
🤔 Что возвращает функция в bash?
В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее.
🚩Как возвращать значения из функции?
🟠Код завершения (exit status)
Чтобы явно задать код завершения функции, используется команда
🟠Вывод данных через `echo`
Для передачи данных из функции (например, строки или числа) можно использовать
🟠Изменение глобальных переменных
Функция может менять значения глобальных переменных, которые затем используются за ее пределами
🚩Почему это важно?
🟠Код завершения
Используется в сценариях для проверки, выполнилась ли функция успешно. Значение
🟠Вывод через `echo`
Удобен для передачи данных из функции.
🟠Изменение переменных
Полезно, если функция должна сохранять данные для дальнейшей обработки.
Ставь 👍 и забирай 📚 Базу знаний
В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее.
🚩Как возвращать значения из функции?
🟠Код завершения (exit status)
Чтобы явно задать код завершения функции, используется команда
return. my_function() {
if [[ $1 -gt 0 ]]; then
return 0 # Успех
else
return 1 # Ошибка
fi
}
my_function 5
echo $? # Выведет 0 (успех)🟠Вывод данных через `echo`
Для передачи данных из функции (например, строки или числа) можно использовать
echo. Вывод можно перехватить через подстановку команд $()my_function() {
echo "Hello, $1!"
}
result=$(my_function "world")
echo "$result" # Выведет "Hello, world!"🟠Изменение глобальных переменных
Функция может менять значения глобальных переменных, которые затем используются за ее пределами
my_function() {
result=$(( $1 + $2 ))
}
my_function 3 7
echo $result # Выведет 10🚩Почему это важно?
🟠Код завершения
Используется в сценариях для проверки, выполнилась ли функция успешно. Значение
0 обычно означает успех, а любое другое число — ошибку.🟠Вывод через `echo`
Удобен для передачи данных из функции.
🟠Изменение переменных
Полезно, если функция должна сохранять данные для дальнейшей обработки.
# Функция проверки файла
check_file() {
if [[ -f $1 ]]; then
echo "Файл $1 существует."
return 0
else
echo "Файл $1 не найден."
return 1
fi
}
# Вызов функции
check_file "/etc/passwd"
status=$? # Сохраняем код завершения
if [[ $status -eq 0 ]]; then
echo "Продолжаем работу..."
else
echo "Останавливаемся из-за ошибки."
fi
Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие есть опции монтирования?
Примеры:
- ro / rw — только чтение или чтение/запись;
- noexec — запрет запуска файлов;
- nosuid, nodev — отключение SUID/девайсов;
- defaults — набор стандартных флагов;
- uid, gid — владельцы монтированной ФС;
- relatime, noatime — управление обновлением временных меток.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Примеры:
- ro / rw — только чтение или чтение/запись;
- noexec — запрет запуска файлов;
- nosuid, nodev — отключение SUID/девайсов;
- defaults — набор стандартных флагов;
- uid, gid — владельцы монтированной ФС;
- relatime, noatime — управление обновлением временных меток.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что слышали про rancher kubernetes?
Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации.
🚩Зачем нужен Rancher?
🟠Управление несколькими кластерами
Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре.
🟠Упрощенная установка и настройка
С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями.
🟠Безопасность и контроль доступа
Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы.
🟠Мониторинг и логирование
Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов.
🟠Развертывание приложений
Поддерживает Helm-чарты и стандартные манифесты Kubernetes.
🚩Как работает Rancher?
🟠Rancher Server
центральный компонент, управляющий кластерами и предоставляющий UI/API.
🟠Kubernetes-кластеры
могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE).
🟠Rancher Agents
агенты, установленные в кластерах для обеспечения связи с сервером Rancher.
🚩Пример развертывания Rancher
Для развертывания Rancher можно использовать Docker
Ставь 👍 и забирай 📚 Базу знаний
Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации.
🚩Зачем нужен Rancher?
🟠Управление несколькими кластерами
Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре.
🟠Упрощенная установка и настройка
С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями.
🟠Безопасность и контроль доступа
Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы.
🟠Мониторинг и логирование
Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов.
🟠Развертывание приложений
Поддерживает Helm-чарты и стандартные манифесты Kubernetes.
🚩Как работает Rancher?
🟠Rancher Server
центральный компонент, управляющий кластерами и предоставляющий UI/API.
🟠Kubernetes-кластеры
могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE).
🟠Rancher Agents
агенты, установленные в кластерах для обеспечения связи с сервером Rancher.
🚩Пример развертывания Rancher
Для развертывания Rancher можно использовать Docker
docker run -d --name=rancher --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest
Ставь 👍 и забирай 📚 Базу знаний
🤔1
🤔 Как попасть в запущенный в Docker контейнер?
Возможно подключиться к работающему контейнеру в интерактивном режиме через оболочку (например, sh или bash). Это позволяет выполнять команды прямо внутри контейнера, как в обычной системе.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Возможно подключиться к работающему контейнеру в интерактивном режиме через оболочку (например, sh или bash). Это позволяет выполнять команды прямо внутри контейнера, как в обычной системе.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊11
🤔 Как заставить процесс отпустить файловые дескрипторы?
Если процесс удерживает файловые дескрипторы и вам нужно их освободить, то есть несколько способов это сделать.
🟠Завершение процесса
Самый простой способ — завершить процесс, который удерживает файловые дескрипторы.
или принудительно
Чтобы найти процессы, удерживающие файлы
или
🟠Закрытие дескриптора вручную
Если вы хотите закрыть файловый дескриптор, не завершая процесс, можно использовать
1⃣Найдите открытые дескрипторы процесса:
2⃣Закройте конкретный дескриптор:
🟠Использование `gdb` для вмешательства в процесс
Если процесс нельзя перезапустить, но вы имеете к нему доступ, можно закрыть дескриптор через
🟠Перемонтирование файловой системы
Если файл удален, но все еще удерживается процессом, можно принудительно перемонтировать файловую систему:
Или использовать
🟠Использование `systemctl restart` для сервисов
Если файлы удерживаются службой (например, Nginx, Apache, MySQL), можно перезапустить службу
или
Ставь 👍 и забирай 📚 Базу знаний
Если процесс удерживает файловые дескрипторы и вам нужно их освободить, то есть несколько способов это сделать.
🟠Завершение процесса
Самый простой способ — завершить процесс, который удерживает файловые дескрипторы.
kill <PID>
или принудительно
kill -9 <PID>
Чтобы найти процессы, удерживающие файлы
lsof | grep <filename>
или
fuser <filename>
🟠Закрытие дескриптора вручную
Если вы хотите закрыть файловый дескриптор, не завершая процесс, можно использовать
lsof и /proc 1⃣Найдите открытые дескрипторы процесса:
ls -l /proc/<PID>/fd/
2⃣Закройте конкретный дескриптор:
exec 3>&-
🟠Использование `gdb` для вмешательства в процесс
Если процесс нельзя перезапустить, но вы имеете к нему доступ, можно закрыть дескриптор через
gdb: gdb -p <PID>
(gdb) call close(<FD>)
(gdb) detach
(gdb) quit
🟠Перемонтирование файловой системы
Если файл удален, но все еще удерживается процессом, можно принудительно перемонтировать файловую систему:
mount -o remount /
Или использовать
lsof для очистки удаленных файловlsof | grep deleted
🟠Использование `systemctl restart` для сервисов
Если файлы удерживаются службой (например, Nginx, Apache, MySQL), можно перезапустить службу
systemctl restart <service>
или
service <service> restart
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Как посмотреть, с какими файлами работает программа на Linux в данный момент?
Для этого используют системные утилиты, которые показывают открытые файлы по PID или по имени процесса. Это полезно для диагностики блокировок и утечек.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Для этого используют системные утилиты, которые показывают открытые файлы по PID или по имени процесса. Это полезно для диагностики блокировок и утечек.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊9
🤔 Какая компонента запускает под на ноде, какая отвечает за сеть?
В Kubernetes разные компоненты отвечают за запуск подов и сетевые настройки.
🚩Какая компонента запускает под на ноде? (`kubelet`)
Получает команды от
Запускает контейнеры через Container Runtime (Docker, containerd, CRI-O)
Следит за состоянием подов и перезапускает их при сбоях
Посмотреть логи
🚩Какая компонента отвечает за сеть? (CNI)
Назначает IP-адреса подам
Организует маршрутизацию трафика между подами и нодами
Настраивает Network Policies (безопасность сети)
Проверить работающие сетевые плагины
Вывод (если CNI работает нормально)
Если CNI не работает, поды могут застрять в
Ставь 👍 и забирай 📚 Базу знаний
В Kubernetes разные компоненты отвечают за запуск подов и сетевые настройки.
🚩Какая компонента запускает под на ноде? (`kubelet`)
Получает команды от
kube-scheduler (назначение подов) Запускает контейнеры через Container Runtime (Docker, containerd, CRI-O)
Следит за состоянием подов и перезапускает их при сбоях
systemctl status kubelet
Посмотреть логи
kubelet journalctl -u kubelet -f
🚩Какая компонента отвечает за сеть? (CNI)
Назначает IP-адреса подам
Организует маршрутизацию трафика между подами и нодами
Настраивает Network Policies (безопасность сети)
Проверить работающие сетевые плагины
kubectl get pods -n kube-system
Вывод (если CNI работает нормально)
NAME READY STATUS RESTARTS AGE
calico-node-xyz 1/1 Running 2 3d
Если CNI не работает, поды могут застрять в
ContainerCreating kubectl get pods
NAME READY STATUS RESTARTS AGE
web-server 0/1 ContainerCreating 0 10m
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое SNS и что делает?
SNS (Simple Notification Service) — это сервис для рассылки уведомлений и сообщений. Поддерживает два типа взаимодействия:
- Публикация/подписка (Pub/Sub) — рассылает сообщения на подписчиков (SQS, email, HTTP endpoints).
- Push-уведомления — на мобильные устройства.
Используется для оповещений, триггеров автоматизации и системных событий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
SNS (Simple Notification Service) — это сервис для рассылки уведомлений и сообщений. Поддерживает два типа взаимодействия:
- Публикация/подписка (Pub/Sub) — рассылает сообщения на подписчиков (SQS, email, HTTP endpoints).
- Push-уведомления — на мобильные устройства.
Используется для оповещений, триггеров автоматизации и системных событий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как бы организовал хранение и доступ к секретам?
В DevOps и Kubernetes важно безопасно хранить секретные данные (пароли, API-ключи, токены). Нельзя хранить их в коде, в
🚩HashiCorp Vault (лучший вариант для масштабных проектов)
Полностью управляемое решение для хранения и динамической ротации секретов.
Шифрование с поддержкой KMS.
API-доступ и интеграция с CI/CD.
Как получить секрет через CLI?
Как использовать в Jenkins?
🚩Kubernetes Secrets (если приложение в K8s)
Интеграция с Kubernetes, управление через
Доступ через переменные окружения или монтирование в файл.
Можно использовать
Как создать секрет?
Как использовать в
🚩AWS Secrets Manager / Azure Key Vault / GCP Secret Manager
Интеграция с облачными сервисами (IAM, Lambda, RDS).
Автоматическая ротация ключей.
Как получить секрет в AWS?
Как подключить к Kubernetes?
Используем External Secrets Operator:
🚩SOPS + GitOps (для хранения в Git, но зашифрованно)
Позволяет хранить секреты в Git без утечек.
Работает с
Как зашифровать секрет?
Как расшифровать?
Ставь 👍 и забирай 📚 Базу знаний
В DevOps и Kubernetes важно безопасно хранить секретные данные (пароли, API-ключи, токены). Нельзя хранить их в коде, в
Git, в .env файлах без шифрования. 🚩HashiCorp Vault (лучший вариант для масштабных проектов)
Полностью управляемое решение для хранения и динамической ротации секретов.
Шифрование с поддержкой KMS.
API-доступ и интеграция с CI/CD.
Как получить секрет через CLI?
vault kv put secret/db password="SuperSecret123"
vault kv get secret/db
Как использовать в Jenkins?
withVault([vaultSecrets: [[path: 'secret/db', secretValues: [['envVar': 'DB_PASS', 'vaultKey': 'password']]]]]) {
sh 'echo $DB_PASS' # Переменная доступна только внутри блока
}🚩Kubernetes Secrets (если приложение в K8s)
Интеграция с Kubernetes, управление через
kubectl. Доступ через переменные окружения или монтирование в файл.
Можно использовать
Sealed Secrets или SOPS для шифрования. Как создать секрет?
kubectl create secret generic db-secret --from-literal=password='SuperSecret123'
Как использовать в
Deployment? env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: db-secret
key: password
🚩AWS Secrets Manager / Azure Key Vault / GCP Secret Manager
Интеграция с облачными сервисами (IAM, Lambda, RDS).
Автоматическая ротация ключей.
Как получить секрет в AWS?
aws secretsmanager get-secret-value --secret-id my-secret
Как подключить к Kubernetes?
Используем External Secrets Operator:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-secret
spec:
secretStoreRef:
name: aws-secrets
kind: SecretStore
target:
name: db-secret
data:
- secretKey: password
remoteRef:
key: my-db-password
🚩SOPS + GitOps (для хранения в Git, но зашифрованно)
Позволяет хранить секреты в Git без утечек.
Работает с
KMS, PGP, age. Как зашифровать секрет?
sops --encrypt --age YOUR_PUBLIC_KEY secrets.yaml > secrets.enc.yaml
Как расшифровать?
sops --decrypt secrets.enc.yaml
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как ставить Kubernetes на bare metal и в облако?
На bare metal — чаще всего через kubeadm, k3s, Rancher, MicroK8s, либо с помощью Ansible (kubespray). В облаке — через сервисы провайдеров (EKS, GKE, AKS) или вручную на облачные ВМ, с теми же инструментами. Отличие — в настройках сети, балансировке и подключении хранилищ.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие микросервисы можно масштабировать горизонтально?
Горизонтальное масштабирование – это добавление новых экземпляров (реплик) сервиса для увеличения производительности. Оно хорошо работает для статeless (без состояния) микросервисов, где нет привязки к конкретному серверу.
🚩Какие микросервисы можно масштабировать горизонтально?
🟠Веб-серверы и API-шлюзы
Примеры: Nginx, Traefik, Kong, API Gateway (AWS, GCP)
Почему можно масштабировать?
- Обрабатывают независимые запросы
- Не требуют сохранения состояния между запросами
- Легко распределяются через Load Balancer
🟠Backend-сервисы (Stateless)
Примеры: REST API (FastAPI, Express, Spring Boot), gRPC-сервисы
Почему можно масштабировать?
Каждый запрос обрабатывается независимо
Нет привязки к конкретному серверу
Можно использовать Load Balancer (например, AWS ALB, Nginx)
🟠Очереди сообщений и брокеры событий
Примеры: RabbitMQ, Kafka, NATS, Redis Streams
Почему можно масштабировать?
Сообщения разбираются разными нодами
Можно увеличивать число консьюмеров
Поддерживают partitioning (разделение нагрузки)
🟠Кэш-сервисы (Stateless)
Примеры: Redis (в режиме Cluster), Memcached
Почему можно масштабировать?
Каждый узел хранит часть данных
Можно распределять кэш по нескольким инстансам
Redis поддерживает Sharding (разбиение данных на ноды)
🚩Какие микросервисы **нельзя просто так масштабировать горизонтально?**
Некоторые сервисы сохраняют состояние (stateful) и сложны в горизонтальном масштабировании:
Базы данных → MySQL, PostgreSQL (нужны реплики или шардирование)
Сервисы с сессиями → Например, если пользователь всегда должен попасть на тот же сервер
Хранилища файлов → Например, локальное хранение логов на сервере
Ставь 👍 и забирай 📚 Базу знаний
Горизонтальное масштабирование – это добавление новых экземпляров (реплик) сервиса для увеличения производительности. Оно хорошо работает для статeless (без состояния) микросервисов, где нет привязки к конкретному серверу.
🚩Какие микросервисы можно масштабировать горизонтально?
🟠Веб-серверы и API-шлюзы
Примеры: Nginx, Traefik, Kong, API Gateway (AWS, GCP)
Почему можно масштабировать?
- Обрабатывают независимые запросы
- Не требуют сохранения состояния между запросами
- Легко распределяются через Load Balancer
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-api
spec:
replicas: 5
selector:
matchLabels:
app: my-api
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: api-container
image: my-api:latest
🟠Backend-сервисы (Stateless)
Примеры: REST API (FastAPI, Express, Spring Boot), gRPC-сервисы
Почему можно масштабировать?
Каждый запрос обрабатывается независимо
Нет привязки к конкретному серверу
Можно использовать Load Balancer (например, AWS ALB, Nginx)
nginx
upstream backend {
server backend1:5000;
server backend2:5000;
server backend3:5000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
🟠Очереди сообщений и брокеры событий
Примеры: RabbitMQ, Kafka, NATS, Redis Streams
Почему можно масштабировать?
Сообщения разбираются разными нодами
Можно увеличивать число консьюмеров
Поддерживают partitioning (разделение нагрузки)
python
from kafka import KafkaConsumer
consumer = KafkaConsumer('my_topic', group_id='workers', bootstrap_servers='kafka:9092')
for message in consumer:
process_message(message)
🟠Кэш-сервисы (Stateless)
Примеры: Redis (в режиме Cluster), Memcached
Почему можно масштабировать?
Каждый узел хранит часть данных
Можно распределять кэш по нескольким инстансам
Redis поддерживает Sharding (разбиение данных на ноды)
sh
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 --cluster-replicas 1
🚩Какие микросервисы **нельзя просто так масштабировать горизонтально?**
Некоторые сервисы сохраняют состояние (stateful) и сложны в горизонтальном масштабировании:
Базы данных → MySQL, PostgreSQL (нужны реплики или шардирование)
Сервисы с сессиями → Например, если пользователь всегда должен попасть на тот же сервер
Хранилища файлов → Например, локальное хранение логов на сервере
Ставь 👍 и забирай 📚 Базу знаний
👍1💊1
🤔 Как свалидировать ошибку заранее и предупредить разработчиков до того, как приложение упадёт на проде?
Для этого используются статический анализ кода, линтеры, pre-commit хуки, юнит- и интеграционные тесты, а также stage/test окружения с автотестами. Также помогают CI-пайплайны, которые запрещают мердж без прохождения всех проверок
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Для этого используются статический анализ кода, линтеры, pre-commit хуки, юнит- и интеграционные тесты, а также stage/test окружения с автотестами. Также помогают CI-пайплайны, которые запрещают мердж без прохождения всех проверок
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какой самый большой минус Ansible?
Ansible – мощный инструмент для автоматизации, но у него есть серьезные недостатки, особенно при масштабировании.
🚩Основной минус – Медленная работа на больших инфраструктурах
🟠Нет агентов
каждый раз Ansible подключается по SSH и выполняет задачи без предварительного кеширования
что замедляет процесс.
🟠Ограничения Python на удаленных хостах
если целевой сервер слабый или без Python, выполнение плейбуков будет медленным.
🟠Последовательное выполнение
по умолчанию Ansible выполняет задачи последовательно, что дольше, чем параллельные методы (например, в SaltStack).
Запуск задач параллельно (
🚩Другие минусы Ansible
🟠Высокая нагрузка на управляющий узел
Если 1000+ серверов, главный Ansible-узел может быстро перегрузиться.
🟠Сложное управление зависимостями
Роли могут конфликтовать, если версии не совпадают. Ansible Galaxy не такой удобный, как Terraform Registry
🟠Ограниченная идемпотентность
Некоторые модули (особенно shell и command) не всегда понимают, применялась ли конфигурация раньше.
Ставь 👍 и забирай 📚 Базу знаний
Ansible – мощный инструмент для автоматизации, но у него есть серьезные недостатки, особенно при масштабировании.
🚩Основной минус – Медленная работа на больших инфраструктурах
🟠Нет агентов
каждый раз Ansible подключается по SSH и выполняет задачи без предварительного кеширования
что замедляет процесс.
🟠Ограничения Python на удаленных хостах
если целевой сервер слабый или без Python, выполнение плейбуков будет медленным.
🟠Последовательное выполнение
по умолчанию Ansible выполняет задачи последовательно, что дольше, чем параллельные методы (например, в SaltStack).
yaml
- name: Установка Nginx
hosts: all
tasks:
- name: Установить Nginx
apt:
name: nginx
state: present
Запуск задач параллельно (
-f 50) sh
ansible-playbook playbook.yml -f 50
🚩Другие минусы Ansible
🟠Высокая нагрузка на управляющий узел
Если 1000+ серверов, главный Ansible-узел может быстро перегрузиться.
🟠Сложное управление зависимостями
Роли могут конфликтовать, если версии не совпадают. Ansible Galaxy не такой удобный, как Terraform Registry
🟠Ограниченная идемпотентность
Некоторые модули (особенно shell и command) не всегда понимают, применялась ли конфигурация раньше.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как сделать так, чтобы клиенты отдавали метрики в Prometheus?
На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что сделать если зависает ssh?
Если SSH завис, не стоит сразу закрывать терминал. Есть несколько причин и решений.
🚩Проверить, можно ли выйти без разрыва сессии
Если SSH завис, но сессия не разорвана, попробуйте выйти без закрытия терминала:
Переключение в режим управления SSH
🚩Проверить соединение с сервером
Если SSH завис, причина может быть в разрыве соединения. Проверьте:
Работает ли пинг до сервера:
🔹 Открыт ли SSH-порт (22):
🚩Перезапустить SSH-клиент
Если только один SSH-клиент завис, попробуйте:
или
Затем переподключитесь
🚩Проверить SSH-сервер
Если сервер доступен, но SSH зависает, войдите через консоль или другой метод (например, VNC, IPMI).
Если SSH не отвечает, перезапустите его:
или
🚩Отключить TCP KeepAlive или изменить таймауты
Иногда SSH зависает из-за разрыва соединения на роутере или файрволе.
Добавьте в
Или в
Затем перезапустите SSH
🚩Убить зависшую SSH-сессию на сервере
Если осталось зависшее подключение, найдите его и завершите:
Ставь 👍 и забирай 📚 Базу знаний
Если SSH завис, не стоит сразу закрывать терминал. Есть несколько причин и решений.
🚩Проверить, можно ли выйти без разрыва сессии
Если SSH завис, но сессия не разорвана, попробуйте выйти без закрытия терминала:
~.
Переключение в режим управления SSH
~Ctrl+Z
🚩Проверить соединение с сервером
Если SSH завис, причина может быть в разрыве соединения. Проверьте:
Работает ли пинг до сервера:
ping server_ip
🔹 Открыт ли SSH-порт (22):
nc -zv server_ip 22
🚩Перезапустить SSH-клиент
Если только один SSH-клиент завис, попробуйте:
pkill -9 ssh
или
killall -9 ssh
Затем переподключитесь
ssh user@server_ip
🚩Проверить SSH-сервер
Если сервер доступен, но SSH зависает, войдите через консоль или другой метод (например, VNC, IPMI).
Если SSH не отвечает, перезапустите его:
sudo systemctl restart ssh
или
service ssh restart
🚩Отключить TCP KeepAlive или изменить таймауты
Иногда SSH зависает из-за разрыва соединения на роутере или файрволе.
Добавьте в
~/.ssh/config на клиентеHost *
ServerAliveInterval 60
ServerAliveCountMax 5
Или в
/etc/ssh/sshd_config на сервере ClientAliveInterval 60
ClientAliveCountMax 5
Затем перезапустите SSH
sudo systemctl restart ssh
🚩Убить зависшую SSH-сессию на сервере
Если осталось зависшее подключение, найдите его и завершите:
who # Показывает активные пользователи
ps aux | grep ssh # Показывает процессы SSH
pkill -9 -u username # Завершает все сессии пользователя
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как посмотреть активные сессии других пользователей сервера?
Для этого есть команды, показывающие детальную информацию о сессиях: кто подключён, откуда, чем занят и как долго. В системах с systemd можно использовать специальные утилиты для отображения сессий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Для этого есть команды, показывающие детальную информацию о сессиях: кто подключён, откуда, чем занят и как долго. В системах с systemd можно использовать специальные утилиты для отображения сессий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊17