Инфраструктура для людей 1
Подавляющее большинство современных инструментов управления инфраструктурой сделаны не для людей. Имея на руках кучу отличных технологий и карт-бланш, из-под рук “творцов” всё равно выходят уродливые пародии на Do Nothing Machine(https://www.youtube.com/watch?v=Bp4tGTNNi1I), которыми потом приходится пользоваться несчастным инженерам.
По идее, с течением времени уровень абстракции должен повышаться, а сложность управления — уменьшаться. Когда выстрелила Lambda и serverless-движение, то казалось что вот он — конец громоздким архитектурам и серверам. Увы, на деле всё не так просто и Lambda стала еще одним инструментом для узкого круга задач.
Меня сильно огорчает это положение вещей. Большинству проектов нужно всего ничего:
- Балансировщик-гейтвей с SSL-терминацией
- Эфемерные сервера приложений и минимальный service discovery между ними
- Крон, выполнение кода по расписанию
- Managed базы данных (реляционные и нереляционные) с бекапами, копированиями, автоматическим масштабированием
- Объектное хранилище (S3) и CDN для него
- Очереди (SQS и всевозможные *MQ)
- Чтобы всем этим можно было управлять по API
- Blue-green (red-black) deployment, клонирование окружений, canary releases
- Все это в одном месте и чтобы запускалось одной кнопочкой
Всё. Этим набором (а то и меньше) можно закрыть почти всё что угодно. Конечно, вдобавок надо еще мониторинг физических и бизнес метрик, централизованное логирование, фаерволы и всё остальное из 12-factor application набора, но то уже плюшки, поначалу можно жить и без них. Но для того, чтобы всё это настроить, завести и потом поддерживать, надо приложить титанические усилия. Большинство держит для этой чёрной работы специального человека или целый отдел.
К сожалению, индустрия идет по пути культа больших компаний и пытается скуксить (“натянуть наоборот”) решения, выросшие из потребностей гигантов, на свою маленькую проблему. У нас появляются кубернетесы, но кубернетес из коробки слишком сложен(https://github.com/kelseyhightower/kubernetes-the-hard-way) поэтому давайте сделаем еще десяток инструментов для упрощения кубернетеса: minikube, k3s, kind, еще черти что, для конфигурации возьмем Б-го мерзкий YAML а для гибкости навернем туда разнообразных шаблонизаторов и сделаем компиляцию одного ямля в другой. На одном из проектов, где я сейчас работаю, все крутится в кубере. Даже с учётом того, что мы используем GKE, окружения не сильно сложные и все деплоится через helm, у меня просто лютейше подгорает от всего этого. После пары месяцев работы над инфраструктурными задачами я совершенно перехотел заниматься тем, что называется DevOps. Пустите меня обратно в коробочку, откуда я могу выдавать код, который “работает на моей машине”, а дальше делайте с ним что хотите. Я бомблю каждый день от невероятной сложности всего происходящего и до меня теперь на самом деле дошла шутка про Senior YAML Engineer. Мне кажется, люди могут лучше.
(если у вас есть комментарии и возражения, например о том что все на самом деле хорошо, то обязательно оставляйте его у меня в блоге:
https://www.rozhkov.me/post/infrastructure-for-a-people/)