Когда инструменты не выдерживают рост
На старте у нас всё было просто и удобно. Один сервер, Dokku, dev и прод в одной лодке. Контейнеры забирали ресурсы сколько хотели. Работало — значит, устраивало.
Но вот на горизонте появились первые серьёзные клиенты. Понимаем: пора переставать играть в песочнице. Нужно изолировать продакшн. Переезжаем в Яндекс Облако: управляемый Postgres, Kubernetes, автоскейлинг. Я ставлю девопсам задачу: развернуть окружение один в один, плюс настроить автоматическое масштабирование нод.
На бумаге всё выглядело как мечта. Но реальность быстро внесла коррективы. Ещё на внутреннем тестировании под нагрузкой вылезли первые пробои. Система ловила периодические даунтаймы. CPU и память — в порядке. А падал NATS, и за ним рушились все остальные сервисы.
Сначала я спокойно делегировал проверку девопсам. Ответ был стандартный: "Это просто NATS капризничает." Но что-то внутри не давало покоя. Лезу в логи — и картина становится яснее. Перед нами были не просто баги. Перед нами были две разные ошибки: тактическая и стратегическая.
Тактическая ошибка — спот-ноды.
Мы выбрали спот-инстансы. Дешевле, да. Но Яндекс мог в любой момент выдернуть сервер из розетки без предупреждения. Поднятие новой ноды занимало до четырёх минут — и за это время система успевала посыпаться, как карточный домик.
Стратегическая ошибка — архитектура NATS.
Этот сервис хранит своё состояние в памяти. А мы его начали горизонтально масштабировать. В результате любое колебание — и мы теряли события, рвали соединения, рушили стабильность. На таком фундаменте масштабироваться было всё равно что строить небоскрёб на зыбучем песке.
Решение принимали быстро. Изолировали NATS на отдельной микроноде без автоскейлинга, чтобы стабилизировать работу. Параллельно начали планировать переезд на управляемую Kafka — медленнее, но зато надёжно и с полноценным мониторингом из коробки.
И вот тут был настоящий кайф.
Не потому что «спасли ситуацию», а потому что вытащили проблему на свет и успели перестроиться до того, как ошибка ударила по реальным клиентам.
Инструменты, которые отлично работают на старте, чаще всего разваливаются в момент роста.
Масштабирование — это проверка на прочность всего, что вы собрали раньше. И если архитектура не выдерживает — виноваты не клиенты и не нагрузка. Виноваты ваши прежние решения.
Post #27
77
- ❤🔥 3
- 👌 1