DevOps - переименованный сисадмин
Речь идёт не о том, как написано в библии и конституции, а о реальном положении дел. Оно довольно печальное и в среднеотдалённой перспективе несёт большие проблемы.
Интересно будет посмотреть ещё не вышедший доклад на эту же самую тему и сравнить - насколько он совпадает с мыслями в этой заметке.
Кстати, я снова передаю привет команде UI или UX teletype: вы идиоты и понятия не имеете, как люди вставляют ссылки в текст поста.
Вспомним, кто такой сисадмин - в широком смысле это человек, который делает и чинит "инфраструктуру", то есть: базы данных, сервера, виртуалки, кафки и прочее. Некоторые сисадмины занимались исключительно инфраструктурой предприятия для пользователей: почта, авторизация, файловые серверы и тысячи другого говна. Некоторые занимались системами, у которых была своя разработка в штате той же компании - тот же 1С. Нам в основном интересны вторые, потому что первые как помогали пользователям вводить пароль, так и будут помогать; как чинили принтер, так и будут чинить.
Теперь можно и к проблематике.
Глобально проблема была в том, что сисадмины говорили: вот вам сервер, что дальше - нас не ебёт, наше дело на него обновления устанавливать. Разработчики говорили: эсукабля, наше вееееб приложение медленно работает на вашем сервере, чините ваш сервер. А сисадмины говорили - какой сервер просили, такой мы и установили. Пока этот срач продолжался, веб-приложение тормозило. Потом сисадмины, вздыхая, увеличивали виртуальный RAM на виртуальной машине, перезагружая её в нерабочее время, и всё на какое-то время становилось нормально.
Теперь эта проблема видоизменилась. Сущностей стало в сто раз больше, но теперь девопсы (переименованные сисадмины) говорят: "вы неправильно используете наши инструменты, инфраструктуру и т.п. Вот вам сто пятьдесят тысяч страниц в нашей "вики", прочитайте их и действуйте". Разработчики открывают и хуеют, как там всё непонятно и косноязычно.
Следующая проблема заключалась в том, что закидываемые в сисадминов хотелки обрабатывались очень асинхронно и очень эвентуально. Задачи могли лежать по 4 года без движения. Задачу могли выбросить. А можно было напрячь руководителя руководителей, он бы пришёл и пропушил админа что-то сделать.
Изменилось ли что-то? Да конечно же нет. Поскольку задач у админов стало ещё больше, то теперь ждать приходится ещё больше. Просто если раньше было "админ, создай нам виртуалку", то теперь "девопс, у меня твоим терраформом не создаётся виртуалка, пишет error parsing metadata, error unmarshaling JSON, kokoko stop error 0x000000000, error error, а всё что я задал - имя, цпу и рам".
Вот и получается, что хаоса и баттхёрта стало не меньше, а больше. Теперь ещё и мало шансов, что получится с чем-то до конца разобраться и сделать пиздато - потому что сегодня девопс занят мониторингом, завтра пайплайном, послезавтра ещё чем-то - и в итоге всё годами недоделано и нигде не используется на 100% автоматизация.
Вопрос - какого хуя так вышло?
Для ответа нам надо понять, как мыслит сисадмин. Сисадмин мыслит так: передо мной чёрный ящик (или получёрный, если опенсорс); я подаю управляющее воздействие, получаю ожидаемый результат; если результат неожиданный, то корректирую воздействие.
Чем больше ящиков, тем больше возникает потребность в автоматизации управляющих результатов - ну, тыкать кнопки и править конфиги вручную занимает многовато времени, всё-таки. Что делает админ? Админ пишет скрипт: с такими-то переменными выполни такую-то команду, а потом ещё такую, такую и такую. Получается такая очень простая программа, которая запустилась, выполнилась и пошла нахуй завершилась.
Ну, собственно, тут ещё нет никакой трагедии. В конце концов, настоящие программы работают примерно также - внутри них есть какой-никакой диспетчер событий в том или ином виде, который принимает события и запускает обработчики событий. Да, эти обработчики, как правило, не порождают отдельных процессов - но всё же именно идеологическое различие здесь минимальное.
Когда скриптов уже под миллион, а зарплата, наоборот, падает, так как инфляцию никто не отменял - админ садится и читает про Терраформ, Кубернетес, Ансибл. Там написано: "смотри, твоя система - это автомат, работай с ней, как с автоматом - то есть опиши желаемое состояние, а скрипты свои ебаные не пиши: мы написали за тебя обработчики событий" (ну, конечно это не события в прямом смысле слова). Этому подходу, если что, лет 50 - просто только сейчас (точнее, с 2007 года примерно) его стали пытаться продвигать.
Сисадмин читает другое: "мы придумали тебе новые командочки, которые более модные и там почти что как будто бы программирование на языке программирования". Соответственно, он работает с этим, как привык - пишет скрипты, которые включают в себя запуск новомодных утилит. То есть он продолжает заниматься Очень Хуёвым Программированием. Скрипты на 500000 строк.
Помимо этого, код, который он пишет на инфраструктурных языках, умудряется быть ужасным - хотя, казалось бы, как можно писать ужасно на таких анально ограниченных языках, а вот, оказывается, можно. Если есть средства инкапсуляции и/или абстракции - они используются самым невероятным способом; если есть функции - лучше бы их не было, так как изобретаются функции с 100500 побочных эффектов.
Почему всё так? Потому что, в отличие от разработчика, сисадмин не имеет понятия о: качестве кода, чистой архитектуре, безопасности приложений. Сисадмин в душе не ебёт, почему надо писать функцию из двух строчек, сисадмин не понимает принцип сингл респонсибилити, потому что это нинужно и ненастоящее программирование. Понимаете, он сисадмин, но уже занялся не своим делом (программированием), и значит, ему все должны и обязаны, но критиковать не смейте.
Всё это заставляет грустить стейкхолдеров продукта и думать - а нельзя ли некоторых разработчиков обучить работе с инфраструктурой, чтобы всё было сделано аккуратно, как в разработке?