Добавить в корзинуПозвонить
Найти в Дзене

Если бы в мире исчез Kubernetes

Представьте, что однажды утром вы просыпаетесь, а мир вокруг стал другим. Нет, ничего страшного не случилось: ни ледникового периода, ни падения метеорита. Но все сервисы вдруг начали работать так, как работали в те времена, когда про Kubernetes еще никто не слышал. Вы выходите из дома, вызываете такси — и сразу что-то не так. Приложение открылось, но карта не грузится. Стоимость скачет каждые десять секунд. Машины то появляются, то исчезают. С горем пополам вызываете наконец-то такси и добираетесь до офиса. В обед открываете любимую доставку. И там та же картина: ресторан то доступен, то нет, корзина открывается через раз, оплата зависает. В голове одна мысль: «Почему разработчики не могут все сделать нормально?». Но настоящая причина глубже: вы оказались в мире, где приложения больше не умеют подстраиваться под нагрузку. На следующей неделе — в командировку в Питер. Пытаетесь купить билет на поезд — сайт падает. Не из-за огромного спроса, а потому, что нагрузку никто не распределяет

Представьте, что однажды утром вы просыпаетесь, а мир вокруг стал другим. Нет, ничего страшного не случилось: ни ледникового периода, ни падения метеорита. Но все сервисы вдруг начали работать так, как работали в те времена, когда про Kubernetes еще никто не слышал.

Вы выходите из дома, вызываете такси — и сразу что-то не так. Приложение открылось, но карта не грузится. Стоимость скачет каждые десять секунд. Машины то появляются, то исчезают. С горем пополам вызываете наконец-то такси и добираетесь до офиса.

В обед открываете любимую доставку. И там та же картина: ресторан то доступен, то нет, корзина открывается через раз, оплата зависает. В голове одна мысль: «Почему разработчики не могут все сделать нормально?». Но настоящая причина глубже: вы оказались в мире, где приложения больше не умеют подстраиваться под нагрузку.

На следующей неделе — в командировку в Питер. Пытаетесь купить билет на поезд — сайт падает. Не из-за огромного спроса, а потому, что нагрузку никто не распределяет автоматически.

Вечером приходите домой, включаете фильм — та же история. Плеер то работает, то зависает. Где-то в дата-центре один большой сервис пытается обслужить всех сразу, и у него просто нет сил. Раньше так и было: вручную перебрасывали трафик между серверами. Ночами, под кофе, чтобы хоть как-то пережить пик.

Если объяснять простыми словами: монолитный сервис — это один огромный кусок кода, который работает одним блоком. Если внутри ломается хотя бы маленькая часть падает все приложение целиком.

И самое забавное — в такой реальности почти нигде не выходят обновления.

Заходите в App Store или Google Play — там пусто. И так не один день, не неделю, и даже не месяц. Никто ничего не выкатывает, потому что любое изменение превращается в проблему. Каждый релиз — целое событие: куча согласований, обязательная остановка сервиса, письма пользователям о недоступности приложения с такого-то по такое-то время.

Если что-то пойдет не так, придется срочно откатываться. А повторно выпускать обновление можно будет только следующей ночью — когда нагрузка минимальна и невелик шанс задеть пользователей.

В какой-то момент до вас доходит: это не глобальный сбой, не авария, не атака. Так все и работает в мире, где нет автоматического масштабирования, микросервисов и распределенных систем. Каждое приложение — цельная махина. Упало — значит, упало все.

Самое интересное, что это было нормой до появления Kubernetes. Постоянные падения. Ночные релизы. Встречи под лозунгом «Выходим на прод, крестимся». Инженеры, которые сидели до утра, потому что обновить что-то без остановки сервиса было невозможно.

И вот в этот странный день, наблюдая весь хаос, вы впервые понимаете, насколько тихо Kubernetes поменял мир. Он стал фундаментом, который никто не видит, но который держит огромный пласт стабильности.

Kubernetes решает все эти проблемы очень понятными способами.

Он умеет запускать сразу много экземпляров одного и того же сервиса и распределять между ними нагрузку. Если пользователей становится больше, он поднимает еще несколько копий. Если меньше — убирает лишние. И все это без человеческого участия.

Kubernetes следит за состоянием сервисов: если какая-то часть приложения зависла или упала, он просто поднимает новую. Не нужно будить дежурного инженера и что-то перезапускать вручную.

Еще он позволяет раскладывать большие системы на маленькие кусочки — микросервисы — и обновлять их по отдельности. Не все приложение целиком, а только ту часть, в которой что-то изменили.

Поэтому сегодня можно выкатывать обновления хоть в пиковые часы — никто этого не заметит. Технология дает возможность переключать трафик так, что пользователи не видят ни перерывов, ни ошибок. Одна версия работает, другая выкатывается рядом, и когда все готово — кубер просто плавно переводит поток на новую. За счет этого исчезают ночные релизы, постоянные падения и бесконечные «А вдруг что-то сломаем».

Сейчас мы живем в мире, где приложения сами распределяют нагрузку, сервисы перестают быть хрупкими и становятся надежными рабочими системами, а обновления проходят спокойно, без танцев вокруг сервера (ладно, почти без танцев…).

И иногда, чтобы почувствовать масштаб изменений, достаточно просто задать себе один простой вопрос: «А что, если завтра Kubernetes исчезнет?».

Ну хорошо, если честно, то все не так драматично. Половина сервисов до сих пор живет без кубера и выглядит вполне бодро. Это был всего лишь сон. Можно спокойно спать дальше, ведь мир пока не развалился :)

To be continued…

Автор: Евгений Саркисян, менеджер проектов «Лаборатории Числитель»