Не занимаюсь синергией, цифровой трансформацией и продвижением ценностей. Настраиваю серверы и пишу код так, чтобы он работал — и продолжал работать, когда вы об этом давно забыли. FreeBSD, Perl, PostgreSQL, ZFS (или ваш стек здесь — и понимание, какие слои необходимы, а какие лишние.
SunOS. Да, такие задачи бывают, и да, я не убегаю. FreeBSD, если что, начинал на СМ-4М, ДЕМОС&МНОС 2,
адаптация 3.2BSD.Perl, C, Python, JS — на этом пишу продакшн. PHP, Java, Rust — тоже умею, если задача того требует. Haskell не предлагать. В целом — если язык существует, я его читаю и могу что-то в нём исправить. Это не преувеличение, это опыт.cbsd/bhyve, docker + docker-compose. Умею готовить докер так, что он остаётся прозрачным и управляемым — а не слоем костылей на резиночках, в который страшно заглянуть через полгода.PostgreSQL (люблю) + pgbouncer, TimescaleDB. MySQL — умею, обоснованно не люблю. Остальные базы тоже понятны — четверть века работы с инфраструктурой не проходят бесследно.ZFS-based снапшоты. Пятнадцать лет ни одного прокола — не потому что повезло, а потому что это просто работает, если делать по уму.
Self-hosted инфраструктура — не мода, а способ понимать каждый компонент своего стека. Если что-то падает, я хочу знать, почему, а не открывать тикет в чужую техподдержку.
Self-hosted это еще и защита от политических неожиданностей. Типа ракеты, попавшей в ДЦ в стране, о которой раньше не слышал. Я точно знаю, где вся моя инфрастрктура. Я сам делаю свои бэкапы. Я всегда точно знаю, что у меня происходит.
Но понимаю, зачем арендуют VPS и зачем работают в облаках.
| было | стало | |
| выставление счёта | 1–2 дня, максимальная вовлеченность всех сотрудников от админа до директора. Ручные правки данных админом обязательны. | 2–3 часа, менеджер без помощи админа + документооборот через Diadoc. "Отправить счет и УПД диадоком" — одна кнопка. |
| правка формы счёта-фактуры | 3 дня | 30–60 минут |
| резервное копирование | было когда-то | r/o доступ к данным мгновенно, без восстановления |
Инфраструктура изначально была размазана по разным серверам без единой логики. SunOS, спагетти из Perl+HTML+SQL. Cтарый Oracle. Дела переданы в формате "вот тебе пароли от чего вспомнил". Биллинг переписан с сохранением всех исторических данных — миграция шла без простоя выставления счетов. Правда, несколкьо нервно: старый сервер приходил в необратимое состояние на глазах.
| было | стало | |
| репликация | рвётся ~2 раза в неделю | стабильна |
| база | mysql, тормозит | postgres, 2.6k rpm — норма |
| нагрузочный тест | — | не удалось положить сайт |
| база для разработчиков | — | частичная копия (без ПД и больших таблиц) по клику, TeamCity → потом Gitlab CI |
Причина регулярных разрывов репликации оказалась не в базе и не в конфигурации — а в физическом сервере VMware, на котором всё это крутилось. Перешли на PostgreSQL и параллельно решили проблему на уровне железа.
Делал дашборды на Prometheus/Grafana для оценки
производительности и статуса проекта из YouTrack. Если у вас
документированная система тикетов — могу собрать такое же.
Настраивал Asterisk — в том числе колл-центры и голосовое
меню, диагностировал одностороннюю слышимость, писал кастомные
интерфейсы поверх него. Кастом — не для красоты: он быстрее, понятнее
и в нём невозможно сломать что-то за пределами интерфейса. FreePBX не
люблю — для любой задачи сложнее «один входящий, два внутренних» он на
практике оказывается сложнее ручной конфигурации. И позволяет случайно сделать такое, что потом не вдруг распутаешь.
За три дня с нуля в Rust написал рабочий код для проверки
и обработки блокчейн-транзакций. Блокчейн не предлагаю куда попало —
но если задача реально требует, умею с ним работать.
Отбивал DDoS-атаки. "Школьные", разумеется, но сайты клали и они. Обычно "школьные" атаки выделяются визуально по паттернам. Потом простой
tail -f access.log | script и файрвол. Или, как вариант, сайт 99% ориентирован на Россию – жестко режем нероссийские IP средствами nginx.
Настоящий DDoS, который кладет хостинг-провайдера, своими силами не отбивается. Даже пытаться не стоит, сразу идти к тем, у кого защитная инфраструктура.
Вот, например, сайт карты переписи воробьев на Postgres+postgis
с кластеризацией на сервере и соответственно отличной производительностью на клиенте.
На старте — практики прошлого века: один список рассылки, куда валится всё подряд (ТЗ, отчёты, рабочая переписка), который никто толком не читает; разработчики толкаются локтями; почтовик не вылезает из спама; колл-центр держится на трёх номерах.
Уговорами и немного пинками внедрил git + Redmine
(это примерно 2014–2015 год): нет коммита и закрытия задачи — задача
не сделана и не закрыта, одна задача — одна ветка. Благодарили и
менеджер, и разработчики. Убедил гендира сменить политику сбора
email-адресов с «нам нужно как можно больше» на «нам нужны только
рабочие» — отбой по спаму упал до 1–2%. Настроил Asterisk
на колл-центр с одним номером и возможностью операторам работать со
своего мобильника, сделал простой инструмент для прослушивания
записей разговоров с клиентами.
Настроил серверную инфраструктуру, сделал кастомный интерфейс для Астериска. Через какое-то время был уволен — формулировка «за безделье». После увольнения ещё три года продолжали приходить диагностические письма от серверов: «всё в порядке, никто ничего не трогает». В какой-то момент попросил отключить рассылку. Что происходит с серверами сейчас — не знаю.
Пишите. Отвечаю по делу, без коммерческих предложений в ответ и без созвонов на час про то, что можно сказать в одном письме.
15 минут консультации бесплатно — этого хватит, чтобы понять, подходим ли мы друг к другу