Самое время опять поговорить про недавние страдания по девопсу ФКФВ.
Все началось примерно месяц назад: я подумал, что было бы прикольно перелезть с ИХЦ на Хетцнер. Скажу честно: на ИХЦ было все ок и он мне по сей день нравится, — но Хетцнер (вероятно за счет чисто своей родной инфраструктуры, а там хз!) страшно демпингует, и я рассчитывал забрать машину на 16 гигов + 8 ядер + 160 гигов места + x86 примерно за 2 тысячи рублей в месяц, что прям вообще кайф.
Все прошло как обычно, никаких проблем. На Хетцнере (локация Фалькенштайн, ГДР) развернул стак, накатил репу, все поехало. В ИХЦ меня немного раздражало некоторое мудацтво из 2000-х в их панельке, а в Хетцнере ровно наоборот: прекрасная панель, графики туды-сюды бегают, статистика быстро апдейтится, есть встроенный шелл, короче прям нормально.
Постепенно стал замечать проблемы. Вдруг обнаружил, что очень, очень долго, по 15-20 секунд, запускался bundle (это типа демон рельсы и менеджер ее гемов в одном флаконе), в итоге после каждого деплоя случается де-факто даунтайм на эти же 15-20 секунд. Из прода консоль запустить — такая же пауза. Любой консольный таск (например, импорт из клубной телеги, который триггерится кроном каждые 5 минут) — то же самое. Это уже очень неприятно, но тогда еще решил, что не прям убийственно критично, потом как-нибудь посмотрю.
Потом случилась прессуха РГА и в моем представлении полнейший коллапс — это не игра с Соколом, а всего-то прессуха, куда оффлайново пришли всего 200 человек, — однако уже все стало страшно захлебываться. Надо же еще сказать, что за это время я не менял буквально ничего ни в гемах, ни в кодовой базе. То есть то, что на ИХЦ летало, на Хетцнере тонет и пердит. Да что за!
Ничего подозрительного ни с редисом, ни с хостом не вижу. В порядке бреда предположил, что возможно дело в менеджере пакетов asdf — ранее это была просто кучка алиасов на шелловые команды, но начиная с недавней версии 0.16, все переписано на Go и теперь надо совершенно иначе тянуть их бинарник. Посидел, какое-то время поковырялся, обе версии как водится законфликтовали, короче безуспешно. По ходу дела вспомнил, что в свое время страшно обомлел от того, что Амазон для своих EC2-машин ставит не совсем прям убунту-убунту, а какую-то свою убунтовскую сборку, а это ну вот к бабке не ходи причина споткнуться об что-то мудацкое. То есть там, где ИХЦ говорит: берите убунту! — и вы получаете стерильную убунту, какбэ большие дяди из энтерпрайза могут подумать, что бога за бороду поймали, и начать втирать вам какое-то свое паленое говно с недефолтными настройками какой-нибудь шляпы. Короче, к Хетцнеру я как-то подостыл.
Тут я вдруг вспомнил, что давно хотел наконец попробовать СААС-решения для ФКФВ.
Ну давай попробуем. А какое и как? Было решено поступить следующим образом: кое-где развернуть БыковФМ, а кое-где — ФКФВ, они по метрикам примерно сопоставимы, и дальше сравнить ощущения. Вот мои шатания.
Fly.io — известные челы, но сразу непонятно вообще нихрена, а это ред флаг. Все должно быть просто как топор: тыр-пыр сто дыр, нажал кнопочку и деплой поехал. У них же CLI тут же тянет в проект десяток каких-то файликов, TOML-конфигов и какой-то прочий кал. Все прочитай, все вкури, мне такое не нравится.
Sevalla.com — новый продукт, прямо сейчас рекламятся на профильных прощадках. Чет прям даже особо нечего сказать. Админский интерфейс приятный, хотя и функционально скудноватый. Но вроде все катается ок, Быков там вполне без проблем поработал неделю. Но чарджат за количество баз! Пипец трещ и стыдоба.
Render.com — в свое время успели снять пачку вистов, когда Хероку внезапно объявил об отказе от бесплатных контейнеров, и Рендер тут как тут принялся раздавать небольшие бесплатные инстансы. Потом типа стартап Рендер пустил к себе дичайшие бабосы инвесторов и нате: сейчас Рендер качнуло в противоположную сторону солидного хостинга для солидных господ — типа двухгиговый инстанс за 80 бачей, щито? Плюсом снимают 19 бачей в месяц тупо за как бы про-аккаунт — почерк типичных жлобов. Да ладно бы только это! Захостил там Быкова на 4 дня, и у него тут же вырос отклик, ну вот как. Интерфейс ни то ни се. Рендер переплюнул Севаллу в жлобской тупизне и чарджит за минуты билдов! То есть не спеши, дорогой разработчик, деплоить, побереги копеечку! Ну короче кто во что горазд, это все полное буэ.
Кстати в нише облаков для людей подтягиваются и РФ-компании. Кроме гиганта Яндекс Облака, много хорошего слышал про MTS Cloud, который теперь называется MWS. Наступают и игроки попроще: например, хорошо пилится продукт Amvera.ru, куда недавно зашел хорошо нам знакомый Ланит-Интеграция. Хотя ничего из этого я не пробовал.
И вот тут заходят магистры игры!
Railway.com — очень, очень хороший подход к снаряду. Интерфейс — великолепный, и его еще продолжают утюжить. Челы полгода как ввели первую серию своих ДЦ и переводят клиентов с чужих стоек на свои, соответственно снижая прайс. Но самое главное — это их модель, которая поначалу сбивает с толку, но потом ты понимаешь, что это ровно что и требуется от облака.
Короче в чем разница. У первых трех компаний из этого списка ты выбираешь мощность и объем каждого инстанса: от 0,5 ГБ до 24 или например 32 ГБ. Если БыковФМ начинает задыхаться на двухгиговой машине, — это твои проблемы, лезь в интерфейс и перелазь на инстанс подороже, и все оживет. Рейлвей делает иначе: он тебе по умолчанию предлагает жирнейший инстанс на 32 гига и 32 ядра — а потом чарджит в зависимости от нагрузки, то есть буквально в гигабайтах памяти на минуту времени. Если ты не влезаешь в эти 32 гига, инстансы можно в три клика реплицировать и подтянуть балансировщик.
Самое смешное, что модели Рейлвея миллиард лет, и многие поставщики начинали именно с нее, но потом слезали в пользу «Ты сначала купи, а потом смотри что будет». А мне нравится модель «Я хз сколько мне надо, я сначала захощщу, а вы потом снимайте, сколько я насидел». И вот Рейлвей показал возвращение к истокам.
Рейлвей разворачивает инстансы с БД/всякими сервисами в готовых контейнерах, а кодовую базу – с помощью интересной приблуды, которая называется Nixpacks (кстати это опенсорсное решение самого Рейлвея). Nixpacks на лету запаковывает твой код в контейнер и пробрасывает нужные и самые часто используемые дефолты (которые ты можешь тут же переписать в настройках). Волшебство тут в том, что весь стак скопом вообще можно не докеризовать: а зачем, если блин с Постгресом у нас прилетел из одного регистра, блин с Редисом — из другого, а репа с рельсой сама на ходу запаковалась в блин с Nixpacks и живет по соседству со всеми остальными.
Благодаря жирным дефолтным лимитам отклик ФКФВ на Рейлвее — это просто крышеснос! Инстанс крутится во Франкфурте, и все метрики показывали по 400-500 мс из Европы и по 800-900 из США. И это главная страница ФКФВ, где миллиард компонентов! Это означает, что если я хотя бы месяц посижу над асинхронным фронтендом (заодно подтяну svelte какой-нибудь), ФКФВ будет влезать вам в браузер просто мгновенно. Я был ошарашен; в жизни своей никогда не работал с такими роскошными сетапами по железу.
Но тут началась порнография.
За первые сутки на Рейлвее он мне насчитал эстимейт за ФКФВ 65 бачей в месяц, из которых 35 – за трафик. Какой там на ФКФВ трафик, боже, если у нас вся статика висит в отдельном облаке в Васаби! Посмотрел отчёты, оказалось ФКФВ отдает в интернеты примерно по 6-7 гигов в день, то есть ну пусть 200 гигов в месяц. Смешно! Для сравнения, ИХЦ для каждой своей убогой вэпээсины за 500 рублей в месяц дает 20 ТБ трафика БЕСПЛАТНО. На дворе 2к25, как бы алло, кому всрался ваш трафик, мы не в 1997 году с хостером Зенон Интернет! Но Рейлвею же сука надо за что-то снимать шекели с трудового народа, вот они и придумали. Это очень огорчительно, очковтирательство чистой воды.
Тем не менее, я принялся за оптимизацию: сократил лапшу tailwind-классов, чтобы html с постами полегче пролазил в сокеты, прошелся по запросам, поубивал несколько N+1, немного попрофилировал локально — ценник упал до примерно 55 в месяц. Запустил профилирование на проде, и не нашел просто ничего, что не описывалось бы текстом «У вас медленная главная страница потому что на ней дохера всего».
Посидел почитал логи и ужаснулся: ФКФВ получал от ботов по 2-3 запроса в секунду! Всякие GET /~123123/reply, /~234234/upvote, то есть те урлы, до которых вообще добрались краулеры. Если у нас овер 400,000 постов, и у каждого по пачке урлов, это же сумасшествие. Пробросил DNS опять через Cloudflare, включил проксирование. Тут же оказалось, что мудозвоны из РКН блочат проксированный трафик Cloudflare, да что ж за жизнь. Потом оказалось, что можно попробовать наебать этих гойских свиней отключением ECH-подписи у домена. Покурил доки, поковырял курлом АПИ клаудфлера, вроде ECH-подпись пропала. В РФ сайт заработал у всех, кто еще днем ранее жаловался на его пропажу.
Теперь принялся за ботов, которые накачивают нам трафик как не в себя. Оказалось, большинство ботов шныряют с американских IP (проклятые пиндосы гадят!). Пох+пое на гугал и его выдачу, решил с концами закрыть трафик из США с IPv6. И что вы думаете? Похеру мороз, боты тут же расплодились в сраном Сингапуре. Закрыл трафик с IPv6 вообще отовсюду. Все ок? Нет, потому что тут же опять стали писать: «А че сайт не работает!!» — люди часто сидели с бесплатных ВПН, которым зачем-то нужен IPv6…
И на этом месте я понял, что уже умахался. К сожалению, я не настолько богат, чтобы платить за ФКФВ по 50 тыщ в год. Я потратил целую неделю на исследование рынка и поиск нужного решения, но так и не нашел ничего, что было бы лучше того, где мы сидели ГОДАМИ — голая серверная убунта + Hatchbox. СААС-решения это как еврооднушка в самом центре с дичайшим дефицитом квадратов, а VPS — это как хоромы в сталинке на Ленинском проспекте.
Тем не менее, я оказался впечатлен Рейлвеем. Считаю, применять его можно/нужно когда крутишь рекламные бюджеты и не уверен в отклике от кампании: сколько людей придут завтра, десять или десять тысяч? А всем критически важно показать продукт, чтобы без провисов. Или: когда пиковые нагрузки сильно отличаются от непиковых. Знаю, что для таких случаев у многих сервисов есть умное автореплицирование текущих инстансов; а для Хероку есть даже отдельные приблуды, которые дергают его апишку и в зависимости от нагрузки за тебя докупают/отключают инстансы. Но это же либо бредово (зачем реплицировать инстансы по 4 гига памяти, например?), либо костыльно, а у Рейлвея все мощно и нативно.
Так или иначе, для ФКФВ полюбившийся мне Рейлвей оказался явным оверкиллом. Вероятно, в логике их инженеров и маркетологов, если к тебе приходит десятка в месяц, ты уж как-нибудь с них снимешь за что-нибудь бабла или открутишь бюджет рекламой (на БыковФМ приходит и вовсе тридцатка в месяц, то есть казалось бы).
Но ФКФВ — начинание строго некоммерческое. Нам не нужны ваши деньги, нам надо сделать вашу жизнь немного более увлекательной!
Такие дела. Извините за дичайшую простыню.
P.S. Немного картиночек!
Интерфейс Рейлвея, видишь типа холст и ты туда создаешь инстансы. Те из них, что общаются между собой, соединены стрелочками. :3
Вот они, боты.
Это я отрубил IPv6 и США в Клаудфлере, и обрадовался (потом оказалось, что рано).
Заодно напоролся на подтеки памяти в рельсе, в этом нет ничего хорошего, надо заниматься.
А вот как-то удачно отрефакторил ключевой квери-класс — запрос постов.