Эта статья - попытка поглумиться над безумием, которое творится в ИТ сейчас, и в то же время провести аудит имеющихся технологий в сфере DevOps культуры. Сама статья - это выдуманная история, которая поможет понять, как рождаются модные веяния, почему они приходят и уходят, а главное, покажет механизм трендов в развитии технологий. Несмотря на то, что история выдумана и является технической сатирой, все использованные фреймворки, технологии и облака вполне воспроизводимы и могут быть использованы по назначению (ссылки на документацию я оставляю намеренно).
Я постарался собрать почти всё, до чего смог дотянуться, поэтому каждый сможет взять что-то для себя, чтобы применить, осознать или просто посмеяться.
Знакомьтесь - Вася!
Вася молодой парень, работает сварщиком на заводе по производству соков и нектаров во Владивостоке. Обзавёлся семьёй довольно рано. Он ездит на японской машине, но она старше его лет на 10. Каждый день он ходил на работу с мыслью о том, что настанет тот день, когда сумма кредитов превысит его уровень зп. И вот, помогая поднять на этаж коробки своему другу Олегу, программисту из стартапа H&H (Horns and Hooves LLC), который заселяется в свою новенькую квартиру, Васю осенило: "А почему бы и мне не заняться программированием?"
Когда Вася начал задавать Олегу вопросы, тот сперва не предал этому значения, но когда вопросы были слишком конкретные, он понял - Вася решил стать тыжпрограммистом, совершенно не понимая, во что ввязывается. Чтоб друг от него отстал, Олег принимает решение послать его на... курсы.
Путь героя
"С чего начать?" - вопрос на миллион долларов. По-хорошему надо провести небольшое исследование сферы, попробовать вникнуть в разные технологии, изучить матчасть, чтобы выбрать ясное направление и развиваться как специалист. Но Васю всё достало. Он хочет уже работать и пить смузи и грести бабло лопатой делать что-то полезное. Поэтому когда он находит курс "УберDBA за год", где в программе обучения перечислены практически все модные технологии, он берёт очередной кредит и начинает свой "Путь героя".
Справедливости ради, Вася оказывается прилежным учеником, хорошо учится и быстро постигает дзен Git'а, учится виртуозно работать в модном zsh, оборачивать в контейнеры практически всё что движется, а что не движется толкать и оборачивать даже СУБД. За время учёбы он узнал такие понятия, как Pipeline, CI/CD, ведь в современном ИТ без этого никуда. Он научился ревьюить своих сокурсников и оформлять коммиты. Конечно же, спустя полгода он начал изучать DBA на примере Postgres.
Спустя 12 месяцев и 100 000 ₽ в кредит, закончив какой-то выпускной проект, Вася вместе со своими друзьями начинает клепать резюме. Конечно, на курсах ему объясняют, что джунов сейчас как собак беспризорных богатый выбор, и, чтобы их резюме не утонуло в пучине тестовых заданий, им предлагают претендовать сразу на миддлов. Миддл после курсов это, конечно, абсурд, поэтому надо придумать легенду "О предыдущих местах успешной работы". Вася хороший ученик, поэтому у него получается очень крутая история. Это сыграло ему на руку, и его пригласили на собеседование в молодой стартап "Money Black Hole", где помимо него взяли ещё крутого программиста iOS/Android на Flutter (который тоже умеет в красивое резюме) Ивана. Вместе им предстоит создать супердрюпер новый ToDo с рекламой и платной подпиской на +100500 пользователей в час.
от автора
Этот абзац - это просто компиляция всего того, что я слышал от заканчивающих достаточно объёмные курсы, на которых давали обещание трудоустройства. Весь ужас я познал после того, как пришлось в очередной раз сделать набор сотрудников. Каждый второй был "фантазёром", что легко проверялось тестовым заданием и вопросами к опыту по типу "а почему ты выбрал такое решение?" и более глубокими вопросами к контексту ситуации.
Когда я устроился на своё текущее место работы, то мой директор действительно ничего не понимал в ИТ, а команда, которую набрали, состояла из откровенных джунов (правда с опытом работы). Обратный опыт у меня был, когда я хотел открыть свой бар. Тогда мой знакомый ресторатор сказал, что даже не возьмётся мне помогать, пока я не проработаю в общепите хотя бы 3-4 месяца.
Джун-архитектор
Когда устроился на работу за over 200к, то уже нельзя идти назад. Нужно оправдать ожидания и сотворить чудо. Компания планирует через год выйти на IPO, а сейчас за полгода надо написать всё, да так, чтобы масштабировалось горизонтально до бесконечности, работало с задержкой 10 ms максимум, могло устоять под DDoS, при этом штат увеличивать пока нет возможности (инвестиции же ещё не привлекли). Времени на раскачку нет, поэтому Вася идёт на очередные курсы, но уже на месяц и заочные. На этот раз по Kubernetes, потому что Василий умный малый, читающий Хабр. А, как известно, на Хабре только и говорят о кубере. Освоив k8s, helm и ArgoCD, Василий понял - нужно идти в "облака", потому что именно для его ситуации их и придумали. Так как же будет выглядеть архитектура его инфраструктуры?
Инфраструктура
Почему Василий начал с неё? Потому что Василий не дурак и, пройдя все эти курсы, он понял как тяжело это всё поддерживать и сколько человек нужно, чтобы поднять что-то похожее на описанное заказчиком. Ни Василий, ни Иван не готовы были поднять всё это ни на VPS'ках, ни уж тем более на "железе".
Облако Василий выбирал по следующим критериям:
Это должна быть надёжная компания на территории РФ, так как они планируют обрабатывать персональные данные (152-ФЗ «О персональных данных»).
Минимум "заморочек" (клик на кнопку "дайте мне мощный кластер" - "получите, вот параметры для подключения").
Наличие AntiDDoS, потому что заказчик убеждён, что конкуренты их "закажут" в день открытия.
Наличие S3, потому что планируется куда-то складывать файлы в задачках. Да и много для чего этот сервис must have.
Обязательно CDN, чтобы файлы как можно быстрее открывались у пользователя.
Managed Kubernetes, чтобы катить свои микросервисы. Пока что это только один сервис, но в будущем...
Наличие бекапов каждый час, ведь если пользователь потеряет свои заметки, то обязательно уйдёт к конкуренту.
Прайс должен быть соизмерим с простотой.
У нас не так много отечественных "облаков", в принципе почти везде это всё есть, поэтому наш герой просто выбрал, где дают большую скидку или бонусы, ведь для проекта важно запуститься фактически без денег, и где проще всего смог поднять всё необходимое для PoC (Proof of Concept). Верите или нет, но самым простым для него оказался... сами угадаете кто.
Зацените как мало надо накликать, чтобы сделать отказоустойчивый кластер
Кстати, я не шучу насчёт простоты. Из всех облачных сервисов, здесь мне нужно меньше всего забить параметров, чтобы стартануть отказоустойчивый кластер Postgres'а. С пользовательской точки зрения - это самый не замороченный интерфейс. Как мне кажется, они больше всех постарались сделать GUI максимально простым для разработчика, который вообще не готов вникать во все подробности того, как это устроено внутри. Даже джун легко разберётся.
API
Василий специалист по PostgreSQL. Он умеет писать крутые запросы, делать различные оптимизированные вьюхи, триггерить CRUD обработку данных. Возможно, его даже научили писать триггеры и "хранимки" на python/perl/javascript. Но этого недостаточно, чтобы написать API для приложения. А давать доступ к БД с пользовательского приложения звучит ужасно даже для джуна.
Тут на помощь приходит PostgREST. Это просто находка для Василия, потому что:
Есть helm chart.
Поддерживает авторизацию с помощью JWT.
Подхватывает схему без перезапуска сервисов.
Хорошая документация с примерами.
Весь код в Postgres.
Василий также быстро накликивает себе кластер с кубером
Не помню как у других, но здесь я нашёл полезную фичу в виде нодескейлинга для группы узлов. Считаю без этой опции кубер не является managed. HPA без этого вообще бессмысленная штука, имхо.
Естественно, Василий не будет поддерживать всё это руками. Он же разработчик, поэтому заставит это делать ArgoCD, который будет ему деплоить его API и следить за релизами. В конце-то концов, зря его учили пользоваться Argo?
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: restapi
namespace: argocd
spec:
project: default
source:
chart: postgrest
repoURL: https://raw.githubusercontent.com/cloudstark/helm-charts/master/charts/
helm:
releaseName: postgrest-to-postgres
parameters:
- name: postgrest.db_uri
value: ...
....
destination:
server: "https://kubernetes.default.svc"
namespace: backend
Мониторинг
Вася - умный парень. Он же целый год был на курсах и хорошо учился, постоянно читал Хабр, где на перебой все твердят, что если у вас нет мониторинга, то проект обязательно упадёт, и никто так и не узнает почему. Чтобы ночью спать спокойно, он прикрутил мониторинг, который покажет ему красивые графики с его инфраструктуры. Уже знакомый Argo может прекрасно задеплоить всё необходимое:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: prometheus
namespace: argocd
spec:
project: default
source:
chart: kube-prometheus-stack
repoURL: https://prometheus-community.github.io/helm-charts
helm:
releaseName: prometheus
parameters:
- name: ingress.enabled
value: true
....
destination:
server: "https://kubernetes.default.svc"
namespace: monitoring
История умалчивает насколько сильно наш герой заморочился. Возможно, он почитал документацию и настроил алерты, чтобы ему на почту приходили нотификации. Возможно, он подключил экспортер для Postgres, который он тоже воткнул с помощью ArgoCD. Но Вася умный малый, поэтому скорее всего он всё это сделал.
Ingress
Время шло, тестовая площадка работала как японские часы, пока Вася смотрел онлайн-конференцию по DevOps, ощущая себя трушным DevOps-евангелистом. Оказалось, что в кластере куба он использует устаревший Nginx, который не умеет в Middleware и API Gateway. Что уж говорить, он не умеет в HTTP/3!
Почитав статьи, посмотрев конференции и послушав подкасты, Василий сносит со своего кластера Ingress Nginx и выкатывает Traefik с помощью чарта (обязательно с HTTP/3, потому что будет лучше работать на медленных неустойчивых соединениях). Да ещё и метрики можно собирать прямо в Prometheus и в дашборде смотреть графики красивые. Производительность конечно не взлетела, но по ощущениям стало быстрее работать.
HPA, а точнее KEDA
Время шло. Приложение обросло функционалом, да так жирно, что случалось упереться в производительность. Хотя запуска ещё не было, но летала куча запросов. История умалчивает, что именно побудило Василия, запустить нагрузочное тестирование на тестовом окружении, но последствия были непредсказуемыми. Прилетел "чёрный лебедь" в кластер куба, который сделал неприятно мониторингу и всем дополнительным сервисам. Всё как-то само починилось спустя полчаса, но было принято решение размазать нагрузку по разным группам.
Именно тогда Василию пришла идея ограничить ресурсы PostgREST'а, чтобы ничего больше не сломать, а по мере нагрузки выдавать ресурсы (естественно ограничив максимальным количеством). Читая умные статьи и набираясь опыта, Василий подключает KEDA. А иначе зачем он собирал метрики с траефика?
GitOps
Наконец, процесс разработки приложения подходит к концу и руководство дало разрешение на то, чтобы выкатить всё на "боевое" окружение. Вроде бы надо обрадоваться, но Василия пробирает пот и ужас. До этого всё, что он делал, - это набор каких-то случайных команд в консоли и куча разбросанных по всему $HOME файлов, половину из которых он уже удалил.
С горем пополам он собирает по крупицам всё, что он сделал, в одну директорию, пишет аннотацию, как это всё развернуть. "Что ж я делаю? Я DevOps или тварь дрожащая", - подумал он и создал в Gitlab репозиторий с файлами проекта, которые по пушу будут выкатываться на указанный в настройках кластер. Теперь новое окружение требует только наличия ArgoCD.
Василий раскатал окружение, Иван выкатил мобильные приложения, и настал production.
Новая культура
Через год после того, как проект запустился, Василий с Иваном уже не работают в "Money Black Hole", потому что у них уже есть строчка в резюме об опыте реальной работы с реальными результатами и куча различных умных слов в описании навыков. Конечно же, с таким резюме они привлекли внимание многих HR'ов. Василию предлагали позиции devops-инженера, DBA и много чего интересного.
Но Вася уже Василий Батькович, поэтому осторожно выбрал известную компанию на позицию разработчика нового микросервиса, где он снова применяет полученный опыт и разворачивает уже несколько сервисов с помощью PostgREST. В компании видят результат - новые сервисы растут как на дрожжах, задачи закрываются, и Василий становится Team Lead'ом в отделе микросервисов.
DBOps
Ещё спустя год Василий выступает на конференции посвящённой микросервисам. Набивший шишки на своём подходе, он, пытаясь объяснить, что же он сделал такого, что микросервисы стало легко делать, весело и с задором рассказывает, как ему было круто набираться опыта в стартапе "Money Black Hole". Он делится опытом про себя как "DBA который смог". Поэтому свой подход он гордо называет DBOps, когда БД является всем приложением. После выступления получил куча вопросов по типу "а как вы обошли [это] ограничение?" или "а сколько потребовалось времени, чтобы трансформировать команду?" и т.п.
Ещё через год Василий и группа единомышленников открывают консалтинговую компанию "Васянский Девелопмент". Они помогают в трансформации стартапов и крупных "игроков" на новый подход. Одновременно с этим появляется куча вакансий DBOps-инженеров. Да, вакансия очень напоминает разработчика БД, но с кучей дополнительных навыков работы с инструментами DBOps (конечно же за оклад x1.5).
А что с DevOps/SRE?
Тут уже Василий затерялся в анналах истории. Различные образовательные площадки начинают пестрить курсами DBOps-инженера, Хабр и прочие площадки начинают выпускать одну за другой статьи про то, что DBOps-инженер роли нет, а DBOps это культура дружбы разработчиков БД с инфраструктурой. Кто-то внедряет у себя DBOps, а кто-то говорит, что уже внедрил.
DevOps-инженеры тоже находят себе применение. Они начинают изучать PostgreSQL, чтобы перерасти в DBOps'ов. Кто-то, конечно, этого не делает, говоря, что надо заниматься своим делом, а DBOps - это просто попытка работодателя сэкономить на разработчиках баз данных и devops'ах.
Эпилог
Как я уже говорил в самом начале, к этой выдуманной истории стоит относиться со здоровой самоиронией. Было откровенно сложно написать настолько пассивно-агрессивный текст, при этом достаточно технический, чтобы описать то, как выглядят технологии сейчас и то, как они влияют на нашу культуру. Но надеюсь история смогла как развлечь, так и вдохновить.
Конечно, многие могли заметить, что доля самого приложения Васи в облаке была настолько незначительна, что легко могла затеряться среди остальных сервисов, если бы "не эти треклятые пользователи". Это реальность нашей культуры. Все избыточные и оверхедные примеры накручивания Васи были сделаны намеренно, чтобы показать всю нелепость ситуации.
Но было бы неверно думать, что всё, что делал Василий, было неверно. Имея определённые навыки он смог их достойно применить, всё работало, и бизнес, скорее всего, получил то, что хотел. Да, спонсоры платили сильно больше за инфраструктуру в облаке, желая сэкономить на кадрах. Но оно "то на то" и выходит, а где-то даже выгоднее, потому что ушедший Вася оставил после себя порядок, который ещё долгое время можно поддерживать и даже развивать. Если быть достаточно внимательным, то можно увидеть рынок, наполненный инструментами сильно высокого уровня намеренно, чтобы как можно быстрее можно было реализовать PoC и проверить рентабельность до того, как уйдут миллионы. Хорошо это или плохо каждый уже должен решить сам для себя.
P.S.: Mail мне не приплачивали за рекламу. Просто ковырял для будущего проекта и понравился. Так что они могут гордиться - мои комментарии это честный отзыв.
DinoZavr3
Странный у тебя юмор какой-то..
onegreyonewhite Автор
Это называется сатира. На самом деле это не просто соблюсти хронологию развития всяких *Ops и умудриться сделать в актуальном ключе (описанная история не совсем выдумка).
psynix
Спс, бодренько. Самое то с утреца