Citus: когда одного PostgreSQL уже мало

Вертикальное масштабирование PostgreSQL упирается в потолок рано или поздно. Диск перестаёт тянуть IOPS, либо рабочий набор строк уже не влезает в память целиком, как ни добавляй RAM. Citus — расширение, которое раскладывает таблицы по нескольким узлам вместо одного, но снаружи остаётся обычным PostgreSQL: тот же psql, те же типы, тот же SQL. Таблица создаётся как обычно, а дальше — одна функция: CREATE TABLE github_events (event_id bigint, repo_id bigint, payload jsonb); SELECT create_distributed_table('github_events', 'repo_id'); Citus хэширует значения repo_id и раскладывает строки по шардам. Каждый шард физически — обычная таблица PostgreSQL на одном из worker-узлов, а координатор хранит только схему распределения и маршрутизирует запросы к нужным шардам. Количество шардов задаётся заранее через citus.shard_count, и если две таблицы логически связаны (например, события и репозитории одного repo_id), их стоит объединить через colocate_with — иначе джойн между ними полетит по сети между узлами вместо локального выполнения на одной машине. ...

October 27, 2026 · llexa

ClamAV: сканировать файлы, а не лечить Linux

ClamAV не ловит руткиты и не следит за системными процессами — для Linux-сервера это не нужно так, как для десктопа под Windows. Реальная польза — сканировать файлы, которые сервер принимает от посторонних: вложения на почтовом шлюзе, архивы в пользовательских загрузках, что угодно, что потом открывает кто-то другой. База сигнатур обновляется отдельно от самого сканера: freshclam # разовое обновление вручную systemctl enable --now clamav-freshclam.service # демон, тянущий обновления по расписанию Без свежей базы clamscan и clamdscan находят всё меньше — вирусные сигнатуры добавляются постоянно, а старый .cvd-файл просто не знает о новых угрозах. ...

October 27, 2026 · llexa

POSIX capabilities: root по частям

В классической unix-модели root — это всё или ничего: либо процесс может абсолютно всё, либо ограничен правами обычного пользователя. POSIX capabilities (capabilities(7)) дробят этот монолит на отдельные биты — около сорока штук, от CAP_NET_BIND_SERVICE до CAP_SYS_TIME, каждый можно выдать процессу по отдельности, не трогая остальные. Посмотреть, что уже есть у текущей сессии: capsh --print Покажет текущие capability sets процесса — Permitted, Effective, Inheritable и так далее; для большинства обычных пользовательских процессов список пустой. ...

October 27, 2026 · llexa

cpupower: когда powersave стоит латенси, которую не хочется платить

Текущее состояние cpufreq на сервере смотрится одной командой: cpupower frequency-info В выводе — используемый драйвер (intel_pstate, acpi-cpufreq или другой), список доступных governor’ов, аппаратные границы частоты и transition latency — время, за которое ядро способно переключить частоту. Governor по умолчанию на современных серверах с intel_pstate — обычно powersave, и здесь важная тонкость: это не то же самое, что powersave на старом acpi-cpufreq. Там powersave жёстко фиксирует минимальную частоту и не отпускает её без смены governor. Под intel_pstate powersave — динамический режим, близкий по поведению к ondemand: частота сама поднимается под нагрузкой через аппаратный P-state алгоритм (HWP) и опускается в простое. ...

October 26, 2026 · llexa

Proxmox #16: SDN — VXLAN-зоны между нодами

Обычный способ дать VM сеть на отдельном VLAN — завести его на физическом свитче и прописать тегирование на бридже каждой ноды. Работает, но требует доступа к сетевому оборудованию и синхронной правки конфигурации на всех свитчах сразу. Встроенный SDN (Software-Defined Networking) в Proxmox VE решает это иначе: VXLAN-зона инкапсулирует трафик в UDP-пакеты и гоняет его поверх уже существующей IP-сети между нодами, свитч при этом видит обычный IP-трафик и ничего не знает про виртуальные сети внутри. ...

October 26, 2026 · llexa

turbostat: что реально делает CPU прямо сейчас

Когда сервер вдруг начинает тормозить без видимой нагрузки, первый подозреваемый — троттлинг CPU: либо температурный, либо CPU застрял на низком P-state из-за лимита по питанию. top тут не поможет — он видит только проценты занятости, а не реальную частоту. turbostat читает всё это прямо из MSR-регистров процессора: частоту, residency в idle-состояниях, температуру пакета и потребление — без прослойки в виде усреднённых метрик планировщика. Инструмент идёт в составе linux-cpupower (Debian/Ubuntu) или kernel-tools (RHEL-семейство) — отдельно ставить не нужно, если уже стоит cpupower. Запускается с правами root, потому что читает MSR: ...

October 26, 2026 · llexa

IT-мем: git blame приводит к себе самому

— Кто вообще написал этот код без единого комментария? — Сейчас, git blame… — Ну? — Ты. Шесть месяцев назад. #юмор

October 25, 2026 · llexa

Rust-утилиты #4: dust вместо du

Продолжаем серию про утилиты, переписанные на Rust: после find очередь du. dust считает занятое место тем же обходом каталогов, но сразу строит дерево, отсортированное по размеру, с процентной шкалой напротив каждой строки — без привычной цепочки du -h | sort -rh | head. ...

October 25, 2026 · llexa

Kitty #3: показываем картинки прямо в терминале

В прошлых двух выпусках про kitty были установка и remote control, а сегодня — то, что обычный терминал вообще не умеет: показать картинку не угадывая цвет псевдографикой, а честным растром прямо в сетке символов. Делается это одной командой — kitten это отдельный бинарник-утилита, который ставится вместе с kitty: kitten icat path/to/screenshot.png Поддерживаются PNG, JPEG, GIF, BMP, TIFF и WEBP из коробки, остальные форматы — через ImageMagick, если он установлен. Работает и через SSH на удалённый хост с kitty в качестве клиентского терминала, так что скриншот с сервера можно глянуть не скачивая файл локально. ...

October 24, 2026 · llexa

Афоризмы Мёрфи #16: Четырнадцатое следствие

После тринадцатого (Чизхолм: “портится и то, что не может испортиться”) — первый закон Финэйгла, любимый повод не доверять первому зелёному прогону: «Если эксперимент удался, значит что-то здесь не так» Миграция накатилась с первого раза без единого предупреждения в логах — значит, скорее всего, она не применилась вовсе, а не то, что всё учтено. Нагрузочный тест с первого захода показал идеальный p99 — значит, тестовый стенд не бьёт туда же, куда бьёт реальный трафик. Подозрительно гладкий результат проверяют в первую очередь, а не празднуют в первую очередь — это и есть разница между “работает” и “кажется, что работает”. ...

October 24, 2026 · llexa