Кубер
Ну штош, вот и я своими ручонками добрался до хайпа последних лет, кубера. Не то, чтобы я очень хотел хайпануть, однако текущая архитектура чем дальше, тем больше меня пугала.
Дело в том, что у нас чуть меньше сотни разных дата джоб(ов?), и все они работают из под базового докер образа шедулера — Airflow. Это простое и прекрасно подходящее для маленького масштаба решение, however, с ростом разнообразия джобов замечаешь, как файл с зависимостями уже перестаёт помещаться на один пролёт экрана, потом на другой... Затем при обновлении Airflow обнаруживаешь, как автоматом обновляется десяток-другой библиотек, которые требуют тестирования и изменения кода. Потом падает какая-нибудь интеграция из-за депрекейта текущей версии, а чтобы её обновить, приходится обновить весь эйрфлоу с вышеупомянутыми последствиями. В итоге, вместо одного дня это занимает неделю, а всё это время джоба лежит. И вишенка: если нужно заскейлить по памяти или процу воркера, на котором запускается весь этот зоопарк, приходится скейлить всю ноду навсегда, хотя мог бы запустить джобу на on-demand compute на часик и отпустить ресурсы.
Так встал вопрос: что с этим делать? Довольно очевидным стало докеризировать каждую джобу в свой контейнер, собирать её в CI/CD, чтобы перестать растить базовый образ Airflow и иметь гибкость в обновлении отдельных джоб. Но где запускать получившиеся контейнеры? Вариантов на рассмотрение попалось несколько: запускать код на cloud function, перейти на использование всяких proprietary SaaS, типа spark cluster as service или запилить кубер.
Вариант с облачными функциями изначально нравился больше всего из-за простоты, но испугали: небольшой максимальный размер ноды (32 гб оперативки, для данных бывает нужно МНОГО), малые возможности кастомизации (по ресурсам, сети, и т.п.).
SaaS был бы следующим по простоте, но с ним две проблемы: он довольно жёстко биндит к SaaS провайдеру + он специфичен под каждый тип задачи. Под спарк нужно осваивать Spark SaaS, под другой тип задач, нужно осваивать другой SaaS, а в случае необходимости перехода к другому SaaS провайдеру... Suffer.
Кубер больше всего пугал ненужным оверхедом сложности: ведь мне нужно просто шедулить джобы поверх CPU/RAM, а ты в комплекте получаешь весь этот цирк с ямлами с сервисами/деплойментами, ментейном кубер-кластера 🤮... Но! Это оказалось относительно неплохо решаемым в мире GCP и Airflow. Во-первых, у GCP есть Autopilot версия k8s кластера, в которой он скейлится сам, и тебе ничего не нужно для этого делать вообще. Во-вторых, у Airflow есть из коробки k8s-operator'ы, которые позволяют ничего не знать про yml-файлы кубера, а просто описать, какой докер имедж на каких ресурсах ты хочешь запустить, и ОНО РАБОТАЕТ. 3 месяца, полёт нормальный.
Самая трудозатратная часть оказалась написать CI/CD пайплайн, собирающий докер-образы и пушащий их в репозиторий — отчасти потому, что я никогда этого не делал, отчасти потому, что там вылезло много мелких нюансов: от авторизаций, до запуска авто-тестов и матчинга имени докер образа при его билде и потом при вызове в кубере.
Доволен ли я получившимся? И да, и нет. Работает оно хорошо. Однако, времени на CI/CD и проектирование архитектуры ушло много: всё это я пилил несколько месяцев.
Интересно ваше мнение: как бы вы предпочли решать подобную проблему?
Ну штош, вот и я своими ручонками добрался до хайпа последних лет, кубера. Не то, чтобы я очень хотел хайпануть, однако текущая архитектура чем дальше, тем больше меня пугала.
Дело в том, что у нас чуть меньше сотни разных дата джоб(ов?), и все они работают из под базового докер образа шедулера — Airflow. Это простое и прекрасно подходящее для маленького масштаба решение, however, с ростом разнообразия джобов замечаешь, как файл с зависимостями уже перестаёт помещаться на один пролёт экрана, потом на другой... Затем при обновлении Airflow обнаруживаешь, как автоматом обновляется десяток-другой библиотек, которые требуют тестирования и изменения кода. Потом падает какая-нибудь интеграция из-за депрекейта текущей версии, а чтобы её обновить, приходится обновить весь эйрфлоу с вышеупомянутыми последствиями. В итоге, вместо одного дня это занимает неделю, а всё это время джоба лежит. И вишенка: если нужно заскейлить по памяти или процу воркера, на котором запускается весь этот зоопарк, приходится скейлить всю ноду навсегда, хотя мог бы запустить джобу на on-demand compute на часик и отпустить ресурсы.
Так встал вопрос: что с этим делать? Довольно очевидным стало докеризировать каждую джобу в свой контейнер, собирать её в CI/CD, чтобы перестать растить базовый образ Airflow и иметь гибкость в обновлении отдельных джоб. Но где запускать получившиеся контейнеры? Вариантов на рассмотрение попалось несколько: запускать код на cloud function, перейти на использование всяких proprietary SaaS, типа spark cluster as service или запилить кубер.
Вариант с облачными функциями изначально нравился больше всего из-за простоты, но испугали: небольшой максимальный размер ноды (32 гб оперативки, для данных бывает нужно МНОГО), малые возможности кастомизации (по ресурсам, сети, и т.п.).
SaaS был бы следующим по простоте, но с ним две проблемы: он довольно жёстко биндит к SaaS провайдеру + он специфичен под каждый тип задачи. Под спарк нужно осваивать Spark SaaS, под другой тип задач, нужно осваивать другой SaaS, а в случае необходимости перехода к другому SaaS провайдеру... Suffer.
Кубер больше всего пугал ненужным оверхедом сложности: ведь мне нужно просто шедулить джобы поверх CPU/RAM, а ты в комплекте получаешь весь этот цирк с ямлами с сервисами/деплойментами, ментейном кубер-кластера 🤮... Но! Это оказалось относительно неплохо решаемым в мире GCP и Airflow. Во-первых, у GCP есть Autopilot версия k8s кластера, в которой он скейлится сам, и тебе ничего не нужно для этого делать вообще. Во-вторых, у Airflow есть из коробки k8s-operator'ы, которые позволяют ничего не знать про yml-файлы кубера, а просто описать, какой докер имедж на каких ресурсах ты хочешь запустить, и ОНО РАБОТАЕТ. 3 месяца, полёт нормальный.
Самая трудозатратная часть оказалась написать CI/CD пайплайн, собирающий докер-образы и пушащий их в репозиторий — отчасти потому, что я никогда этого не делал, отчасти потому, что там вылезло много мелких нюансов: от авторизаций, до запуска авто-тестов и матчинга имени докер образа при его билде и потом при вызове в кубере.
Доволен ли я получившимся? И да, и нет. Работает оно хорошо. Однако, времени на CI/CD и проектирование архитектуры ушло много: всё это я пилил несколько месяцев.
Интересно ваше мнение: как бы вы предпочли решать подобную проблему?
🔥14❤2
Год велосипеда в Швеции
Нет, это не астрологи объявили, это я уже год катаю по Швеции на велике: и когда жили в Стокгольме, и в Густавсберге, и сейчас в Нючёпинге. Это было топовым решением, ведь пока я работаю один в семье, машину иметь дороговато, а ходить пешком медленно. Велик же, наоборот, экономит деньги на проезд, тренирует ноги и дарит кайфы и идеи для путешествий.
Велоинфраструктура в Швеции великолепна, причём как в Стокгольме, так и в подстокгольмье и даже в нашем отдалённом Нючёпинге. Куда бы ни поехал (включая путешествия по окружающим деревням), 80-100% дороги будет с велодорожкой. А даже если её нет, с местными водителями ездить по одной дороге куда комфортнее и безопаснее, чем в Москве или Подмосковье.
В нашем пригородном поезде до Стокгольма можно провозить велосипед, благодаря этому я доезжаю от дома до станции, а затем от станции до офиса на велике, потратив по 10-15 минут. Самый же длинный мой трип был на 70 км за день по автомобильной дороге в местную усадьбу Nynäs Slott на сжигание зимы 🙂
А ещё, я впервые прокатался всю зиму. В России как-то все вокруг говорили, что будешь вязнуть в снегу и вообще холодно, а я верил 🥴. Но во-первых, снега почти не было, а если и был, то на короткие дистанции и по снегу норм. Во-вторых, мороза тоже особо не было, максимум -12, и то несколько дней. Никто же боится замёрзнуть на лыжах в –15-20, — хотя по большому счёту это то же самое. И я не один такой: по ощущениям, зимой продолжает кататься процентов 30 велосипедистов.
Нет, это не астрологи объявили, это я уже год катаю по Швеции на велике: и когда жили в Стокгольме, и в Густавсберге, и сейчас в Нючёпинге. Это было топовым решением, ведь пока я работаю один в семье, машину иметь дороговато, а ходить пешком медленно. Велик же, наоборот, экономит деньги на проезд, тренирует ноги и дарит кайфы и идеи для путешествий.
Велоинфраструктура в Швеции великолепна, причём как в Стокгольме, так и в подстокгольмье и даже в нашем отдалённом Нючёпинге. Куда бы ни поехал (включая путешествия по окружающим деревням), 80-100% дороги будет с велодорожкой. А даже если её нет, с местными водителями ездить по одной дороге куда комфортнее и безопаснее, чем в Москве или Подмосковье.
В нашем пригородном поезде до Стокгольма можно провозить велосипед, благодаря этому я доезжаю от дома до станции, а затем от станции до офиса на велике, потратив по 10-15 минут. Самый же длинный мой трип был на 70 км за день по автомобильной дороге в местную усадьбу Nynäs Slott на сжигание зимы 🙂
А ещё, я впервые прокатался всю зиму. В России как-то все вокруг говорили, что будешь вязнуть в снегу и вообще холодно, а я верил 🥴. Но во-первых, снега почти не было, а если и был, то на короткие дистанции и по снегу норм. Во-вторых, мороза тоже особо не было, максимум -12, и то несколько дней. Никто же боится замёрзнуть на лыжах в –15-20, — хотя по большому счёту это то же самое. И я не один такой: по ощущениям, зимой продолжает кататься процентов 30 велосипедистов.
🔥18👍1😁1
Немного фоточек (и видечек) из велотрипов)
🔥27❤4👍3