Трассировка TCP-соединений через eBPF без рестарта сервиса
7 мин чтения · закреплено
Классический подход к трассировке — добавить логирование в код и перезапустить сервис. С eBPF это не нужно: можно повесить kprobe прямо на ядерную функцию tcp_connect и получать события в реальном времени без изменения приложения.
Данные передаются через ring buffer: меньше копирований, нет потерь при пике событий, читается одним системным вызовом.
Для production используем libbpf + CO-RE: программа компилируется один раз и работает на любом ядре ≥ 5.8 без пересборки.
Тонкая настройка autovacuum в PostgreSQL 16
7 мин чтения
Autovacuum в PostgreSQL — фоновый процесс, который автоматически вызывает VACUUM и ANALYZE. В продакшн-системах с высокой нагрузкой дефолтные параметры часто приводят к table bloat.
Ключевое: vacuum_scale_factor = 0.01 означает запустить VACUUM, как только 1% строк помечен как мёртвый.
Мониторинг: pg_stat_user_tables, поля n_dead_tup, last_autovacuum, autovacuum_count.
tokio каналы: когда mpsc, а когда broadcast
5 мин чтения
В Tokio четыре типа каналов: mpsc, broadcast, oneshot, watch. Неправильный выбор ведёт к потере сообщений или deadlock.
mpsc — стандартный выбор для очередей задач с backpressure. broadcast — ring-buffer, все подписчики получают копию каждого сообщения.